第一次加载时,会话属性为空

时间:2015-06-11 12:19:27

标签: java jsp servlets

我有以下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>

在第一次加载页面时,由于属性wee被解析为null,我确实错过了某处。如果我转到/foo,我会清空一个页面,在我返回并重新加载servlet的根页后,wee实际上获得了它的值。

我的目标是简单地将servlet中的变量打印到视图中,无需路由。不确定这里是否需要urlPatterns,但如果没有这个小黑客,它现在不起作用。

UPD。好的,所以我发现无论我输入什么路线,我都需要在浏览器中添加一些字符,然后重新加载页面。 所以,根是0.0.0.0:8080/webapp

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

如何通过访问/ webapp来实例化会话? 为什么我没有404或500访问一些随机的未来路由/webapp/randomstuff

1 个答案:

答案 0 :(得分:1)

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

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

比你的servlet调度请求你的jsp让我们说你的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,你会看到输出。 希望这能解决你的问题!