自用笔记——04

  1. 回顾

    1. servlet得运行原理!

    2. Servlet的体系结构! Servlet ---->GenericServlet---->HttpServlet---->自定义Servlet

    3. 把客户请求封装为HttpServletRequest类。
      把服务器响应的信息封装HttpServletResponse类
      sendRedirect()

    4. 登录

  2. 正文

    1. 重定向和请求转发的区别?
    2. cookie和session得区别?
    3. JSP动态网页!

3.重定向和请求转发的区别?

重定向:客户端重新发送新的请求,无法request携带数据。地址栏会发生改变。

请求转发: 地址栏不会发生改变,在服务器端完成,效率高 使用request携带数据。

request.setAttribute(key,value); request对象存放数据
request.getAttribute(key); request对象获取数据

在这里插入图片描述
转发和跳转的小结

转发使用的是req.getRequestDispatcher()方法;重定向使用的是resp.sendRedirect();
转发:浏览器URL的地址栏不变。重定向:浏览器URL的地址栏改变;
转发是服务器行为,重定向是客户端行为;
转发是浏览器只做了一次访问请求。重定向是浏览器做了至少两次的访问请求;
转发2次跳转之间传输的信息不会丢失,重定向2次跳转之间传输的信息会丢失(request范围);

转发和重定向的选择

  1. 重定向的速度比转发慢,因为浏览器还得发出一个新的请求,如果在使用转发和重定向都无所谓的时候建议使用转发。
  2. 因为转发只能访问当前WEB的应用程序,所以不同WEB应用程序之间的访问,特别是要访问到另外一个WEB站点上的资源的情况,这个时候就只能使用重定向了。

转发和重定向的应用场景

在上面我已经提到了,转发是要比重定向快,因为重定向需要经过客户端,而转发没有。有时候,采用重定向会更好,若需要重定向到另外一个外部网站,则无法使用转发。另外,重定向还有一个应用场景:避免在用户重新加载页面时两次调用相同的动作。

例如,当提交产品表单的时候,执行保存的方法将会被调用,并执行相应的动作;这在一个真实的应用程序中,很有可能将表单中的所有产品信息加入到数据库中。但是如果在提交表单后,重新加载页面,执行保存的方法就很有可能再次被调用。同样的产品信息就将可能再次被添加,为了避免这种情况,提交表单后,你可以将用户重定向到一个不同的页面,这样的话,这个网页任意重新加载都没有副作用;

  1. cookie和session得区别?

为什么要用cookie和session

因为http协议是一个无连接,无状态的协议,每一次请求之间互相独立,互不关联,所以无法在多次请求之间共享数据,cookie和session解决的问题就是==不同请求共享数据问题==。

一次会话中包含多次请求和响应。

什么是一次会话:浏览器第一次给服务器发送请求开始—》到任意一方断开为止。

功能:在一次会话的范围内,多次请求之间共享数据。

2.1 cookie技术

Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

概念:客户端会话技术:将数据保存到客户端

1.快速入门:

步骤:

1.创建cookie对象,绑定数据

	new Cookie(String name,String value);

2.响应cookie对象到浏览器

	response.addCookie();

3.获取cookie对象,获取数据。

	Cookie[]  cookies = request.getCookies()

cookie得原理
在这里插入图片描述
3. cookie的注意事项

  • 一次可不可以发送多个cookie
    可以。
  • cookie在浏览器中的保存时间
    • 默认情况下:当浏览器关闭后cookie被销毁
    • 持久化存储:
      • setMaxAge(int seconds)方法
        • 正数:将cookie存储到硬盘中,数字大小就是cookie的存活时间 以秒计
        • 负数:默认
  • cookie中能不能存中文
    • tomcat8之前不行,tomcat8之后可以
  1. cookie的特点:

    1.存储数据在浏览器端

    2.浏览器对单个cookie 的数据大小有限制(4k–),同一个域名下的总cookie个数也有限制(<20)

  2. 数据也有限制,只能是字符串,特殊字符也不能有。

使用:免登录操作(记住密码)。

案例

1运行项目进入登录页面,可以输入用户名和密码并且点击登录按钮,

2写一个CookieServlet01类,这个类负责获取客户端发来的数据,并且将数据用户名写入cookie中,

3再写一个CookieServlet02和CookieServlet03类,

4这两个类都负责获取Cookie并打印到控制台

5,要求在服务器不停止运行的情况下,一小时内关闭浏览器再打开并访问CookieServlet02或CookieServlet03仍会打印出获取到的用户名。

2.2 session

是服务器端共享数据。
  1. 概念:在一次会话的多次请求之间共享数据,将数据保存在服务器端session对象中。

基操:

  • 1.获取session对象
    request.getSession();==>getSession(true); 直接获取session,如果session不存在,就创建一个。
    request.getSession(false); 获取已经存在的session对象,如果不存在获取到null。
  • 2.使用session对象
    setAttribute(String name,Object value);设置session的值
    getAttribute(name);根据session的名字,获取session的值
    removeAttribute(String name);删除session

如果使用请求的转发,可以通过request将数据转发到jsp页面,但是导致页面的路径不会改变,如果使用重定向,可以改变地址栏路径,但是不能通过request传输数据,所以此时用session进行数据的共享。

request 在一次请求之间共享数据。

session在一次对话(多次请求)之间共享数据。

在这里插入图片描述
设置session得失效时间。默认30分钟。

session原理分析

session的实现是依赖于cookie的
在这里插入图片描述

session的特点

1.session用于存储一次共享会话的多次请求的数据,在服务器端。

2.session可以存储任意数据类型,任意大小的数据。

3.cookie和session的区别:

A:session存在服务器端;cookie存在客户端

B:session由服务器自己创建;Cookie也是服务器写进去响应到客户端

C:session存的对象,每一个客户端独立;Cookie存的是字符串,也是每一个客户端独享

D:客户端访问服务器,会带着一个jsessionid,如果没有服务器自动创建一个响应给客户端,下次请求带着,session靠jsessionid进行识别用户。

总结:

1. 两种跳转:  (1)重定向 产生新的request 保存到原来request中数据无法获取 地址会改变     效率低
            (2)请求转发  不会产生新的request,可以获取request中保存的数据  地址不会改变。 效率高。
2. 如何多个请求之间共享数据: 把数据放入会话中。----cookie     session 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值