Cookie&Session&Jsp详细介绍(session,四大域和九大隐式对象)

一、会话介绍:

-会话:浏览器和服务器之间的多次请求和响应
	--为了实现一些功能,浏览器和服务器之间可能会产生多次的请求和响应
	--从浏览器访问服务器开始,到访问服务器结束(关闭浏览器、到了过期时间)
	--这期间产生的多次请求和响应加在一起就称之为浏览器和服务器之间的一次会话

-这里的会话,指的是web开发中的一次通话过程,当打开浏览器,访问网站地址后,会话开始,当关闭浏览器(或者到了过期时间),会话结束

**-会话过程中所产生的一些数据,可以通过会话技术( Cookie 和 Session )保存**

二、Cookie介绍:

-Cookie:客户端会话管理技术
	--把要共享的数据保存到客户端。
	--每次请求时,把回话信息带到服务器端,从而实现多次请求的数据共享
	--作用:可以保存客户端访问网站的相关内容,从而保证每次访问时先从本地缓存中获取,以此提高效率

1.Cookie的常见属性:

	属性名		作用		 				是否重要
	
	name		Cookie的名称				必须属性
	value		Cookie的值(不支持中文)		必须属性
	path		Cookie的路径				重要
	domain		Cookie的域名 				重要
	maxAge		Cookie的存活时间				重要
	version		Cookie的版本号				不重要
	comment		Cookie的描述				不重要

2.Cookie的方法:

	方法名								作用
	
	Cookie(String name,String value)	构造方法创建对象
	属性对应的set和get方法				赋值和获取值

3.Cookie添加和获取:

-添加:HttpServletResponse
	返回值		方法名						说明	
	void		addCookie(Cookie cookie)	向客户端添加Cookie

-获取:HttpServletRequest
	返回值			方法名					说明	
	Cookie[]		getCookies()			获取所有的Cookie

4.Cookie 的细节

-数量限制
	--每个网站最多只能有 20 个 Cookie,且大小不能超过 4KB。所有网站的 Cookie 总数不能超过 300 个。

-名称限制
	--Cookie 的名称只能包含 ASCCI 码表中的字母、数字字符。不能包含逗号、分号、空格,不能以 $ 开头。
	--Cookie 的值不支持中文。

-存活时间限制 setMaxAge() 方法接收数字
	--负整数:当前会话有效,浏览器关闭则清除。
	--0:立即清除。
	--正整数:以秒为单位设置存活时间。

-访问路径限制
	--默认路径:取自第一次访问的资源路径前缀。只要以这个路径开头就能访问到。
	--设置路径:setPath() 方法设置指定路径。
	--总结:Cookie的路径限制,取自第一次访问的资源路径前缀,只要以这个前缀为开头(包括子级路径)就可以获取到,反之获取不到

三、HttpSession 介绍

-HttpSession:服务器端会话管理技术
		--本质也是采用客户端会话管理技术。
		--只不过在客户端保存的是一个特殊标识,而共享的数据保存到了服务器端的内存对象中。
		--每次请求时,会将特殊标识带到服务器端,根据这个标识来找到对应的内存空间,从而实现数据共享!
		--是 Servlet 规范中四大域对象之一的会话域对象。
		
	-补充:
		--HttpSession,它虽然是服务端会话管理技术的对象,但它本质仍是一个Cookie
		--是一个由服务器自动创建的特殊的Cookie,Cookie的名称就是JSESSIONID,Cookie的值是服务器分配的一个唯一的标识
		--当我们使用HttpSession时,浏览器在没有禁用Cookie的情况下,都会把这个Cookie带到服务器端,然后根据唯一标识去查找对应的HttpSession对象,找到了,我们就可以直接使用了

1.HttpSession 获取

-HttpSession 实现类对象是通过 HttpServletRequest 对象来获取。
	返回值			方法名						说明
	
	HttpSession		getSession()				获取HttpSession对象
	HttpSession		getSession(boolean create)	获取HttpSession对象,未获取到是否自动创建

2.HttpSession 常用方法

	返回值	方法名									说明
	
	void	setAttribute(String name,Object value)	设置共享数据
	Object	getAttribute(String name)				获取共享数据
	void	removeAttribute(String name)			移除共享数据
	String	getId()									获取唯一标识名称
	void	Invalidate()							让session立即失效

3.HttpSession 的细节

-浏览器禁用 Cookie之后如何使用session?(用户可以设置浏览器来禁止Cookie的使用)
	--方式一:通过提示信息告知用户,大部分网站采用的解决方式。(推荐)
	--方式二:访问时拼接 jsessionid 标识,通过 encodeURL() 方法重写地址。(了解)

-HttpSession的钝化和活化
	--什么是钝化和活化
		---钝化:序列化。把长时间不用,但还不到过期时间的 HttpSession 进行序列化,写到磁盘上。
		---活化:相反的状态。
	--何时钝化
		---第一种情况:当访问量很大时,服务器会根据 getLastAccessTime 来进行排序,对长时间不用,但是还没到过期时间的 HttpSession 进行序列化。
		---第二种情况:当服务器进行重启的时候,为了保持客户 HttpSession 中的数据,也要对其进行序列化。
	--注意
		--HttpSession 的序列化由服务器自动完成,我们无需关心。

四、JSP基础

1.JSP 介绍:JSP 本质就是一个 Servlet

-JSP(Java Server Pages):是一种动态网页技术标准。
	-JSP 部署在服务器上,可以处理客户端发送的请求,并根据请求内容动态的生成 HTML、XML 或其他格式文档的 Web 网页,然后再响应给客户端。
	-JSP 是基于 Java 语言的,它的本质就是 Servlet
	
-相关资源总结
	类别		使用场景
	HTML		开发静态资源,无法添加动态资源
	CSS			美化页面
	JavaScript	给网页添加一些动态效果
	Servlet		编写Java代码,实现后台功能处理
	JSP			包含了显示页面技术,也具备Java代码功能

2.JSP 语法

-JSP 注释		
		<%-- 注释的内容 --%>
-Java 代码块	
		<% Java代码 %>
-JSP 表达式		
		<%=表达式%>
-JSP 声明		
		<%! 声明变量或方法 %>

3.JSP 指令

-page 指令		
		语法格式:<%@ page 属性名=属性值 属性名=属性值 … %>
	属性名				作用
	
	contentType			响应正文支持的类型和设置编码格式
	language			使用的语言,默认是java
	errorPage			当前页面出现异常后跳转的页面
	isErrorPage			是否抓住异常,如果为true则页面中就可以使用异常对象,默认是false
	import				导包 import=“java.util.ArrayList”
	session				是否创建HttpSession对象,默认是true
	buffer				设定JspWriter输出jsp内容缓存的大小,默认8kb
	pageEncoding		翻译jsp时所用的编码格式
	isElgnored			是否忽略EL表达式,默认是false
-include 指令:可以包含其他页面	
		语法格式:<%@ include file=包含的页面 %>	属性:file,以/开头,就代表当前应用
-taglib 指令:可以引入外部标签库	
		语法格式:<%@ taglib uri=标签库的地址 prefix=前缀名称 %>		属性:uri:外部标签的URI地址    prefix:使用标签时的前缀

4.JSP 细节

-PageContext 对象
	--是 JSP 独有的,Servlet 中没有。
	--是四大域对象之一的页面域对象,还可以操作其他三个域对象中的属性。
	--还可以获取其他八个隐式对象。
	--生命周期是随着 JSP 的创建而存在,随着 JSP 的结束而消失。每个 JSP 页面都有一个 PageContext对象。
-四大域对象

域对象名称			范围		级别						备注

PageContext			页面范围		最小,只能在当前页面用		因范围太小,开发中用的很少
ServletRequest		请求范围		一次请求或当前请求转发用		请求转发之后,再次转发时请求域丢失
HttpSession			会话范围		多次请求数据共享时使用		多次请求共享数据,但不同的客户端不能共享
ServletContext		应用范围		最大,整个应用都可以使用		尽量少用,如果对数据有修改需要做同步处理	
-九大隐式对象
	--它指的是在jsp中,**可以不声明就直接使用的对象**
	--它只存在于jsp中,因为java类中的变量必须要先声明再使用
	--其实jsp中的隐式对象也并非是未声明,只是它是在翻译成.java文件时声明的
	--所以我们在jsp中可以直接使用


隐式对象名称		代表实际对象

request			javax.servlet.http.HttpServletRequest
response		javax.servlet.http.HttpServletResponse
session			javax.servlet.http.HttpSession
application		javax.servlet.ServletContext
page			java.lang.Object
config			javax.servlet.ServletConfig
exception		java.lang.Throwable
out				javax.servlet.jsp.JspWriter
pageContext		javax.servlet.jsp.PageContext

你可能感兴趣的:(Servlet,java,session,cookie,jsp)