Cookie&Session&Jsp

回顾

  1. 请求和响应时,哪些情况会出现中文乱码,如何解决
    • 发 post 请求时,request.setCharacterEncoding(“编码”)
    • 响应的乱码: response.setContentType(“text/html;charset=编码”);
  2. 如何在请求转发时共享数据
    • request.getRequestDispatcher("/目标资源路径").forward(request, response);
    • A -> B
    • A: request.setAttribute(“名”, 数据);
    • B: request.getAttribute(“名”)
  3. 请求转发和请求包含的区别
    • forward A -> B 最后由 B 来返回响应结果
    • include A -> B 最后是由 A+B 返回响应的结果
  4. 请求转发和重定向的区别
    • response.sendRedirect("/虚拟目录/目标资源路径");
    • 转发是1次请求,重定向是2次请求
    • 转发地址栏不变,重定向地址栏改变
    • 请求转发可以使用 request 域共享数据,但重定向不能
    • 转发只能是本项目的资源,而重定向可以是任意资源
  5. 常见状态码的作用,304 是什么?Expires 头是什么(过期时间)
    • 200
    • 302 - 重定向
    • 304 - 缓存
    • 400 - 请求参数不正确
    • 404 - 找不到
    • 405 - 方法不支持
    • 500 - 服务器异常 web.xml error-page
  6. 如何返回 html 格式的响应
    • response.getWriter().print("")
  7. 如何返回二进制格式的响应(图片),如何下载
    • response.getOutputStream()
    • 两个响应头
    • Content-Type: application/octet-stream
    • Content-Disposition: attachement;filename=文件名

今日内容

默认情况下,两个http请求之间是没有联系的,无状态

1. cookie (小甜点)

把多个请求间要共享的信息,存储在客户端

response.addCookie(new Cookie(name, value)) - 将 cookie 存入客户端浏览器

request.getCookies[] => Cookie[] - 从浏览器获取上次存储的 cookie(多个)

maxAge - 最大寿命

  • cookie.setMaxAge(-1) 默认值是 -1 ,当浏览器关闭,cookie 被销毁

  • cookie.setMaxAge(3600) 单位是秒, 当1小时后,cookie 被销毁

  • cookie.setMaxAge(0) 表示立刻删除此 cookie

个数限制

  • 每个cookie 大小 4k

cookie 中文解决方法

// 编码
new Cookie(, URLEncoder.encode("中文", "utf-8")); 
// 解码
URLDecoder.decode(cookie.getValue(), "utf-8");

2. session

把多个请求间要共享的信息,存储在服务器端

  • HttpServletRequest 请求域 - 共享数据仅存在一次请求中
  • HttpSession 会话域 - 同一个浏览器与服务器之间多次通信,是一个会话(可以配合重定向用)
  • ServletContext 应用域 - 多个浏览器之间想共享数据,可以使用它来共享数据
request.getSession();   // 查看session有没有,有则直接获取,没有就会创建(相当于 boolean 变量是 true)

request.getSession(false);   // 查看session有没有,有则直接获取, 没有返回null 不会创建session

session.invalidate() 销毁session

session 生命周期(补充)

  • 当第一次调用 request.getSession() 方法时会创建 session

  • 销毁session

    • 主动销毁 session.invalidate() 会删除所有的共享数据,并回收session 占用的内存

    • 被动销毁 当浏览器有一段时间(30分钟)没有发请求了,那么服务器会销毁此session

      • 当用户量较大时,建议缩短过期时间

      • <session-config>
            <session-timeout>20</session-timeout>
        </session-config>
        

    注销 /logout ==> servlet ==> session.invalidate()

3. jsp

java server page 协助 servlet 来生成 html 页面

  • servlet 只负责处理请求,写 java 代码逻辑,生成数据
  • 域 request
  • jsp 页面只负责展示数据

本质是一个 servlet

语法

注释

<%-- 注释内容  --%>

java 代码块

<%  java 代码  %>

表达式

<%= 表达式 %>

声明

<%!  
  成员变量;
  成员方法;
%>

指令

<%@ page contentType="" import="" %>

<%@ include file="页面地址" %>

<%@ taglig %>

9 个隐式对象(以下四个必须掌握)

pageContext
request
session
application   (ServletContext)
Cookie

补充问题

  1. 再讲下域对象和前面的servelet的context,config之类的区别和联系

pageContext, request, session, application => 管理共享数据

application === ServletContext (.getRealPath(), setAttribute getAttribute(), getInitParameter())

response, out, page【代表当前jsp对象】, config【servlet的初始化参数】, exception【异常信息】

ServletConfig 获取每个servlet 的初始化参数的

web.xml

<context-param>
	<param-name></param-name>
	<param-value></param-value>
</context-param>

<servlet>
	<init-param>
    	<param-name></param-name>
        <param-value></param-value>
    </init-param>
</servlet>
  1. cookie 和 session

    • cookie 的信息存储在浏览器中,每个cookie 4k数据,只能存字符串类型,中文问题
    • session 的信息存储在服务器中,数据没有上限(建议尽量少存),可以存任意类型,没有中文问题,依赖于 cookie
  2. resp.addCookie(timeCookie);添加到客户端后是下次请求才开始生效吗? 是的

  3. jsp企业是不是过期了,新的代替技术是什么 freeMarker

  4. Session 中有唯一(JsessionID), 这个ID 属于cookie 的一个属性值?;

    他是 cookie 的名字,值是唯一的标识

  5. cookie是有数量和大小限制的; 是否因此会影响session的数量和大小?

    没有关系

  6. Parameter和Attribute有啥区别

    • 用来获取请求参数的: request.getParamter(“name”); // ?name=zhangsan, <input type=text name=“name”

    • 用来获取request域中共享数据 request.getAttribute(“name”),也就是用 request.setAttribute(“name”, “lisi”)

  7. cookie使用细节哪里有个访问路径限制

    • 比如路径 设置为 /test8
    • 当浏览器访问 /test8 下任意资源时都会携带 cookie
    • /test8/index.jsp, /test8/aaa/s1, …
  • /test8/aaa 下任意资源时都会携带 cookie
    • /test8/aaa/1.jsp |
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值