基于SSM框架的Java Web程序设计之Cookie与Session

系列文章目录

第一章:基于SSM框架的Java Web程序设计之环境搭建https://blog.csdn.net/qq_57930222/article/details/130389128?spm=1001.2014.3001.5501

第二章:基于SSM框架的Java Web程序设计之Hello World项目实践https://blog.csdn.net/qq_57930222/article/details/130398327?spm=1001.2014.3001.5501

第三章:基于SSM框架的Java Web程序设计初步了解JSPhttps://blog.csdn.net/qq_57930222/article/details/130425917?spm=1001.2014.3001.5501

第四章:基于SSM框架的Java Web程序设计之初识Servlethttps://blog.csdn.net/qq_57930222/article/details/130521505?spm=1001.2014.3001.5501

第五章:基于SSM框架的JavaWeb程序设计之Cookie与Sessionhttps://blog.csdn.net/qq_57930222/article/details/130553002?spm=1001.2014.3001.5501

第六章:基于SSM框架的JavaWeb程序设计之认识ArrayList与HashMaphttps://blog.csdn.net/qq_57930222/article/details/130571787?spm=1001.2014.3001.5501

第七章:基于SSM框架的JavaWeb程序设计之无JDBC版学生管理系统(一)https://blog.csdn.net/qq_57930222/article/details/130595527?spm=1001.2014.3001.5501

第八章:基于SSM框架的JavaWeb程序设计之无JDBC版学生管理系统(二)https://blog.csdn.net/qq_57930222/article/details/130641541?spm=1001.2014.3001.5501

第九章:基于SSM框架的JavaWeb程序设计之将无JDBC版学生管理系统升级为Mybatis版本 icon-default.png?t=N4HBhttps://blog.csdn.net/qq_57930222/article/details/130753473?spm=1001.2014.3001.5501


目录

系列文章目录

前言

一、Cookie

1、浏览器上查看Cookie

 2、cookie概念

3、Cookie案例

​编辑 二、Session

1.Session概念

2.Session方法解读

3.Session案例

 总结


前言

        当用户通过浏览器访问Web应用时,通常情况下,服务器需要对用户的状态进行跟踪。例如,当用户在网站结算商品时,Web服务器必须根据请求用户的身份,找到该用户所购买的商品。在Web开发中,服务器跟踪用户信息的技术称为会话技术。

        在日常生活中,从拨通电话到挂断电话之间的一连串的你问我答的过程就是一个会话。在打电话过程中,通话双方会有通话内容,同样在客户端与服务器的交互过程中,也会产生一些数据。

        例如,用户甲和乙分别登录了购物网站,甲购买了一个手机,乙购买了一个平板,当这两个用户结账时,Web服务器需要对甲和乙的信息分别进行保存。

        为了保存会话过程中产生的数据,Servlet提供了两个用于保存会话数据的对象,分别是Cookie和Session。


一、Cookie

1、浏览器上查看Cookie

 2、cookie概念

        在现实生活中,当顾客在商城购物时,商城往往会赠送顾客一张会员卡,卡上记录有客户的个人信息。消费额度和积分额度等。客户一旦接受了该会员开,以后在光临该商场时都可以使用这张会员卡,商场也根据会员卡上的消费记录计算会员的优惠额度和累加积分。

        在Web应用中,Cookie的功能类似于会员卡,当用户通过浏览器访问Web服务器时,服务器会给客户端发送一些信息,如用户信息和商品信息,这些信息都保存在Cookie中。这样当浏览器再次访问服务器时会在请求头中将Cookie发送给服务器,方便服务器对浏览器做出正确响应。

3、Cookie案例

(1)新建一个Servlet对象,包名csnd.ah.cookie和一个jsp页面cookie.jsp

 (2)编写代码

<!--cookie.jsp-->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	String welcome = "首次访问";
	String info = "";
	Cookie[] cookie = request.getCookies();
	if(cookie != null){
		for(int i=0;i<cookie.length;i++){
			//与Servlet那边的用Cookie类定义的mycook的第一个值相同,这个Cookie是一个Map类,mrCookInfo是他的
			//属性名,name的值是他的属性值
			if(cookie[i].getName().equals("mrCookInfo")){
				info = cookie[i].getValue();
				welcome = ",欢迎回来!";
			}
		}
	}
%>

<%=info+welcome %>
<form action="cookie" method="post">
	姓名:<input name="name" type="text" value="<%=info%>"><br>
	<input type="submit" value="提交">
</form>
</body>
</html>
//cookie.java
package ah.cookie;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class cookie
 */
@WebServlet("/cookie")
public class cookie extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public cookie() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		//Servlet的POST请求方式
		String name = request.getParameter("name");
		//Cookie是一个Map类型,相当于Python的字典内类,mrCookInfo是其属性名,name的值是mrCookInfo的属性值
		Cookie mycook = new Cookie("mrCookInfo",name);
		//将ServletPOST请求到的数据添加到mycook中,成为他的一个元素
		response.addCookie(mycook);
		response.getWriter().print("cookie存储name:" + name);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

(3)运行并测试

 二、Session

1.Session概念

        当人们去医院就诊时,病人需要办理医院的就诊卡,就诊卡上只有卡号没有其他信息。但病人每次去医院就诊时,只要初始就诊卡,医生便可根据卡号查询到病人的就诊信息。Session技术类似于医院办理就诊卡和医院为每个病人保留兵力档案的过程。

        当浏览器访问Web服务器时,Servlet就会创建一个Session对象和ID属性值。Session对象就像病历档案,ID就像就诊卡号。当客户端后续访问服务器时,只要将ID传递给服务器,服务器就能判断出该请求是哪个客户端发送的,从而选择与之对应的Session对象为其服务。

        Web服务器为了方便的区分不同的用户,每一个用户都有一个对应得session(会话)对象,当用户通过浏览器向Web服务器发送访问请求时,服务器会自动对该session状态进行维护,不同客户端的访问客户拥有各自的session对象,不同的session之间彼此隔离,不允许直接访问。

2.Session方法解读

(1)Session对象的getSession()方法

        Session是与每个请求消息相关的,为此,HttServletRequest定义了用于获取Session对象的getSession()方法,该方法有两种重载方式。

public HttpSession getSession(boolean create)

        根据传递的参数判断是否创建新的HttpSession对象,如果参数为true,则在相关的HttpSession对象不存在时创建并返回新的HttpSession对象,否则不创建新的HttpSession对象,返回null。

public HttpSession getSession() 

        该方法相当于上一个方法为true时的情况,在相关的HttpSession对象不存在时总是创建新的HttpSession对象。需要注意的是,由于getSession()方法可能会产生发送会话标识号的Cookie头字段,所以必须在发送任何内容之前调用getSession()方法。

方法声明功能描述
String getId()用于返回与当前HttpSession对象关联的会话标识号
void setAttribute(String name,Object value)用于将一个对象与一个名称关联后存储到HttpSession对象中
String getAttribute()用于从当前HttpSession对象中返回指定名称的属性对象
void removeAttribute(String name)用于从当前HttpSession对象中删除指定名称的属性
void setMaxInactiveInterval(int interval)用于设置当前HttpSession对象可空闲的以秒为单位的最长时间,也就是修改当前会话的默认超时间隔

(2)Session生效

        Session在用户第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session。此外还可以调用,request.getSession(true)强制生成Session。只访问HTML、IMAGE等静态资源并不会创建Session。

3.Session案例

(1)创建两个Servlet对象“session.java”、“getSession.java”,包名csdn.ah.session,创建一个msg.jsp文件

(2)编写代码

 (3)运行测试

测试session.java文件

 测试getSession.java文件


 总结

        本章内容主要为大家介绍了Cookie机制和Session机制,让大家了解了会话数据在会话过程中如何存储、作用,以及他们两者的区别。下期内容将会为大家介绍我们后续会用到的两种Java类型ArrayList和HashMap。关注我,获取最新内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值