我最近了解到,对于不同的用户或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中获取参数。我的代码出了什么问题?
答案 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){
}