// Initialize web server.
http::server::cWebem theServer(
"0.0.0.0", // address
"1570", // port
".\\"); // document root
第四步:用webem注册应用方法:
cHello hello;
// register application method
// Whenever server sees <!--#webem hello -->
// call cHello::DisplayHTML() and include the HTML returned
theServer.RegisterIncludeCode( "hello",
boost::bind(
&cHello::DisplayHTML, // member function
&hello ) ); // instance of class
第五步:最后,你已经准备好了启动服务。
// run the server
theServer.Run();
让我们来创建一个更儒雅的程序,可通过姓名(如CodeProject,Canadian)来定位网络。
第一步:新建站点:
What is your name, please?
<form action=name.webem>
<input name=yourname /><input value="Enter" type=submit />
</form>
The Webem Embedded Web server says: <!--#webem hello -->
该表单提供一个文本域,可以使用户输入姓名。另外还有一个提交按钮将姓名提交给服务器。表单属性“action=name.webem”确保webem服务器会调用应用通过“name”注册的方法来处理输入。
第二步:创建应用类:
/// An application class which says hello to the identified user
class cHelloForm
{
string UserName;
http::server::cWebem& myWebem;
public:
cHelloForm( http::server::cWebem& webem ) :
myWebem( webem )
{
myWebem.RegisterIncludeCode( "hello",
boost::bind(
&cHelloForm::DisplayHTML, // member function
this ) ); // instance of class
myWebem.RegisterActionCode( "name",
boost::bind(
&cHelloForm::Action, // member function
this ) ); // instance of class
}
char * DisplayHTML()
{
static char buf[1000];
if( UserName.length() )
sprintf_s( buf, 999,
"Hello, %s", UserName.c_str() );
else
buf[0] = '\0';
return buf;
}
char * Action()
{
UserName = myWebem.FindValue("yourname");
return "/index.html";
}
};
这个类存储了对webem服务器的引用. 它允许在其构建时维护对其自身方法的注册, 并调用cWebem类的FindValue()来提取输入表单域中的值.
这个类需要注册两个方法,一个在表单提交时保存输入的用户名,一个用来在页面被组合起来发送给浏览器时展示被存储的用户名称.
动作方法必须返回要在提交按钮点击响应中展示的web页面.
注意所有的动作方法都是有Webem在包含方法之前调用的,所以web页面总是会展示更新了的数据.
第三步:构建webem,构建应用类并启动服务器:
// Initialize web server
http::server::cWebem theServer(
"0.0.0.0", // address
"1570", // port
".\\"); // document root
// Initialize application code
cHelloForm hello( theServer );
// run the server
theServer.Run();
你可能需要在其他线程中启动服务器,这样你应用能够继续在实验室装置中记录日志数据。为了做到这一点,更改对server::run的调用:
boost::thread* pThread = new boost::thread(
boost::bind(
&http::server::server::run, // member function
&theServer ) ); // instance of class
Webem控件是以标准方式监视显示和操作应用数据的细节的类,所以应用程序开发者不需要关注生成HTML文本的所有细节。