[Servlet]会话管理的概念、隐藏域、Cookie、URL重写

本文介绍了Servlet的会话管理,包括会话管理的概念、使用隐藏域、Cookie和URL重写的方法。隐藏域用于保存响应结果,但安全性较差;Cookie是浏览器存储服务器信息的方式,常用于自动登录功能;URL重写则是通过超链接参数传递信息,适合少量数据的管理。
摘要由CSDN通过智能技术生成

1. 会话管理的概念:

    1) 背景:HTTP协议中,服务器无记忆,每次请求都是新的请求,是一种无状态通信协议,但是有些需求要求能记得前后请求之间的关系,比如用户在多个网页之间采购商品、网络笔试等;

    2) 会话管理:管理多次请求之间关系的技术,要求保存前后请求响应的一些中间结果;

    3) 目前会话管理的4中常用方法:隐藏域、Cookie、URL重写、使用HttpSession类,这4中方法各有特色,各有各的应用场合,而HttpSession类最完备,功能最完全;


2. 使用隐藏域记录之前请求响应的信息:

    1) 隐藏域是HTML的一种input表单,其属性type为"hidden",其余属性和普通的input相同,有参数名和参数值,例如:<input type="hidden" name="var" value="123">;

    2) 隐藏域回合其它参数一样被提交给服务器,比如上面的那个例子就是?var=123,但和其它参数不同的是隐藏域不会显示在HTML页面中,而其它参数会以各种形式予以显示,比如按钮、列表等等,因此叫做隐藏域;

    3) 使用隐藏域进行会话管理的思想是:

         i. 在Servlet中将上一次请求的响应结果用Response写成隐藏域返回给浏览器;

         ii. 那么上一次响应结果会以隐藏域的形式隐藏在响应页面中;

         iii. 然后用户操作完响应页面再提交,那么上一次的结果就会通过隐藏域的形式上传给服务器,那么这样服务器就能再次获得上一次请求的响应结果了!

    4) 程序示例:一个网页调查问卷,题目分页作答,打完第一页按“下一页”按钮后才会显示第二页的题目

package com.lirx;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HiddenField
 */
@WebServlet("/questionnaire")
public class HiddenField extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public HiddenField() {
		super();
		// TODO Auto-generated constructor stub
	}

	public 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("<html>");
		out.println(" <head>");
		out.println("  <title>Questionnaire</title>");
		out.println(" </head>");
		out.println(" <body>");
		out.println("  <form action='questionnaire' method='post'>");
		String page = request.getParameter("page");
		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='下一页'>");
		}
		else if ("下一页".equals(page)) {
			String p1q1 = request.getParameter("p1q1");
			String p1q2 = request.getParameter("p1q2");
			out.println("<input type='hidden' name='p1q1' value='" + p1q1 + "'>");
			out.println("<input type='hidden' name='p1q2' value='" + p1q2 + "'>");
			out.println("问题三:<input type='text' name='p2q1'><br>");
			out.println("<input type='submit' name='page' value='完成'>");
		}
		else if ("完成".equals(page)) {
			out.println("您的答案是:<br>");
			out.println(request.getParamete
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值