HttpServletRequest 接口
HttpServletRequest 接口是一个公共接口类,继承ServletRequest 接口,客户端浏览器发出的请求会封装成一个HttpServletRequest 对象,包括请求的地址,请求的参数,提交的数据,上传的文件客户端的ip甚至客户端操作系统都包含在其内,容器将HttpServletRequest 对象以参数的形式传入service()方法中,判断调用doget还是dopost方法,HTTP 请求消息分为请求行、请求消息头和请求体三部分。
请求行使用及其方法
返回类型 | 方法名 | 说明 |
---|---|---|
String | getMethod() | 获取请求方法,如get,post等 |
String | getServletPath() | 获取servlet所映射的路径 |
String | getRemoteHost() | 获取客户端的完整主机名,如果无法解析,则返回客户端的ip地址 |
String | getRemoteAddr() | 直接获取客户端的ip地址 |
String | getContextPath() | 返回servlet上下文的名字 |
String | getQueryString() | 获取请求行的参数,也就是url中?后的所有内容 |
String | getRequestURI() | 该方法用于获取请求行中的资源名称部分,即位于 URL 的主机和端口之后,参数部分之前的部分 |
请求头使用及方法
在浏览器发送请求后,请求头里面有上传进来的一些附加信息, HttpServletRequest 接口定义了许多获取 HTTP 请求头字段的方法。
返回类型 | 方法名 | 说明 |
---|---|---|
String | getHeader(String name) | 获取一个指定字段的值 |
Enumeration | getHeaders(String name) | 获取一个或者多个相同头字段的所有值返回一个枚举集合 |
Enumeration | getHeaderNames() | 返回请求头中所有头字段的枚举集合 |
String | getContentType() | 获取 Content-Type 头字段的值 |
int | getContentLength() | 获取 Content-Length 头字段的值 |
String | getCharacterEncoding() | 获取请求消息的字符集编码 |
请求体使用及方法
请求体是是指获取用户提交的表单数据,例如密码,账号等,但首先需要获取它们的参数。下面定义的是获取参数的方法。
返回类型 | 方法名 | 说明 |
---|---|---|
String | getParameter(String name) | 获取指定参数的值 |
String | getParameterValues (String name) | 以字符串形式返回指定参数的所有参数值。 |
Enumeration | getParameterNames() | 以枚举集合返回请求中的所有参数名 |
Map | getParameterMap() | 将请求中的所有参数名和参数值装入一个Map集合返回 |
示例:
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>MyWeb</title>
</head>
<Style>
</Style>
<body>
<form action="/MyWeb1/myservlet1" method="POST">
账号: <input type="text" name="username"><br>
密码: <input type="password" name="password"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
package com.by.qy;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/myservlet1")
public class RequestParam extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("textml;charset=UTF-8");
PrintWriter writer = response.getWriter();
String name=request.getParameter("username");
String password=request.getParameter("password");
writer.print("账号:"+name+"<br>"+"密码:"+password+"<br>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
中文乱码
- 以get形式发送请求,请求参数保存在请求头中,到达服务器之后,第一件事就时解码,在tomcat9.0中默认为utf-8字符集。
- 以post方式发送请求,第一件事也是解码,但默认的是ISO-8859-1字符集,修改缓冲区的字符集:request.setCharacterEncoding(“utf-8”);
编码与解码
- URLEncoder.encode(字符串, 字符集字符串); 编码。
- URLDecoder.decode(字符串,字符集字符串);解码
- new String(参数字符串.getBytes(字符集编码),字符集解码);