gpt4 book ai didi

java - ServletContext 变量不保留值

转载 作者:行者123 更新时间:2023-12-01 18:41:52 24 4
gpt4 key购买 nike

我有 .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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com