响应 转发、重定向、cookie、session

本文详细介绍了HTTP响应、重定向的概念,以及Cookie和Session的工作原理和应用场景。重点讲解了Cookie的设置与获取,以及Session的会话机制,包括其在服务端的存储、标识符匹配以及生命周期管理。同时,提到了Cookie的安全性和Session的适用场景,强调了选择合适范围的对象存储数据以优化性能的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

响应

1.response :响应对象
提供的方法:
void addCookie( Cookie cookie ); 服务端向客户端增加cookie对象
void sendRedirect(String location ) throws IOException; :页面跳转的一种方式(重定向)

response.sendRedirect("success.jsp");

void setContetType(String type):设置服务端响应的编码(设置服务端的contentType类型)

2.转发、重定向
示例:登陆 login.jsp -> check.jsp ->success.jsp

image.png
image.png

重定向png
请求转发.png

请求转发:
张三找服务窗口A办理业务,服务窗口A办不了,A悄悄的把张三的业务转给B窗口。此过程张三不必需要知道中间的流程,只需要找A就可以了,所以地址栏不变,只向A请求一次即可
张三(客户端) -> 【 服务窗口 A (服务端 ) -> 服务窗口B 】

重定向:
张三找服务窗口A办理业务,服务窗口A办不了,让张三去找窗口B。最后张三在B办理,所以地址栏变了,请求2次
张三(客户端) -> 服务窗口 A (服务端 ) ->去找B
张三(客户端) -> 服务窗口 B (服务端 ) ->结束

session(服务端)

1.Cookie(客户端,不是内置对象):Cookie是由 服务端生成的 ,再发送给客户端保存。
相当于 本地缓存的作用 客户端(hello.mp4;zs/abc)->服务端(hello.mp4;zs/abc)
第一次看完电影服务端把电影放在cookie里,下次看的时候直接可以本地看从而提升效率

作用:提高访问服务端的效率,但是安全性较差(如缓存了密码容易被其他人登录)。

Cookie: name=value
javax.servlet.http.Cookie
public Cookie(String name,String value)
String getName():获取name
String getValue():获取value
void setMaxAge(int expiry);最大有效期 (秒)
//比如超过30秒失效等

服务端准备Cookie:
response.addCookie(Cookie cookie)
页面跳转(转发,重定向)
客户端获取cookie: request.getCookies();

a.服务端增加cookie :response对象;客户端获取对象:request对象
b.不能直接获取某一个单独对象,只能一次性将 全部的cookie拿到

通过F12可以发现 除了自己设置的Cookie对象外,还有一个name为 JSESSIONID的cookie

建议 cookie只保存 英文数字,否则需要进行编码、解码

2.使用Cookie实现 记住用户名 功能

3.session :会话
a.浏览网站:开始-关闭
b.购物: 浏览、付款、退出
c.电子邮件:浏览、写邮件、退出
开始-结束

(1)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),说明此用户 不是第一次访问,无需登录;

(2)例子:
客户端: 顾客(客户端)
服务端: 存包处 - 商场(服务端)

顾客第一次存包:商场 判断此人是 之前已经存过包(通过你手里是否有钥匙)
如果是新顾客(没钥匙),分配一个钥匙 给该顾客; 钥匙 会和 柜子 一一对应;

第二/n次 存包:商场 判断此人是之前已经存过包(通过你手里是否有钥匙)
如果是老顾客(有钥匙),则不需要分配;该顾客手里的钥匙会和柜子自动一一对应。

session:

(1)a. session存储在服务端
b. session是在 同一个用户(客户)请求时 共享
c. 实现机制:第一次客户请求时 产生一个sessionid 并复制给 cookie的jsessionid 然后发给客户端。最终 通过session的sessionid-cookie的jsessionid

(2)session方法:
String getId() :获取sessionId
boolean isNew() :判断是否是 新用户(第一次访问)
void invalidate():使session失效 (退出登录、注销)
void setAttribute()
Object getAttribute();
void setMaxInactiveInterval(秒) :设置最大有效 非活动时间
int getMaxInactiveInterval():获取最大有效 非活动时间

(3)示例:
登录
客户端在第一次请求服务端时,如果服务端发现 此请求没有 JSESSIONID,则会创建一个 name=JSESIONID的cookie 并返回给客户端

Cookie:

(1)注意:
a.不是内对对象,要使用必须new
b.但是,服务端会 自动生成一个(服务端自动new一个cookie) name=JSESIONID的cookie 并返回给客户端
cookie和session的区别:

在这里插入图片描述

appliation 全局对象

String getContextPath() 虚拟路径
String getRealPath(String name): 绝对路径(虚拟路径 相对的绝对路径)

JSP9大内置对象

pageContext JSP页面容器
request 请求对象
session 会话对象
appliation 全局对象
response 响应对象

config 配置对象(服务器配置信息)
out 输出对象
page 当前JSP页面对象(相当于java中的this)
exception 异常对象

四种范围对象(小->大)

pageContext JSP页面容器 (page对象); 当前页面有效
request 请求对象 同一次请求有效
session 会话对象 同一次会话有效
appliation 全局对象 全局有效(整个项目有效)
以上4个对象共有的方法:
Object getAttribute(String name):根据属性名,或者属性值
void setAttribute(String name,Object obj) :设置属性值(新增,修改)
setAttribute(“a”,“b”) ;//如果a对象之前不存在,则新建一个a对象
如果a之前已经存在,则将a的值改为b
void removeAttribute(String name):根据属性名,删除对象

a.
pageContext 当前页面有效 (页面跳转后无效)

b.
request 同一次请求有效;其他请求无效 (请求转发后有效;重定向后无效)

c.
session 同一次会话有效 (无论怎么跳转,都有效;关闭/切换浏览器后无效 ; 从 登陆->退出 之间 全部有效)

d.
application
全局变量;整个项目运行期间 都有效 (切换浏览器 仍然有效);关闭服务、其他项目 无效
多个项目共享、重启后仍然有效 :JNDI
(1)以上的4个范围对象,通过 setAttribute()复制,通过getAttribute()取值;
(2)以上范围对象,尽量使用最小的范围。因为 对象的范围越大,造成的性能损耗越大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值