response :响应对象
提供的方法:
void addCookie( Cookie cookie )
服务端向客户端增加cookie对象
void sendRedirect(String location ) throws IOException
:页面跳转的一种方式(重定向)
void setContetType(String type)
:设置服务端响应的编码(设置服务端的contentType类型)
示例:登陆
login.jsp -> check.jsp ->success.jsp
请求转发request | 重定向response | |
---|---|---|
地址栏是否改变 | 不变(check.jsp) | 改变(success.jsp) |
否保留第一次请求时的数据 | 保留(从check到success) | 不保留 |
请求的次数 | 请求的次数 | 客户端发出的第二次跳转 |
转发、重定向:
-
转发:
张三(客户端) -> 服务窗口 A (服务端 ) -> 服务窗口B
-
重定向:
张三(客户端) -> 服务窗口 A (服务端 ) ->去找B
张三(客户端) -> 服务窗口 B (服务端 ) ->结束
session(服务端)
Cookie(客户端,不是内置对象):Cookie是由服务端生成的 ,再发送给客户端保存。
相当于本地缓存的作用:客户端(hello.mp4,zs/abc)->服务端(hello.mp4;zs/abc)
作用:提高访问服务端的效率,但是安全性较差。
Cookie:name=value
javax.servlet.http.Cookie
public Cookie(String name,String value)
String getName()
获取name
String getValue()
获取value
void setMaxAge(int expiry)
最大有效期 (秒)
服务端准备Cookie:
response.addCookie(Cookie cookie)
页面跳转(转发,重定向)
客户端获取cookie: request.getCookies()
a. 服务端增加cookie :response对象;
客户端获取对象:request对象
b. 不能直接获取某一个单独对象,只能一次性将全部的cookie拿到
通过F12可以发现除了自己设置的Cookie对象外,还有一个name为 JSESSIONID的cookie
建议 cookie只保存英文数字,否则需要进行编码、解码
- 使用Cookie实现记住用户名功能
4.session :会话
a.浏览网站:开始-关闭
b.购物: 浏览、付款、退出
c.电子邮件:浏览、写邮件、退出
开始-结束
session机制:
客户端第一次请求服务端时,(jsessionid-sessionid)服务端会产生一个session对象(用于保存该客户的信息);
并且每个session对象都会有一个唯一的sessionId( 用于区分其他session);
服务端由会产生一个cookie,并且 该cookie的name=JSESSIONID ,value=服务端sessionId的值;
然后服务端会在响应客户端的同时将该cookie发送给客户端,至此 客户端就有了 一个cookie(JSESSIONID);
因此,客户端的cookie就可以和服务端的session一一对应(JSESSIONID - sessionID)
客户端第二/n次请求服务端时:服务端会先用客户端cookie种的JSESSIONID 去服务端的session中匹配sessionid,如果匹配成功(cookie jsessionid和sesion sessionid),说明此用户不是第一次访问,无需登录;
例子:
客户端: 顾客(客户端)
服务端: 存包处 - 商场(服务端)
顾客第一次存包:商场 判断此人是 之前已经存过包(通过你手里是否有钥匙)。
如果是新顾客(没钥匙) ,分配一个钥匙 给该顾客; 钥匙 会和 柜子 一一对应;
第二/n次 存包:商场 判断此人是 之前已经存过包(通过你手里是否有钥匙)
如果是老顾客(有钥匙),则不需要分配;该顾客手里的钥匙 会 和柜子 自动一一对应。
session:
- session存储在服务端
- session是在 同一个用户(客户)请求时 共享
- 实现机制:第一次客户请求时 产生一个sessionid 并复制给 cookie的jsessionid 然后发给客户端。最终 通过session的sessionid-cookie的jsessionid
session方法:
String getId()
:获取sessionId
boolean isNew()
:判断是否是 新用户(第一次访问)
void invalidate()
:使session失效 (退出登录、注销)
void setAttribute()
Object getAttribute()
void setMaxInactiveInterval(秒)
:设置最大有效 非活动时间
int getMaxInactiveInterval()
: 获取最大有效 非活动时间
示例:登录
客户端在第一次请求服务端时,如果服务端发现 此请求没有 JSESSIONID,则会创建一个 name=JSESIONID的cookie 并返回给客户端
Cookie:
- 不是内对对象,要使用必须new
- 但是,服务端会 自动生成一个(服务端自动new一个cookie) name=JSESIONID的cookie 并返回给客户端
cookie和session的区别:
session | cookie | |
---|---|---|
保存的位置 | 服务端 | 客户端 |
安全性 | 较安全 | 较不安全 |
保存的内容 | Object | String |
appliation全局对象
String getContextPath()
虚拟路径
String getRealPath(String name)
绝对路径(虚拟路径 相对的绝对路径)