title: web核心-request&&response
date: 2021-01-31 10:49:14
tags:
请求对象
请求对象的常用方法
返回值 | 方法名 | 说明 |
---|---|---|
String | getContextPath() | 获取虚拟目录名称 |
String | getServletPath() | 获取Servlet映射路径 |
String | getRemoteAddr() | 获取访问者ip地址 |
String | getQueryString() | 获取请求的消息数据 |
String | getRequestURI() | 获取统一资源标识符 |
StringBuffer | getRequestURL() | 获取统一资源定位符 |
- 资源标识符>资源定位符
1 | package com.yishan.servlet.request; |
获取请求头信息
返回值 | 方法名 | 说明 |
---|---|---|
String | getHeader(String name) | 根据请求头名称获取一个值 |
Enumeration |
getHeaders(String name) | 根据请求头名称获取多个值 |
Enumeration |
getHeaderNames() | 获取所有请求头名称 |
1 | package com.yishan.servlet.request; |
获取请求参数(重点)
返回值 | 方法名 | 说明 |
---|---|---|
String | getParameter(String name) | 根据名称获取数据 |
String[] | getParameterValues(String name) | 根据名称获取所有数据 |
Enumeration |
getParameterNames() | 获取所有名称 |
Map<String,String[]> | getParameterMap() | 获取所有参数的键值对 |
1 | package com.yishan.servlet.request; |
将获取的请求参数封装到实体类中
第一种:最简单直接的封装方式
- 获取数据,手动创建对象
1 | package com.yishan.servlet.request; |
第二种:使用反射方式封装
此种封装的使用要求:
表单<input>
标签的name属性取值,必须和实体类中定义的属性名称一致。
注意什么是属性?
input的name值和javabean的实体类成员变量名必须一致,包括大小写
1 | /** |
第三种:使用apache的commons-beanutils实现封装
1 | package com.yishan.servlet.request; |
请求正文中中文编码问题
请求中文乱码问题:
GET方式:TomCat8版本后已经解决。
POST方式:需要我们手动解决。通过setCharacterEncoding(“UTF-8”)解决
1 | /** |
请求域
可以在一次请求范围内进行数据共享
一般用于请求转发的多个资源中共享数据
返回值 | 方法名 | 说明 |
---|---|---|
void | setAttribute(String name,Object value) | 向请求域对象中存储数据 |
Object | getAttribute(String name) | 通过名称获取请求域对象中的数据 |
void | removeAttribute(String name) | 通过名称删除请求域对象中的数据 |
请求转发
- 请求转发:客户端的一次请求到达后,发现需要借助其他 Servlet 来实现功能。
- 特点:
- 浏览器地址栏不变
- 域对象中的数据不丢失
- 负责转发的 Servlet 转发前后的响应正文会丢失
- 由转发的目的地来响应客户端
返回值 | 方法名 | 说明 |
---|---|---|
RequestDispatcher | getRequestDispatcher(String name) | 获取请求调度对象 |
返回值 | 方法名 | 说明 |
---|---|---|
void | forward(ServletRequest req, ServletResponse resp) | 转发 |
1 | package com.yishan.servlet.request; |
1 | package com.yishan.servlet.request; |
请求包含
- 请求包含:可以合并其他 Servlet 中的功能一起响应给客户端。
- 特点:
- 浏览器地址栏不变
- 域对象中的数据不丢失
- 被包含的 Servlet 响应头会丢失
返回值 | 方法名 | 说明 |
---|---|---|
void | include(ServletRequest req,ServletResponse resp) | 实现包含 |
请求包含注意
- 把两个Servlet的响应内容合并输出。
- 这种包含是动态包含。
- 动态包含的特点:各编译各的,只是最后合并输出。
细节问题
- 请求转发的注意事项:负责转发的Servlet,转发前后的响应正文丢失,由转发目的地来响应浏览器。
- 请求包含的注意事项:被包含者的响应消息头丢失。因为它被包含起来了。
1 | package com.yishan.servlet.request; |
1 | package com.yishan.servlet.request; |
响应对象
关于响应
- 响应,它表示了服务器端收到请求,同时也已经处理完成,把处理的结果告知用户。简单来说,指的就是服务器把请求的处理结果告知客户端。
- 响应对象,顾名思义就是用于在JavaWeb工程中实现上述功能的对象。
常用响应对象
- 响应对象也是是Servlet规范中定义的,它包括了协议无关的和协议相关的。
- 协议无关的对象标准是:ServletResponse接口
- 协议相关的对象标准是:HttpServletResponse接口
常用状态码
状态码 | 说明 |
---|---|
200 | 执行成功 |
302 | 它和307一样,都是用于重定向的状态码。只是307目前已不再使用 |
304 | 请求资源未改变,使用缓存。 |
400 | 请求错误。最常见的就是请求参数有问题 |
404 | 请求资源未找到 |
405 | 请求方式不被支持 |
500 | 服务器运行内部错误 |
状态码首位含义
状态码 | 说明 |
---|---|
1xx | 消息 |
2xx | 成功 |
3xx | 重定向 |
4xx | 客户端错误 |
5xx | 服务器错误 |
字节流输出中文问题
返回值 | 方法名 | 说明 |
---|---|---|
ServletOutputStream | getOutputStream() | 获取响应字节输出流对象 |
void | setContentType(“text/html;charset=UTF-8”) | 设置响应内容类型,解决中文乱码问题 |
1 | package com.yishan.servlet.response; |
响应图片
- 注意:
- 发布后图片真实路径的获取
1 | package com.yishan.servlet.response; |
设置响应消息头-控制缓存
- 缓存:
- 对于不经常变化的数据,我们可以设置合理缓存时间,以避免浏览器频繁请求服务器。以此来提高效率!
返回值 | 方法名 | 说明 |
---|---|---|
void | setDateHeader(String name,long time) | 设置消息头添加缓存 |
1 | package com.yishan.servlet.response; |
设置响应消息头定时刷新
- 定时刷新:过了指定时间后,页面自动进行跳转
返回值 | 方法名 | 说明 |
---|---|---|
void | setHeader(String name,String value) | 设置消息头定时刷新 |
1 | package com.yishan.servlet.response; |
请求重定向:注意地址栏发生改变。
请求重定向:客户端的一次请求到达后,发现需要借助其他 Servlet 来实现功能。
特点:浏览器地址栏发生改变
返回值 | 方法名 | 说明 |
---|---|---|
void | sendRedirect(String name) | 设置重定向 |
- 重定向:资源跳转的方式
- 方式一:设置头信息location
- 设置状态码为302
- response.setStatus(302);
- 设置响应头location
- response.setHeader(“location”,”/day15/responseDemo2”);
- 设置状态码为302
- 方式二:
- 简单的重定向方法
- response.sendRedirect(“/day15/responseDemo2”);
- 简单的重定向方法
- 方式一:设置头信息location
- 重定向的特点:redirect
- 地址栏发生变化
- 重定向可以访问其他站点(服务器)的资源
- 重定向是两次请求。不能使用Request域对象来共享数据
- 转发的特点:forward
- 转发地址栏路径不变
- 转发只能访问当前服务器下的资源
- 转发是一次请求,可以使用Request域对象来共享数据
1 | package com.yishan.servlet.response; |
1 | package com.yishan.servlet.response; |
响应和消息头组合应用-文件下载
1 | package com.yishan.servlet.response; |