在 [JSP/Servlet][讀書筆記] 會話管理-隱藏欄位(Hidden Field) 這篇文章中
我們透過簡單的問卷系統功能來介紹如何用隱藏欄位(Hidden Field)來達成會話管理的需求
在這篇文章中我們一樣用這個例子來介紹如何使用HttpSession來做會話管理,
修改過的程式碼如下:
@WebServlet(name = "QuestionnaireServlet", urlPatterns = {"/questionnaire"}) public class QuestionnaireServlet extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); try (PrintWriter out = response.getWriter()) { out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<title>Questionnaire</title>"); out.println("</head>"); out.println("<body>"); String page = request.getParameter("page"); out.println("<form action='questionnaire' method='post'>"); if(page == null) { out.println("問題一: <input type='text' name='p1q1'><br>"); out.println("問題二: <input type='text' name='p1q2'><br>"); out.println("<input type='submit' name='page' value='page2'>"); } else if("page2".equals(page)) { String p1q1 = request.getParameter("p1q1"); String p1q2 = request.getParameter("p1q2"); out.println("問題三:<input type='text' name='p2q1'><br>"); //out.println("<input type='hidden' name='p1q1' value='" + p1q1 + "'>"); //out.println("<input type='hidden' name='p1q2' value='" + p1q2 + "'>"); HttpSession session = request.getSession(); session.setAttribute("p1q1", p1q1); session.setAttribute("p1q2", p1q2); out.println("<input type='submit' name='page' value='finish'>"); } else if("finish".equals(page)) { //out.println(request.getParameter("p1q1") + "<br>"); //out.println(request.getParameter("p1q2") + "<br>"); HttpSession session = request.getSession(); out.println(session.getAttribute("p1q1") + "<br>"); out.println(session.getAttribute("p1q2") + "<br>"); out.println(request.getParameter("p2q1") + "<br>"); } out.println("</form>"); out.println("</body>"); out.println("</html>"); } }
可以看到註解的部份是原先用隱藏欄位來實作的內容,這邊主要的差別在於:
原先我們將值暫存在隱藏欄位,現在我們透過session.setAttribute的方式來將值存到某個屬性中
並可以在其他表單中透過session.getAttribute的方式來取得已經儲存的各屬性值
以HttpSession來說,預設在關閉瀏覽器之前,各頁面可以存取相同的HttpSession實例
因此相當適合用來做為會話管理的用途~!
參考資料:
1. 「Servlet&JSP教學手冊 第二版」
文章標籤
全站熱搜