簡體   English   中英

會話屬性在首次加載時為null

[英]Session attribute is null at first load

我有以下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我得到空的頁面,之后我回來並重新加載的根頁servletwee實際上得到它的價值。

我的目標是將servlet變量簡單地打印到視圖中,而不需要路由。 不知道這里是否需要urlPatterns ,但是如果沒有這個小技巧,它目前無法使用。

UPD。 好的,所以我弄清楚了無論我采用哪種路由,都需要在瀏覽器中添加一些字符,返回並重新加載頁面。 因此,根目錄為0.0.0.0:8080/webapp

我需要訪問,例如0.0.0.0:8080/webapp/qwerty ,回到/webapp並刷新頁面。

如何僅通過/ webapp實例化會話? 為什么我在訪問一些不存在的隨機路由/webapp/randomstuff沒有404或500?

首先在web.xml中將servlet配置為歡迎文件。 如果不存在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,您將看到輸出。 希望這能解決您的問題!!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM