package com.jqmobile.core.server.servlet2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jqmobile.core.http2.HttpSerializableObject;
import com.jqmobile.core.http2.HttpUtils;
import com.jqmobile.core.server.Application;
import com.jqmobile.core.server.servlet.test.AddToDo;
import com.jqmobile.core.server.session.Session;
import com.jqmobile.core.utils.json.JSONConvertor2;
import com.jqmobile.core.utils.json.JSONObject;
/**
* <p>core http servlet</p>
* <p>满足久其移动通讯协议
* <p>Copyright: 版权所有 (c) 2002 - 2015<br>
* Company: 久其</p>
*
* @author modi
* @version 2014年3月17日
*/
public class CoreHttpServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 797248197068645542L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
handler(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
handler(req, resp);
}
private void handler(HttpServletRequest request, HttpServletResponse resp) throws IOException {
//
request.setCharacterEncoding(HttpUtils.CHARSET);
resp.setCharacterEncoding(HttpUtils.CHARSET);
//
StringBuilder sResult = new StringBuilder();
InputStream httpInput = null;
BufferedReader httpReader = null;
// 读取数据
httpInput = request.getInputStream();
httpReader = new BufferedReader(new InputStreamReader(httpInput,
HttpUtils.CHARSET));
String line = null;
while ((line = httpReader.readLine()) != null) {
if (sResult.length() > 0) {
sResult.append("\n");
}
sResult.append(line);
}
try{
JSONObject jRequestData = new JSONObject(sResult.toString());
HttpSerializableObject obj = (HttpSerializableObject) JSONConvertor2.unAutoSerializable(jRequestData, HttpSerializableObject.class);
if(null != obj.getSession()){
Session.vali(obj.getSession(), request);
}
HttpSerializableObject ret = invoke(request, obj);
output(resp, ret);
}catch(Throwable e){
//请求格式错误
e.printStackTrace();
return;
}
}
protected HttpSerializableObject invoke(HttpServletRequest request,
HttpSerializableObject obj) {
return HttpServiceUtil.invoke(obj, request);
}
private void output(final HttpServletResponse response, HttpSerializableObject ret)
throws IOException {
String text = JSONConvertor2.serializable(ret).toString();//new JSONObject(ret).toString();
response.setContentType(HttpUtils.HTTP_CONNTENT_TYPE + "; charset="
+ HttpUtils.CHARSET);
response.setCharacterEncoding(HttpUtils.CHARSET);
response.getOutputStream().write(
text.toString().getBytes(HttpUtils.CHARSET));
response.getOutputStream().flush();
}
@Override
public void init() throws ServletException {
super.init();
Application app = Application.getApplication();
app.initSystem2();
app.initService();
AddToDo.get();
}
}