lines-of-code.jpg

[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教學手冊 第二版」

arrow
arrow
    文章標籤
    JSP Servlet HttpSession
    全站熱搜

    allen0818 發表在 痞客邦 留言(0) 人氣()