在 [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教學手冊 第二版」
文章標籤
全站熱搜
