1.1 开发第一个 C++ Servlet
C++ Servlet 跟CSP 一样,是MYCP 的web 层组件,用于输出动态HTML 页面,实现web 应用的界面显示。关于CSP 的开发规范请看《CSP_1_1.pdf 》文档,本节主要简单描述Servlet 的开发流程。
1.1.1 cspServlet.cpp 文件
新建一个cspServlet.cpp 文件,或者利用VC 新建一个普通DLL 类型工程项目。
1.1.2 添加头文件
#include <CGCBase/httpapp.h>
using namespace cgc;
1.1.3 实现标准 doGET 函数
extern "C" HTTP_STATUSCODE CGC_API doGET(const cgcHttpRequest::pointer & request, cgcHttpResponse::pointer response)
{
cgcSession::pointer session = request->getSession();
response->println("<HTML>" );
response->println("<TITLE>MYCP Web Server</TITLE>" );
response->println("<h1>Get Sample</h1>" );
response->println("<h2>Session Info:</h2>" );
if (session->isNewSession())
{
response->println("This is a new session." );
}else
{
response->println("This is not a new session." );
}
response->println("<h2>Headers:</h2>" );
std::vector<cgcKeyValue::pointer> headers;
if (request->getHeaders(headers))
{
for (size_t i=0; i<headers.size(); i++)
{
cgcKeyValue::pointer keyValue = headers[i];
response->println("%s: %s" , keyValue->getKey().c_str(), keyValue->getValue()->getStr().c_str());
}
}else
{
response->println("Not header info." );
}
response->println("<h2>Propertys:</h2>" );
std::vector<cgcKeyValue::pointer> parameters;
if (request->getParameters(parameters))
{
for (size_t i=0; i<parameters.size(); i++)
{
cgcKeyValue::pointer keyValue = parameters[i];
response->println("%s = %s" , keyValue->getKey().c_str(), keyValue->getValue()->getStr().c_str());
}
}else
{
response->println("Not property." );
}
response->println("</HTML>" );
return STATUS_CODE_200;
}
1.1.4 编译部署
编译cspServlet 工程,生成cspServlet.dll 或者libcspServlet.so 文件,复制文件到$(MYCP_BINPATH)/modules 目录。
修改$(MYCP_BINPATH)/conf/modules.xml 文件,在app 配置项增加一个组件配置项;
<app>
…
<module>
<file>cspServlet</file>
<allowall>1</allowall>
</module>
…
</app>
设置组件文件,允许开放所有函数。
1.1.5 测试 cspServlet 组件
打开浏览器,输入http://127.0.0.1:81/servlet/cspServlet ,访问cspServlet 组件的doGET 函数,如下图:
http://127.0.0.0:81 是服务器域名或IP 地址,后面带servlet 是固定格式,用于访问所有的C++ Servlet 组件,默认访问doGET 函数。
下图演示带参数访问cspServlet 组件的doGET 函数:
1.1.6 开发自定义函数
如下代码实现一下自定义函数HelloWorld :
extern "C" HTTP_STATUSCODE CGC_API doHelloWorld(const cgcHttpRequest::pointer & request, cgcHttpResponse::pointer response)
{
response->println("<HTML>" );
response->println("<TITLE>MYCP Web Server</TITLE>" );
response->println("<h1>HelloWorld Sample</h1>" );
response->println("</HTML>" );
return STATUS_CODE_200;
}
1.1.7 测试自定义函数
打开浏览器,输入http://127.0.0.1:81/servlet/cspServlet/HelloWorld ,访问cspServlet 组件的doHelloWorld 函数,如下图:
1.1.8 支持 Servlet 函数
MYCP 除了支持以下标准HTTP 函数,还支持自定义函数:
l doGET
l doPOST
l doPUT
l doDELETE
l doHEAD
l doOPTIONS
l doTRACE
l doCONNECT
1.1.9 总结
C++ Servlet 支持实现CSP 相同功能,输出动态HTML 页面,CSP 不用编译,而Servlet 需要,所以UI 层面层建议使用CSP 做开发,而Servlet 做为辅助开发,帮助实现业务处理文件的功能。
可以利用Servlet 支持的其他标准函数,如doPUT 、doDELETE 等,配合输出XML 数据,实现REST 风格开发框架。