我从一个html向servlet发送一个Ajax请求并返回一个示例输出来测试整个后端代码。前端能够正确发送ajax请求,但后端无法正确处理请求。我已经在java代码中的各个级别放置了print语句,以方便de bugging。
doGet,doPost方法分为1个文件和1个文件。 service方法在另一个文件中,以便于维护。
当我在Tomcat服务器上运行代码时,java代码中的所有print语句都没有被执行。相反,我在tomcat日志文件中获得了EOF异常。
Ajax代码 ...
send = function(req) {
alert("Inside send function.");
alert(JSON.stringify(req));
$.ajax({
url: '/flsv2/GetRequestsByUser',
type:'GET',
data: req,
contentType:"application/json",
dataType: "json",
success: function(response) {
alert("working");
},
error: function() {
alert("not working");
//alert(data);
}
});
};
主服务代码(GetRequestsByUser.java) ...
@WebServlet("/GetRequestsByUser")
public class GetRequestsByUser extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest httprequest, HttpServletResponse httpresponse) throws ServletException, IOException {
httpresponse.setContentType("application/json");
System.out.println("Inside GET Method");
doPost(httprequest,httpresponse);
}
protected void doPost(HttpServletRequest httprequest, HttpServletResponse httpresponse) throws ServletException, IOException {
// TODO Auto-generated method stub
//HTTP request to Service request pojo
ObjectMapper mapper = new ObjectMapper();
GetRequestsByUserReqObj request = mapper.readValue(httprequest.getInputStream(), GetRequestsByUserReqObj.class);
httpresponse.setContentType("application/json");
// application logic comes here --------
GetRequestsByUserResObj getResponse = null;
try {
//App handler to process request and create Service response pojo
getResponse = (GetRequestsByUserResObj) GetRequestsByUserHandler.getInstance().process(request);
//Service response pojo to JSON
PrintWriter out = httpresponse.getWriter();
ObjectMapper mapper1 = new ObjectMapper();
mapper1.writeValue(httpresponse.getOutputStream(), getResponse);
httpresponse.setContentType("application/json; charset=UTF-8");
} catch (NotImplementedException e) {
e.printStackTrace();
System.out.println("GetRequestsByUser process method not implemented");
httpresponse.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, "GetRequestsByUser process method not implemented");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
服务方法代码(GetRequestsByUserHandler.java) ..
public class GetRequestsByUserHandler implements AppHandler {
private String Id=null,operation,message;
private int Code,itemId,check=0,token=0;
private StoreModel sm;
private Response res = new Response();
private static GetRequestsByUserHandler instance = null;
public static GetRequestsByUserHandler getInstance() {
if (instance == null)
instance = new GetRequestsByUserHandler();
return instance;
}
@Override
public ResObj process(ReqObj req) throws Exception {
// TODO Auto-generated method stub
GetRequestsByUserReqObj r = (GetRequestsByUserReqObj) req;
System.out.println(r);
//TODO: Core of the processing takes place here
//Create the response
GetRequestsByUserResObj response=new GetRequestsByUserResObj();
//Populate the response
response.setTitle("Sample");;
response.setDesc("Sample Desc");
response.setOwneruserId("");
response.setRequestId(0);
response.setDate("1/12/2015");
response.setToken(0);
//return the response
return response;
}
}
Tomcat错误日志 ...
Dec 21, 2015 05:22:32 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [services.GetRequestsByUser] in context with path [/flsv2] threw exception
java.io.EOFException: No content to map to Object due to end of input
at org.codehaus.jackson.map.ObjectMapper._initForReading(ObjectMapper.java:2766)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2709)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1900)
at services.GetRequestsByUser.doPost(Unknown Source)
at services.GetRequestsByUser.doGet(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
我已经完成了多个教程&有关servlet的文章,杰克逊Mapper但仍然无法弄清楚我出错的地方..请帮忙