layout: post
#标题配置
title: Servlet请求与响应
#时间配置
date: 2021-09-02 19:00:00 +0800
#目录配置
categories: Web
#标签配置
tag: 学习笔记
一.请求
1.请求对象介绍
- 请求:获取资源,在B/S架构中,就是客户端浏览器向服务器发出询问
- 请求对象:就是在项目当中发送请求的对象
2.请求对象常用方法-获取各种路径
返回值 | 方法名 | 说明 |
---|
String | getContextPath() | 获取虚拟目录名称 |
String | getServletPath() | 获取Servlet映射路径 |
String | getRemoteAddr() | 获取访问者ip地址 |
String | getQueryString() | 获取请求的消息数据 |
String | getRequestURI() | 获取统一资源标识符 |
StringBuffer | getRequestURL() | 获取统一资源定位符 |
3.请求对象常用方法-获取请求头信息
返回值 | 方法名 | 说明 |
---|
String | getHeader(String name) | 根据请求头名称获取一个值 |
Enumeration | getHeaders(String name) | 根据请求头名称获取多个值 |
Enumeration | getHeaderNames() | 获取所有请求头名称 |
4.请求对象常用方法-获取请求参数信息
返回值 | 方法名 | 说明 |
---|
String | getParameter(String name) | 根据名称获取数据 |
String[] | getParameterValues(String name) | 根据名称获取所有数据 |
Enumeration | getParameterNames() | 获取所有名称 |
Map<String,String> | getParameterMap() | 获取所有参数的键值对 |
5.获取请求参数并封装对象
(1)手动封装的方式
(2)反射封装方式
(3)工具类封装方式
6.流对象获取请求信息
返回值 | 方法名 | 说明 |
---|
BufferedReader | getReader() | 获取字符输入流 |
ServletInputStream | getInputStream() | 获取字节输入流 |
7.中文乱码问题
- GET方式
没有乱码问题。在Tomcat 8 版本后已经解决 - POST方式
有乱码问题,可以通过setCharacterEncoding()方法来解决!
8.请求域
返回值 | 方法名 | 说明 |
---|
void | setAttribute(String name,Object value) | 向请求域对象中存储数据 |
Object | getAttribute(String name) | 通过名称获取请求域对象中的数据 |
void | removeAttribute(String name) | 通过名称移除请求域对象中的数据 |
9.请求转发
- 请求转发:客户端的一次请求到达后,发现需要借助其他Servlet来实现功能
- 特点:
- 浏览器地址栏不变
- 域对象中的数据不丢失
- 负责转发的servlet转发前后的响应正文会丢失
- 由转发的目的地来响应客户端
返回值 | 方法名 | 说明 |
---|
RequestDispatcher | getRequestDispatcher(String name) | 获取请求调度对象 |
返回值 | 方法名 | 说明 |
---|
void | forward(ServletRequest req, ServletResponse resp) | 实现转发 |
10.请求包含
- 请求包含:可以合并其他Servlet中的功能一起响应给客户端
- 特点:
- 浏览器地址栏不变
- 域对象中的数据不丢失
- 被包含的Servlet响应头会丢失
返回值 | 方法名 | 说明 |
---|
RequestDispatcher | getRequestDispatcher(String name) | 获取请求调度对象 |
返回值 | 方法名 | 说明 |
---|
void | include(ServletRequest req, ServletResponse resp) | 实现包含 |
二.响应
1.响应对象介绍
- 响应:回馈结果。在B/S架构中,就是服务器给客户端浏览器反馈结果。
- 响应对象:就是在项目中用于发送响应的对象
2.常见状态码
状态码 | 说明 |
---|
200 | 成功 |
302 | 重定向 |
304 | 请求资源未改变,使用缓存 |
400 | 请求错误,常见于请求参数错误 |
404 | 请求资源未找到 |
405 | 请求方式不支持 |
500 | 服务器错误 |
3.字节流响应消息
返回值 | 方法名 | 说明 |
---|
ServletOutputStream | getOutputStream() | 获取响应字节输出流对象 |
void | setContentType("text/html;charset=“UTF-8”) | 设置响应内容类型,解决中文乱码问题 |
4.字符流响应消息
返回值 | 方法名 | 说明 |
---|
PrintWriter | getWriter | 获取响应字符输出流对象 |
void | setContentType("text/html;charset=“UTF-8”) | 设置响应内容类型,解决中文乱码问题 |
5.响应图片
(1)创建字节输入流对象,关联读取的图片路径
(2)通过响应对象获取字节输出流对象
(3)循环读取和写出图片
6.设置缓存
7.定时刷新
返回值 | 方法名 | 说明 |
---|
void | setHeader(String name, String value) | 设置消息头定时刷新 |
8.请求重定向
- 请求重定向:客户端的一次请求到达后,发现需要借助其他Servlet来实现功能
- 特点:浏览器地址栏会发生改变,两次请求。请求域对象中不能共享数据,可以重定向到其他服务器
- 重定向实现原理
设置响应状态码为302
resp.setStatus(302)
设置响应的资源路径(响应到哪里去,通过响应消息头location来指定)
resp.setHeader(“location”,“/response/responseDemo07”); - 响应对象重定向方法
返回值 | 方法名 | 说明 |
---|
void | sendRedirect(String name) | 设置重定向 |
9.文件下载
- 创建字节输入流,关联读取的文件
- 设置响应消息头支持的类型
- 设置响应消息头以下载方式打开资源
- 通过响应对象获取字节流输出流对象
- 循环读写
- 释放资源