隐藏域实现会话管理概述

  如果你正在制作一个网络问卷,由于问卷内容很长,因此必须分几个页面,上一页面作答完后,必须请求服务器显示下一个页面。
  但是在HTTP协议中,服务器并不会记得上一次请求的状态。既然服务器不会记得两次请求间的关系,那就由服务器将上一页结果以隐藏域的方式响应给浏览器,而浏览器在每次请求时通过隐藏域“主动告知”服务器多次请求间必要的信息。
  这样每一页的问卷答案就可以保留下来。


缺点
1、使用隐藏域的方式,如果使用post提交,在关掉网页后,显然会遗失先前请求的信息,所以仅适合用于一些简单的状态管理,如在线问卷。
2、由于在查看网页源代码时,就可以看到隐藏域的值,因此这个方法不适合用于隐密性较高的数据。


example

package com.test;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;@WebServlet("/questionnaire")
public class Questionnaire extends HttpServlet {protected void processRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.println("<!DOCTYPE html>");out.println("<html>");out.println("<head>");out.println("<meta charset='UTF-8'>");out.println("<title>问卷调查</title>");out.println("</head>");out.println("<body>");String page = request.getParameter("page");out.println("<form action='questionnaire' method='get'>");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.printf("<input type='hidden' name='p1q1' value='%s'>%n", p1q1);out.printf("<input type='hidden' name='p1q2' value='%s'>%n", 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>");out.println(request.getParameter("p2q1") + "<br>");}out.println("</form>");out.println("</body>");out.println("</html>");}@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {processRequest(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {processRequest(request, response);}
} 


响应结果及填写表单过程


第一次响应及表单填写



第二次响应及表单填写


第三次响应

转载于:https://www.cnblogs.com/Mike_Chang/p/10053462.html

hidden field implements session相关推荐

  1. Save info in Hidden Field

    Hidden fields are used to store data at the page level protected System.Web.UI.HtmlControls.HtmlInpu ...

  2. url override and HttpSession implements session

    背景 HttpSession默认使用Cookie存储Session ID,如果在用户禁用浏览器Cookie的功能后,仍打算运用HttpSession来进行会话管理,那么可以搭配URL重写来实现. 实现 ...

  3. php 原生session,$_SESSION

    用户评论: [#1] Tugrul [2015-03-09 17:04:49] Creating New Session ========================== session_star ...

  4. spring-session-data-redis解决session共享的问题

    分布式系统要做到用户友好,需要对用户的session进行存储,存储的方式有以下几种: 本地缓存 数据库 文件 缓存服务器 可以看一些不同方案的优缺点 1.本地机器或者本地缓存.优点:速度快  缺点:服 ...

  5. Spring Cloud——基于Dubbo的分布式Session解决方案

    环境配置 spring boot 2.6.3 spring cloud 2021.0.1 spring cloud alibaba 2021.0.1.0 nacos server 2.0.4 dubb ...

  6. 如何解决AET field创建失败后的一系列dump

    Created by Jerry Wang, last modified on Aug 01, 2014 当按照该link使用AET给service contract创建extension field ...

  7. SIP 中的Dialog,call,session 和 transaction .

    如果你对Sip协议中Call, Dialog, Transaction和Message之间的关系感觉到迷惑,那么,那么我可以告诉你,你并不孤单,因为大多数初学者对于这些名词之间的关系都会感到疑惑. M ...

  8. Laravel源码分析之Session

    由于HTTP最初是一个匿名.无状态的请求/响应协议,服务器处理来自客户端的请求然后向客户端回送一条响应.现代Web应用程序为了给用户提供个性化的服务往往需要在请求中识别出用户或者在用户的多条请求之间共 ...

  9. Laravel核心解读--Session源码解析

    Session 模块源码解析 由于HTTP最初是一个匿名.无状态的请求/响应协议,服务器处理来自客户端的请求然后向客户端回送一条响应.现代Web应用程序为了给用户提供个性化的服务往往需要在请求中识别出 ...

最新文章

  1. java正则学习笔记三
  2. 一次项目组聚餐,让我重新认识了很多人
  3. 选择纯种犬还是杂种犬?
  4. find : 路径必须在表达式之前
  5. AT4505-[AGC029F]Construction of a tree【构造题,hall定理,网络流】
  6. Express--socket.io使用session验证
  7. 一蔚来ES8汽车疑似失控 将地下车库墙撞穿
  8. gromacs 安装_gromacs5.x 在linux安装
  9. 朋友圈那个随便辞职的年轻人,后来活成了什么样?
  10. 强化学习入门项目 Spinning up OpenAI (1) installation
  11. 支持在线大数据SQL查询平台开源项目
  12. 技术人生:真的要注意身体了,坚持锻炼
  13. 目标检测——使用yolov6调用本地摄像头进行实时检测
  14. 【Codecs系列】HEVC中三种Intra帧类型的区别:BLA/IDR/CRA
  15. VSCode安装TinyPNG,并配置api key
  16. SpringBoot项目在IDEA上实现热部署
  17. 如何修复“Windows/System32/Config/System中文件丢失或损坏”故障
  18. 初识Java之类和对象
  19. Adobe Photoshop(ps)
  20. GPS从入门到放弃(十一) --- 差分GPS

热门文章

  1. phphstudy运行不了网站_【SEO优化】企业网站进行SEO优化优那些小技巧
  2. jquery排他思想
  3. python中xpath定位_xpath最新:关于python中的xpath解析定位_爱安网 LoveAn.com
  4. bzoj 1027: [JSOI2007]合金(floyd最小环)
  5. [Python] os.path.splitext(path):分离文件名与扩展名
  6. BIOS和DOS中断例程的安装过程
  7. Asp.Net 学习资源列表 [转]
  8. 使用IDEA创建一个Maven Web工程:无法创建Java Class文件
  9. asp得到地址栏里?以后的字串
  10. Spring Security Ajax 被拦截