【问题标题】:Problems when calling Servlet from Restful webservice从 Restful webservice 调用 Servlet 时的问题
【发布时间】:2012-11-29 16:29:59
【问题描述】:

我正在使用 Jersey 开发 REST Web 服务,我需要从 Web 服务方法调用 servlet 来验证用户身份。运行以下代码时出现异常:

@Path("/server")
public class WebServer {
    @Resource
    private WebServiceContext context;  

    @POST
    @Path("/post")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response createTrackInJSON(Track track) throws IOException, ServletException { 
        ServletContext servletContext = (ServletContext) context.getMessageContext()
            .get(MessageContext.SERVLET_CONTEXT); // Here I am getting NPE

        HttpServletRequest request = (HttpServletRequest) context.getMessageContext()
            .get(MessageContext.SERVLET_REQUEST);

        HttpServletResponse response = (HttpServletResponse) context.getMessageContext()
            .get(MessageContext.SERVLET_RESPONSE);

        request.setAttribute("username", track.getUsername());
        request.setAttribute("password", track.getPassword());
        servletContext.getRequestDispatcher("/LoginAction").include(request, response);

        String loginStatus = request.getParameter("loginStatus");
        String Token = request.getParameter("Token");
        String result = ""+track;
        return Response.status(200).entity(result).build();
    }
}

例外是:

java.lang.NullPointerException 在 com.webservices.server.WebServer.createTrackInJSON(WebServer.java:36) ...servletContext 为空

请帮助我确定如何在 Web 服务中获取 servlet 上下文。

【问题讨论】:

    标签: java web-services servlets nullpointerexception jersey


    【解决方案1】:

    使用@Context 注解,并注入正确的类。您也可以直接注入 servlet 请求和响应对象。

    import jax.ws.rs.core.Context;
    
    @Path("/server")
    public class WebServer {
        @Context 
        private ServletContext context; 
    
        @Context
        private HttpServletRequest request;
    
        @Context
        private HttpServletResponse response;
    
        // ...
    }
    

    【讨论】:

    • 感谢回复 HttpServletRequest,HttpServletResponse 如何获取这些对象。
    【解决方案2】:

    改用javax.ws.rs.core.Context

    @Context
    public void setServletContext(ServletContext context) {
      // ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 2011-08-11
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多