Servlet:从不同的浏览器访问时显示为null的Context对象

时间:2017-11-01 08:53:21

标签: jsp servlets java-ee

我最近了解到,对于不同的用户或servlet,上下文对象不会发生变化。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    response.setContentType("text/html");
    PrintWriter out=response.getWriter();
    HttpSession session=request.getSession();
    String username=request.getParameter("username");
    ServletContext context=request.getServletContext();
    try{
        if(username!=null && !username.isEmpty())
            session.setAttribute("savedUserName", username);
            context.setAttribute("name", username);
    }
    catch(NullPointerException e){

    }
    out.println("Request parameter has username: "+username);
    out.println("Session parameter has username: "+(String)session.getAttribute("savedUserName"));
    out.println("Context parameter has username: "+(String)context.getAttribute("name"));

}

当我使用setAttribute设置上下文对象并运行我的servlet时,它会打印正确的值。但是如果我尝试使用不同的浏览器运行servlet,它会显示null。根据我的知识上下文对象值应该适用于所有servlet。在上面的程序中,我从URL中获取参数。我的代码出了什么问题?

1 个答案:

答案 0 :(得分:2)

正如我在您的代码中所理解的那样,请使用{}括号,如果condition.it将允许在unsername为非null时设置name属性'

在您的代码中,context.setAttribute("name", username);代码超出if条件,当您从其他网络浏览器访问servelt时,将其设置为空值。

     try{
            if(username!=null && !username.isEmpty()){  
                session.setAttribute("savedUserName", username);
                context.setAttribute("name", username);
            }
        }
        catch(NullPointerException e){

        }