MYCP开发指南系列之:开发第一个C++ Servlet

来源:互联网 发布:软件测试 期刊 编辑:程序博客网 时间:2024/05/17 23:13

1.1    开发第一个 C++ Servlet

C++ Servlet CSP 一样,是MYCPweb 层组件,用于输出动态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 支持的其他标准函数,如doPUTdoDELETE 等,配合输出XML 数据,实现REST 风格开发框架。

原创粉丝点击