Servlet提供EOF异常

时间:2015-12-21 11:53:31

标签: java json ajax servlets jackson

我从一个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但仍然无法弄清楚我出错的地方..请帮忙

0 个答案:

没有答案