JSP学习笔记(二)

1.response: 响应对象

提供的方法:
void addCookie(Cookie cookie);服务端向客户端增加cookie对象
void sendRedirect(String location); throws IOException 页面跳转的一种方式(重定向)
void setContentType(String type); 设置服务端响应的编码(设置服务端的contentType)

2.请求转发与重定向的区别:

请求转发 重定向
地址栏是否改变: 不变 变
是否保留第一次
请求时的数据: 保留 不保留 --4种范围对象
请求次数: 1 2
跳转发生的位置 服务端 客户端

现实例子帮助理解:
转发:
张三(客户端) -> 【服务窗口A(服务端) -> 服务窗口B 】
重定向:
张三(客户端) -> 【服务窗口A(服务端) -> 去找B】
张三(客户端) -> 【服务窗口B(服务端) -> 结束】

3.Cookie

Cookie(客户端,不是内置对象):Cookie是由服务端生成的,再发送给客户端保存。
相当于本地缓存的作用:客户端 -> 服务端
作用:提高访问服务端的效率,但是安全性会变低

Cookie:name=value (键值对与json、map类似)
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
页面跳转(转发、重定向都可以)
客户端获取cookie: request.getCookies();

注意:
a: 服务端增加cookie: response对象; 客户端获取对象: request对象
b: 不能直接获取某个单独的cookie,只能一次性获取全部cookie之后遍历

通过F12可以发现 除了自己设置的cookie对象外,还有一个name为
JSESSIONID的cookie
建议:cookie只保存英文数字,否则需要进行编码、解码
总结:Cookie
a.不是内置对象,要使用必须new
b.但是,服务端会自动生成一个(服务端自动new一个cookie)name=JESSIONID的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)

客户端第二或多次请求服务端时:服务端会先用客户端cookie种的JSESSIONID去服务端的session中匹配sessionId 若成功则无需重新创建,若未成功则需要重新创建。

总结:
session:
a.session存储在服务端
b.session是在同一个用户请求时共享(即多次无需登录访问)
c.实现机制:第一次客户请求时,产生一个sessionId并赋值给cookie的JSESSIONID然后发给客户端。最终通过session的sessionId与cookie的JSESSIONID实现一一对应。

session方法:
String getId() : 获取sessionId
boolean isNew() : 判断是否是新用户(第一次访问)
void invalidate() : 使session失效(退出登录、注销)(一般使用这个,全部失效)session.removeAttribute()(单个失效,一般不用)
void setAttribute();设置session值
Object getAttribute(); 获取session时(记得强转)
void setMaxInactiveInterval(秒) : 设置最大有效非活动时间
int getMaxInactiveInterval() : 获取最大有效非活动时间

客户端在第一次请求服务端时,如果服务端发现 此请求没有 JSESSIONID,则会创建一个 name=JSESSIONID的cookie,发给客户端

cookie与session的区别
session cookie
保存的位置 服务端 客户端
安全性 较安全 较不安全
保存的内容 Object String

Cookie源码:

public Cookie(String name, String value){
	validation.validate(name);
	this.name = name;
	This,value = value;
}

5.application全局对象:

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

6.JSP九大内置对象

pageContext:JSP页面容器(page对象)
request:请求对象
session:会话对象
application:全局对象
response:响应对象
config: 配置对象(服务器配置信息)
out:输出对象
page:当前JSP页面对象(相当于java中的this)
exception:异常对象

四种范围对象(小->大)
pageContext:JSP页面容器(page对象) 当前页面有效
request:请求对象 同一次请求有效
session:会话对象 同一次会话有效
application:全局对象 全局有效(整个项目有效)
以上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.以上四个范围对象,通过setAttribute()赋值,通过getAttribute()取值;
2.尽量使用最小的范围,因为对象的范围越大,造成的性能损耗越大;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘二壮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值