2014-11-19 00:25:21 +08:00
|
|
|
|
// http_servlet.cpp : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨Ӧ<CCA8>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ㡣
|
|
|
|
|
//
|
|
|
|
|
|
2014-12-14 18:26:52 +08:00
|
|
|
|
#include "stdafx.h"
|
2014-11-19 00:25:21 +08:00
|
|
|
|
|
|
|
|
|
using namespace acl;
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
class http_servlet : public HttpServlet
|
|
|
|
|
{
|
|
|
|
|
public:
|
2015-09-27 20:59:21 +08:00
|
|
|
|
http_servlet(socket_stream* stream, session* session)
|
|
|
|
|
: HttpServlet(stream, session)
|
2014-11-19 00:25:21 +08:00
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
~http_servlet(void)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2015-09-27 20:59:21 +08:00
|
|
|
|
virtual bool doOther(HttpServletRequest&, HttpServletResponse& res,
|
|
|
|
|
const char* method)
|
2014-11-19 00:25:21 +08:00
|
|
|
|
{
|
|
|
|
|
res.setStatus(400);
|
|
|
|
|
res.setContentType("text/xml; charset=gb2312");
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> http <20><>Ӧͷ
|
|
|
|
|
if (res.sendHeader() == false)
|
|
|
|
|
return false;
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> http <20><>Ӧ<EFBFBD><D3A6>
|
2015-09-27 20:59:21 +08:00
|
|
|
|
string buf;
|
|
|
|
|
buf.format("<root error='unkown method: %s' />\r\n", method);
|
2014-11-19 00:25:21 +08:00
|
|
|
|
(void) res.getOutputStream().write(buf);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual bool doGet(HttpServletRequest& req, HttpServletResponse& res)
|
|
|
|
|
{
|
|
|
|
|
return doPost(req, res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual bool doPost(HttpServletRequest& req, HttpServletResponse& res)
|
|
|
|
|
{
|
|
|
|
|
const char* sid = req.getSession().getAttribute("sid");
|
|
|
|
|
if (*sid == 0)
|
|
|
|
|
req.getSession().setAttribute("sid", "xxxxxx");
|
|
|
|
|
sid = req.getSession().getAttribute("sid");
|
|
|
|
|
|
|
|
|
|
const char* cookie1 = req.getCookieValue("name1");
|
|
|
|
|
const char* cookie2 = req.getCookieValue("name2");
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> HTTP <20><>Ӧͷ
|
|
|
|
|
res.addCookie("name1", "value1");
|
|
|
|
|
res.addCookie("name2", "value2", ".test.com", "/", 3600 * 24);
|
|
|
|
|
// res.setStatus(400); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7>ص<EFBFBD>״̬<D7B4><CCAC>
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ַ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|
|
|
|
if (0)
|
|
|
|
|
res.setContentType("text/xml; charset=gb2312");
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
res.setContentType("text/xml");
|
|
|
|
|
res.setCharacterEncoding("gb2312");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const char* param1 = req.getParameter("name1");
|
|
|
|
|
const char* param2 = req.getParameter("name2");
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> xml <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
xml body;
|
|
|
|
|
body.get_root().add_child("root", true)
|
|
|
|
|
.add_child("sessions", true)
|
|
|
|
|
.add_child("session", true)
|
|
|
|
|
.add_attr("sid", sid ? sid : "null")
|
|
|
|
|
.get_parent()
|
|
|
|
|
.get_parent()
|
|
|
|
|
.add_child("cookies", true)
|
|
|
|
|
.add_child("cookie", true)
|
|
|
|
|
.add_attr("name1", cookie1 ? cookie1 : "null")
|
|
|
|
|
.get_parent()
|
|
|
|
|
.add_child("cookie", true)
|
|
|
|
|
.add_attr("name2", cookie2 ? cookie2 : "null")
|
|
|
|
|
.get_parent()
|
|
|
|
|
.get_parent()
|
|
|
|
|
.add_child("params", true)
|
|
|
|
|
.add_child("param", true)
|
|
|
|
|
.add_attr("name1", param1 ? param1 : "null")
|
|
|
|
|
.get_parent()
|
|
|
|
|
.add_child("param", true)
|
|
|
|
|
.add_attr("name2", param2 ? param2 : "null");
|
|
|
|
|
string buf;
|
|
|
|
|
body.build_xml(buf);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> http <20><>Ӧͷ
|
|
|
|
|
if (res.sendHeader() == false)
|
|
|
|
|
return false;
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> http <20><>Ӧ<EFBFBD><D3A6>
|
|
|
|
|
if (res.getOutputStream().write(buf) == -1)
|
|
|
|
|
return false;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
protected:
|
|
|
|
|
private:
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
static void do_run(socket_stream* stream)
|
|
|
|
|
{
|
|
|
|
|
memcache_session session("127.0.0.1:11211");
|
2015-09-27 20:59:21 +08:00
|
|
|
|
http_servlet servlet(stream, &session);
|
2014-11-19 00:25:21 +08:00
|
|
|
|
servlet.setLocalCharset("gb2312");
|
2015-09-27 20:59:21 +08:00
|
|
|
|
servlet.doRun();
|
2014-11-19 00:25:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ʱ<EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
class master_service : public master_proc
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
master_service() {}
|
|
|
|
|
~master_service() {}
|
|
|
|
|
protected:
|
|
|
|
|
virtual void on_accept(socket_stream* stream)
|
|
|
|
|
{
|
|
|
|
|
do_run(stream);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// WEB <20><><EFBFBD><EFBFBD>ģʽ
|
|
|
|
|
static void do_alone(void)
|
|
|
|
|
{
|
|
|
|
|
master_service service;
|
|
|
|
|
printf("listen: 0.0.0.0:8888 ...\r\n");
|
2014-12-14 18:26:52 +08:00
|
|
|
|
service.run_alone("0.0.0.0:8888", NULL, 0); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD>ʽ
|
2014-11-19 00:25:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// WEB CGI ģʽ
|
|
|
|
|
static void do_cgi(void)
|
|
|
|
|
{
|
|
|
|
|
do_run(NULL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main(int argc, char* argv[])
|
|
|
|
|
{
|
|
|
|
|
#ifdef WIN32
|
|
|
|
|
acl::acl_cpp_init();
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|
|
|
|
if (argc >= 2 && strcmp(argv[1], "alone") == 0)
|
|
|
|
|
do_alone();
|
|
|
|
|
else
|
|
|
|
|
do_cgi();
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|