会话技术
- 会话:一次会话中包含多次请求和响应。
* 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 - 功能:在一次会话的范围内的多次请求间,共享数据
- 方式:
客户端会话技术,将数据保存到客户端,Cookie是由服务器端生成,状态信息服务器端使用
服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。
Cookie
Cookie是由服务器端生成,发送给User-Agent,浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器. *由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的。*Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用。比如判断用户是否是第一次访问网站。服务器像客户端发送cookie——浏览器将cookie保存——之后每次http请求浏览器都会将cookie发送给服务器端。
-
概念:客户端会话技术,将数据保存到客户端,Cookie是由服务器端生成,状态信息服务器端使用
-
使用步骤:(response是add,request是get)
(1)创建Cookie对象,绑定数据: new Cookie(String name, String value)
(2)发送Cookie对象(给服务端设置响应消息): response.addCookie(Cookie cookie)
(3)获取Cookie,拿到数据: Cookie[] request.getCookies() -
实现原理: 基于响应头set-cookie和请求头cookie实现
-
默认情况下,当浏览器关闭后,Cookie数据被销毁。持久化存储:setMaxAge(int seconds)
-
在tomcat 8 之后,cookie支持中文数据。特殊字符还是不支持,建议使用URL编码存储,URL解码解析
response.setContentType(“text/html;charset=utf-8”);
value = URLDecoder.decode(value,“utf-8”); -
假设在一个tomcat服务器中,部署了多个web项目,那么在这些web项目中cookie默认不能共享。setPath(String path)不同的tomcat服务器间cookie,如果设置一级域名相同,那么多个服务器之间cookie可以共享。setDomain(String path)
-
特点和作用
①cookie存储数据在客户端浏览器。浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)。
②cookie一般用于存出少量的不太敏感的数据。比如: 在不登录的情况下,完成服务器对客户端的身份识别。
//了解
//获取当前时间的字符串,重新设置Cookie的值,重新发送cookie
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str_date = sdf.format(date);
System.out.println("编码前:"+str_date);
//URL编码
str_date = URLEncoder.encode(str_date,"utf-8");
System.out.println("编码后:"+str_date);
JSP
- 概念:Java Server Pages: java服务器端页面。 可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码。用于简化书写!
- 原理:JSP本质上就是一个Servlet
- JSP的脚本:JSP定义Java代码的方式
① <% 代码 %>:定义的java代码,会放在在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。
②<%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置。
③ <%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。 - JSP的内置对象:在jsp页面中不需要获取和创建,可以直接使用的对象。 jsp一共有9个内置对象。
(1~4域对象,用于共享数据,注意范围)
变量名 真实类型 作用
* pageContext PageContext 当前页面共享数据,还可以获取其他八个内置对象
* request HttpServletRequest 一次请求访问的多个资源(转发)
* session HttpSession 一次会话的多个请求间
* application ServletContext 所有用户间共享数据
(服务器开启创建,服务器关闭,销毁)
* response HttpServletResponse 响应对象
* page Object 当前页面(Servlet)的对象 this
* out JspWriter 输出对象,数据输出到页面上
* config ServletConfig Servlet的配置对象
* exception Throwable 异常对象(isErrorPage为true)
- response.getWriter()和out.write()的区别:在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。故。 response.getWriter()数据输出永远在out.write()之前,用out,可以避免打乱输出顺序。
- 指令——作用:用于配置JSP页面,导入资源文件
①格式:<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 … %>
②分类:
a. page: 配置JSP页面的
contentType:等同于response.setContentType()
设置响应体的mime类型以及字符集
设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
b. import:导包
errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
isErrorPage:标识当前也是是否是错误页面。
true:是,可以使用内置对象exception
false:否。默认值。不可以使用内置对象exception
c. include : 页面包含的。导入页面的资源文件: <%@include file=“top.jsp”%>
d. taglib : 导入资源 <%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>prefix:前缀,自定义的
③ jsp注释:<%-- --%>:可以注释所有
Session
- 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。
- 步骤:
①获取HttpSession对象:
HttpSession session = request.getSession();
②使用HttpSession对象:
Object getAttribute(String name)
void setAttribute(String name, Object value)
void removeAttribute(String name) - 原理: Session的实现是依赖于Cookie的。
4.①客户端关闭后,服务器不关闭,相应的cookie也消失,故下次获取session不同;要session也能相同,手动建立cookie并设置时间,时