request

在Servlet API中,定义了一个HttpServletRequest接口,它继承自ServletRequest接口,专门用来封装HTTP请求消息。由于HTTP请求消息分为请求行、请求头和请求体三部分,因此,在HttpServletRequest接口中定义了获取请求行、请求头和请求体的相关方法.

request作用
  • 操作请求三部分(行,头,体)
  • 请求转发 页面 | servlet
  • 作为域对象存取数据
1、操作请求行

返回值类型

方法声明

描述

String

getMethod()

该方法用于获取 HTTP 请求方式(如 GET、POST 等)。

String

getRequestURI()

该方法用于获取请求行中的资源名称部分,即位于 URL 的主机和端口之后,参数部分之前的部分。

String

getQueryString()

该方法用于获取请求行中的参数部分,也就是 URL 中“?”以后的所有内容。

String

getContextPath()

返回当前 Servlet 所在的应用的名字(上下文)。对于默认(ROOT)上下文中的 Servlet,此方法返回空字符串""。

String

getServletPath()

该方法用于获取 Servlet 所映射的路径。

String

getRemoteAddr()

该方法用于获取客户端的 IP 地址。

String

getRemoteHost()

该方法用于获取客户端的完整主机名,如果无法解析出客户机的完整主机名,则该方法将会返回客户端的 IP 地址。

2、操作请求头

返回值类型

方法声明

描述

String

getHeader(String name)

该方法用于获取一个指定头字段的值。 如果请求消息中包含多个指定名称的头字段,则该方法返回其中第一个头字段的值。

Enumeration

getHeaders(String name)

该方法返回指定头字段的所有值的枚举集合, 在多数情况下,一个头字段名在请求消息中只出现一次,但有时可能会出现多次。

Enumeration

getHeaderNames()

该方法返回请求头中所有头字段的枚举集合。

String

getContentType()

该方法用于获取 Content-Type 头字段的值。

int

getContentLength()

该方法用于获取 Content-Length 头字段的值 。

String

getCharacterEncoding()

该方法用于返回请求消息的字符集编码 。

3、操作请求体

返回值类型

方法声明

功能描述

String

getParameter(String name)

返回指定参数名的参数值。

String [ ]

getParameterValues (String name)

以字符串数组的形式返回指定参数名的所有参数值(HTTP 请求中可以有多个相同参数名的参数)。

Enumeration

getParameterNames()

以枚举集合的形式返回请求中所有参数名。

Map

getParameterMap()

用于将请求中的所有参数名和参数值装入一个 Map 对象中返回。

response

在Servlet API中,定义了一个HttpServletResponse接口(doGet,doPost方法的参数),它继承自ServletResponse接口,专门用来封装HTTP响应消息。由于HTTP响应消息分为响应行、响应头、响应体三部分,因此,在HttpServletResponse接口中定义了向客户端发送响应状态码、响应头、响应体的方法.

response作用

操作响应的三部分(行, 头, 体)

1、操作响应行

返回值类型

方法声明

功能描述

void

setStatus(int code)

返回指定的响应状态码。

常用的状态码:
200:成功
302:重定向 ,重新定位方向
304:访问缓存,告诉浏览器,缓存就是最新的内容。
404:客户端错误
500:服务器错误

2、操作响应头

方法声明

功能描述

setHeader(String key,String value)

设置字符串形式的响应头

setIntHeader(String key,int value)

设值整形的响应头

setDateHeader(String key,long value)

设值时间的响应头

addHeader(String key,String value)

添加置字符串形式的响应头 之前设置过则追加,若没有设置过则设置

addIntHeader(String key,int value):

添加整形的响应头

addDateHeader(String key,long value):

添加时间的响应头

常用方法:setHeader(String name,String value);

常用的响应头
Refresh:定时跳转 (eg:服务器告诉浏览器5s之后跳转到百度)
Location:重定向地址(eg: 服务器告诉浏览器跳转到xxx) ,可以跳资源(网页|servlet)
Content-Disposition: 告诉浏览器现在打开的下载
Content-Type:设置响应内容的MIME类型(服务器告诉浏览器内容的类型)
例:
1、定时刷新
response.setHeader(“Refresh”,“秒数;url=跳转的路径”); //几秒之后跳转到指定的路径上定时刷新
2、重定向跳转
response.setHeader(“Location”, “register.html”); //重定向的路径(绝对路径,带域名/ip地址的,如果是同一个项目里面的,域名/ip地址可以省略)

常用方法: sendRedirect(String location)

重定向 response.sendRedirect(“重定向的路径”)
重定向两次请求,重定向的地址栏路径改变
例:
1、跳转HTML页面
response.sendRedirect(“register.html”);
2、跳转外面的公网资源
response.sendRedirect(“http://www.baidu.com”);

转发和重定向区别【面试】
1. 转发是一次请求, 重定向是二次请求
2. 转发的路径不会改变,重定向的路径会改变
3. 转发只能转发到项目的内部资源,重定向可以重定向到项目的内部资源, 也可以是项目外部资源(eg:百度)
4. 转发可以转发到WEB-INF下面的资源, 重定向不可以重定向到WEB-INF下面的资源
5. 把数据存到request里面,转发有效, 重定向无效
6. 转发的路径写相对的(不带http,不带ip,不带项目名), 重定向的路径写绝对的(带http,带ip,带项目名)
3、操作响应体

返回值类型

方法声明

功能描述

PrintWriter

getWrite()

用于返回Servlet引擎创建的字符输出流对象,Servlet程序可以按字符形式输出响应正文

ServletOutputStream

getOuputStream()

用于返回Servlet引擎创建的字节输出流对象,Servlet程序可以按字节形式输出响应正文

操作响应体
getWrite()
1、会有乱码,需要设置 resp.setContentType(“text/html;charset=utf-8”);
2、可以写标签,浏览器可以认识的。
getOuputStream
1、不会有乱码,默认采用的是GBK编码,浏览器也认识。
2、不能识别标签
不能同时使用这两种来写数据。
页面输出只能使用其中的一个流实现,两个流是互斥的.

只是针对取值,也就是从浏览器传递过来的数据里面取出来中文乱码的解决办法

req.setCharacterEncoding("utf-8");