Java ServletContext变量不';保留价值
我来自.NET背景,正在尝试一些Java基础知识(servlet/JSP)。在.NET中,我们有ViewState、Session和Application变量。据我所知,应用程序变量在Java中有一个兄弟,叫做ServletContext。所以我创建了一个简单的servlet程序Java ServletContext变量不';保留价值,java,servlets,Java,Servlets,我来自.NET背景,正在尝试一些Java基础知识(servlet/JSP)。在.NET中,我们有ViewState、Session和Application变量。据我所知,应用程序变量在Java中有一个兄弟,叫做ServletContext。所以我创建了一个简单的servlet程序 public class SimpleServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected
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的应用程序变量肯定会保留它。这里有什么我遗漏的吗?如果您有下面这样的代码(请注意
setAttribute(…)
之前的print语句):
对于您当前的代码,上下文变量首先被
null
覆盖(当您在新浏览器中进行第二次调用时),然后您正在打印。如果您有下面这样的代码(请注意setAttribute(…)
之前的打印语句):
对于您当前的代码,上下文变量首先被
null
覆盖(当您在新浏览器中进行第二次调用时),然后打印。它保留它的值,但当您调用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);
}
或者只是在设置值之前打印它,这取决于您的用例。它保留它的值,但当您调用
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);
}
或者在设置值之前打印出来,这取决于您的使用情况。哦,谢谢@Petr。我明白了:)哦,谢谢你@Petr。我明白了:)
context
声明在正在使用的行的正下方。context
声明在正在使用的行的正下方。