内置对象学习1

感谢颜群老师的指点,博主特别喜欢他,感觉干货满满,分享给大家

response :响应对象

提供的方法:

  1. void addCookie( Cookie cookie ); 服务端向客户端增加cookie对象
  2. void sendRedirect(String location ) throws IOException; :页面跳转的一种方式(重定向)
  3. void setContetType(String type):设置服务端响应的编码(设置服务端的contentType类型)

示例:登陆
ogin.jsp -> check.jsp ->success.jsp

请求转发 重定向
地址栏是否改变 不变(check.jsp) 改变(success.jsp)
是否保留第一次 保留 不保留
请求的次数 1 2
跳转发生的位置 服务端 客户端发出的第二次跳转

转发、重定向:

转发:

张三(客户端) -> 【 服务窗口 A (服务端 ) -> 服务窗口B 】

重定向:

张三(客户端) -> 服务窗口 A (服务端 ) ->去找B
张三(客户端) -> 服务窗口 B (服务端 ) ->结束

session(服务端)

  • Cookie(客户端,不是内置对象):Cookie是由 服务端生成的 ,再发送给客户端保存。
  • 相当于 本地缓存的作用: 客户端(hello.mp4,zs/abc)->服务端(hello.mp4;zs/abc)
  • 作用:提高访问服务端的效率,但是安全性较差。
  1. Cookie: name=value
  2. javax.servlet.http.Cookie
  3. public Cookie(String name,String value)
  4. String getName():获取name
  5. String getValue():获取value
  6. 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实现 记住用户名 功能

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

session机制:

  1. 客户端第一次请求服务端时,(jsessionid-sessionid)服务端会产生一个session对象(用于保存该客户的信息);
  2. 每个session对象 都会有一个唯一的 sessionId( 用于区分其他session);
  3. 服务端由会 产生一个cookie,并且 该cookie的name=JSESSIONID ,value=服务端sessionId的值;
  4. 服务端会在 响应客户端的同时 将该cookie发送给客户端,至此 客户端就有了 一个cookie(JSESSIONID); 客户端的cookie就可以和服务端的session一一对应(JSESSIONID - sessionID)

客户端第二/n次请求服务端时:服务端会先用客户端cookie种的JSESSIONID 去服务端的session中匹配sessionid,如果匹配成功(cookie jsessionid和sesion sessionid),说明此用户 不是第一次访问,无需登录;

session:

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

session方法:

  1. String getId() :获取sessionId

  2. boolean isNew() :判断是否是 新用户(第一次访问)

  3. void invalidate():使session失效 (退出登录、注销)

  4. void setAttribute()

  5. Object getAttribute();

  6. void setMaxInactiveInterval(秒) :设置最大有效 非活动时间

  7. int getMaxInactiveInterval():获取最大有效 非活动时间

示例:
登录

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

Cookie:

  1. 不是内对对象,要使用必须new
  2. 但是,服务端会 自动生成一个(服务端自动new一个cookie) name=JSESIONID的cookie 并返回给客户端

cookie和session的区别:

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

appliation 全局对象

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

JSP9大内置对象

  1. pageContext JSP页面容器

  2. request 请求对象

  3. session 会话对象

  4. appliation 全局对象

  5. response 响应对象

  6. config 配置对象(服务器配置信息)

  7. out 输出对象

  8. page 当前JSP页面对象(相当于java中的this)

  9. exception 异常对象

四种范围对象(小->大)
pageContext JSP页面容器 (page对象); 当前页面有效
request 请求对象 同一次请求有效
session 会话对象 同一次会话有效
appliation 全局对象 全局有效(整个项目有效)

以上4个对象共有的方法:

  1. Object getAttribute(String name):根据属性名,或者属性值
  2. void setAttribute(String name,Object obj) :设置属性值(新增,修改)

    setAttribute(“a”,“b”) ;//如果a对象之前不存在,则新建一个a对象 ;
    如果a之前已经存在,则将a的值改为b

  3. void removeAttribute(String name):根据属性名,删除对象
  • pageContext 当前页面有效 (页面跳转后无效)

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

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

  • application
    全局变量;整个项目运行期间 都有效 (切换浏览器 仍然有效);关闭服务、其他项目 无效

->多个项目共享、重启后仍然有效 :JNDI

  1. 以上的4个范围对象,通过 setAttribute()复制,通过getAttribute()取值;
  2. 以上范围对象,尽量使用最小的范围。因为 对象的范围越大,造成的性能损耗越大。
发布了41 篇原创文章 · 获赞 1 · 访问量 581

猜你喜欢

转载自blog.csdn.net/qq_41620020/article/details/104864911