一、会话技术
浏览器第一次发送请求至服务器,会话建立,直到任意一方断开为止;一次会话中包含多次请求和响应,可以通过会话技术在多次请求间共享数据。
- 会话技术(客户端):Cookie
- 会话技术(服务端):Session
二、Cookie
(一)概念
Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。
(二)使用方式
1.创建Cookie对象,绑定数据
new Cookie(String name, String value)
2.发送Cookie对象
response.addCookie(Cookie cookie)
3.获取Cookie,拿到数据
Cookie[] request.getCookies()
//获取及遍历Cookie信息
Cookie[] cookies = request.getCookies();
if(cookies!=null){
for(Cookie cookie:cookies){
String name = cookie.getName();
String value = cookie.getValue();
System.out.println(name+":"+value);
}
}
(三)实现原理
基于请求头cookie和响应头set-cookie实现
(四)Cookie的特点
1.可以创建多个Cookie对象,使用response调用多次addCookie(Cookie cookie)方法发送。
2.默认情况下,当浏览器关闭后,Cookie数据即被销毁;可通过setMaxAge(int seconds)指定Cookies的持久化存储时间。
- 正数:将Cookie数据写入硬盘的文件中,并指定存活时间,到期自动失效。
- 负数:默认时间
- 零:删除Cookie数据
3.tomcat8之前,Cookie不能直接存储中文,需要使用URL编码;tomcat8之后,Cookie支持中文,但特殊字符仍不支持,建议使用URL编码。
注意:Cookie Version 0中,某些特殊的字符,例如:空格,方括号,圆括号,等于号,逗号,双引号,斜杠号,问号,@符号,冒号,分号都不能作为Cookie的内容。
4.默认情况下,多个WEB项目中的Cookie不能共享,setPath(String path)可以设置Cookie的获取范围,如果需要共享,则将path设置为"/"。
注意:setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com可以共享cookie
5.Cookie存储于客户端浏览器,单个Cookie的大小有限制(4kb),同个域名下的Cookie的数量有限制(20个),Cookie通常用来存储量少不敏感数据,通常实现服务器对客户端的身份识别。
jsp侧:
Cookie[] cookies = request.getCookies();
if(cookies!=null&&cookies.length>0){
for(Cookie cookie:cookies){
String name = cookie.getName();
if(name.equals("username")){
response.sendRedirect("/home.jsp");
}
}
}
servlet侧:
if(remember!=null){
//设置cookie
Cookie cookie = new Cookie("username",username);
cookie.setMaxAge(60*60*24);
resp.addCookie(cookie);
}
三、Session
(一)概念
Session,在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
(二)使用方式
1.获取HttpSession对象:
HttpSession session = request.getSession();
2.使用HttpSession对象:
Object getAttribute(String name)
void setAttribute(String name, Object value)
void removeAttribute(String name)
(三)实现原理
Session的实现是依赖于Cookie的。
(四)Cookie的特点
1.默认情况下,当客户端关闭后,服务器不关闭,两次获取的session不是同一个,如果需要相同,可以创建key为JSESSIONID,value为session.getId()的Cookie,设置最大存活时间。
2.当服务器关闭,或session调用invalidate()方法时,session被销毁。
3.session默认失效时间为30分钟,可以通过配置文件进行修改。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
4.session可以存储多次请求的数据,存储在服务器侧,存储类型及大小不受限制,相对Cookie安全,通常实现客户端登录的验证码。
四、JSP入门
(一)概念
Java Server Pages:Java服务器页面,是一个特殊的页面,其中既可定义java代码,又可定义html代码,本质上是一个Servlet。
JSP共有9个内置对象,常用对象:request、response、out(字符输出流)
(二)创建语法
- <% 代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。
- <%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置,能定义成员变量和方法,相当于在方法外类中写的东西。
- <%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。