java - ServletContext 变量不保留值

标签 java servlets

我有 .NET 背景,正在尝试一些 Java(Servlet/JSP)基础知识。在.NET中,我们有ViewState、Session、Application变量。据我所知,Application 变量在 Java 中有一个兄弟,称为 ServletContext。所以我创建了一个简单的servlet程序

public class SimpleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.setContentType("text/html");
    PrintWriter out = response.getWriter();

    String userName = request.getParameter("userName");

    ServletContext context = request.getServletContext();
    context.setAttribute("savedContextUserName", userName);

    out.println("Hello! " + context.getAttribute("savedContextUserName"));
}

我打开浏览器并传递以下内容并获得正确的输出,即 Hello !斯图尔特

 http://localhost:8080/ServletProject/SimpleServlet?userName=Stuart

然后我打开另一个浏览器实例并传递以下内容,但得到 Hello !空

 http://localhost:8080/ServletProject/SimpleServlet

当我打开新的浏览器实例时,上下文不应该保留值 Stuart 吗? .NET 的 Application 变量肯定会保留它。我在这里缺少什么吗?

最佳答案

它保留了它的值,但是当您调用http://localhost:8080/ServletProject/SimpleServlet时,它会将ServletContext属性覆盖为null

String userName = request.getParameter("userName");
//now userName is null
ServletContext context = request.getServletContext();
context.setAttribute("savedContextUserName", userName); //null is now set into the context

所以你应该设置一个条件以避免将 null 设置为上下文

String userName = request.getParameter("userName");
if(userName != nul && !userName.isEmpty()) {
    ServletContext context = request.getServletContext();
    context.setAttribute("savedContextUserName", userName);
}

或者只是在设置值之前打印它,这取决于您的用例。

关于java - ServletContext 变量不保留值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19667247/

相关文章:

java - 对象数组只包含最后一个

java - 浏览器关闭时 Servlet 长处理取消

java - Jackson 使用解包根解析 json,但无法设置 @JsonRootName

java - 是否有可能在不知道 Java 中给定用户输入大小的情况下实现插入排序算法?

javascript - 如何处理退出后点击 "Back"按钮的用户

javax.servlet.ServletException : java. lang.NoClassDefFoundError:org/jdom2/input/SAXBuilder

java - 访问经过身份验证的 servlet

java - 如何减少 web-app 中用于 perm gen 的内存

java - 线程中出现异常 "AWT-EventQueue-0"java.lang.NullPointerException JInternalFrame 关闭方法

java - 从另一个类文件运行 Java .class 文件(更具体)