首页 > 解决方案 > Java Servlet 和 JSP 最初无法从会话中查看数组列表

问题描述

我是 JSP 和 servlet 的初学者,如果您能帮助我解决这个小问题,我将不胜感激。我有一个 index.html 文件,其中包含两个 JSP 文件的链接:addItem.jsp(用户可以将项目输入到他们的 todDo 列表中,并将按钮链接提交到 servlet)和 toDoList.jsp(显示 toDO 列表并通过按钮重定向添加项目.jsp)

我遇到的问题是,当我在将项目添加到列表之前查看 toDoList.jsp 时,列表不会出现。但是,我在 addItem.jsp 上添加了一个项目,该列表显示在 servlet 中,现在我可以查看完整列表,包括添加到 toDoList.jsp 上的项目。

我怎样才能更改我的代码,这样我就不必在列表中添加一些东西来查看它?

toDoList.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="javax.servlet.http.HttpSession" %>
<%@page import="java.util.ArrayList" %>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
</head>
<body>
    <h1>My ToDo List:</h1>

    <% ArrayList<String> toDoList = new ArrayList<String>();%>

    <% if(session.getAttribute("toDoList") != null) {  // If the list exists in the session %>  
    <%   toDoList = (ArrayList<String>) session.getAttribute("toDoList");%> 
    <%   for(String toDoItem:toDoList) { %>
    <%      out.println(toDoItem); %><br>
    <%   } %>
    <% } else {%>

    <h3>Your list is empty!</h3>
    <% } %>
    <form action="addItem.jsp" method="post">
        <fieldset>
            <input type="submit" value="Add Item">
        </fieldset>
    </form>
</body>

addItem.jsp:

<!DOCTYPE html>
<html>
<head>
    <title>TODO supply a title</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    <form action="Servlet1" method="post">
        <fieldset>
            <label>New ToDo Item:</label>
            <input type="text" name="item"><br>
            <input type="submit" value="Submit">
        </fieldset>
    </form>         
</body>

主要的 Servlet1 代码:

@WebServlet(urlPatterns = {"/Servlet1"})
public class Servlet1 extends HttpServlet {

ArrayList<String> toDoList = new ArrayList<String>();

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");

    String item = request.getParameter("item");
    toDoList.add(item);

    HttpSession session = request.getSession();

    boolean is_toDoList_Initilized = false;

    if(session.getAttribute("toDoList") == null) {  
        is_toDoList_Initilized = false;  
        session.setAttribute("toDoList", toDoList);
    } else is_toDoList_Initilized = true;


    try (PrintWriter out = response.getWriter()) {
        /* TODO output your page here. You may use following sample code. */
        out.println("<!DOCTYPE html>");
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet Servlet1</title>");            
        out.println("</head>");
        out.println("<body>");
        for(String toDoItem:toDoList) { 
            out.println(toDoItem + "<br>");  
        }  
        out.println(is_toDoList_Initilized);
        out.println("</body>");
        out.println("</html>");
    }
}

标签: htmljspservlets

解决方案


我认为您只需要在从索引页面重定向 toDoList.jsp 之前调用该 servlet。

流程会像

流程 1:index.jsp > servlet1 > toDoList

流程 2:index.jsp > addItem.jsp > servlet1 > toDoList


推荐阅读