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