一尘不染

会话属性在首次加载时为null

jsp

我有以下内容servlet

@WebServlet(name = "Placeholder",urlPatterns = {"/foo"})
public class Placeholder extends HttpServlet {
    public static int numbers=5;
    HttpSession session;
    public void doGet (HttpServletRequest _req, HttpServletResponse _res) throws ServletException, IOException {
        /* Refresh session attributes */
        session = _req.getSession();
        session.setAttribute("wee","ok");
        }
}

具有以下内容JSP

<%@page language="java" contentType="text/html"%>
<%@page import="java.util.*, java.io.*"%>
<%@page import="main.java.Placeholder.*" %>
<html>
<body>
<b><% out.println("wee, printing from java");%></b>
<% out.println("<br/>Your IP address is " + request.getRemoteAddr());
String value = (String) session.getAttribute("wee");
out.println(value);%>
</body>
</html>

我肯定在某处缺少该点,因为属性weenull第一次加载页面时解析为。如果转到,/foo我会清空页面,然后返回并重新加载的根页面后servletwee实际上会得到它的值。

我的目标是从servlet视图中简单地打印变量,而不需要路由。不确定urlPatterns这里是否需要这些,但是如果没有这个小技巧,它暂时无法使用。

UPD。
好的,所以我弄清楚了无论我采用哪种路由,都需要在浏览器中添加一些字符,返回并重新加载页面。所以,根是0.0.0.0:8080/webapp

我需要访问说0.0.0.0:8080/webapp/qwerty,回到/webapp并刷新页面。

如何仅通过/ webapp实例化会话?为什么在访问一些不存在的随机路由时没有404或500 /webapp/randomstuff


阅读 207

收藏
2020-06-10

共1个答案

一尘不染

首先在中将servlet配置为欢迎文件web.xml。如果web.xml不存在,则在WEB-INF文件夹中手动创建它,并将其放在内容下面。

<welcome-file-list>
        <welcome-file>foo</welcome-file>
</welcome-file-list>

比在向jsp发出servlet的请求中,可以说您的jsp名称index.jsp比servlet代码看起来像:

@WebServlet(name = "Placeholder",urlPatterns = {"/foo"})
public class Placeholder extends HttpServlet {
    public static int numbers=5;
    public void doGet (HttpServletRequest _req, HttpServletResponse _res) throws ServletException, IOException {
        HttpSession session = _req.getSession();
        session.setAttribute("wee","ok");
        _res.sendRedirect("index.jsp");
        }
}

现在运行您的servlet,您将看到输出。希望这能解决您的问题!!!

2020-06-10