1.Request
1.1Request继承体系
1.2Request获取请求数据
1.2.1获取请求行、请求头、请求体
获取请求行、请求头:
@WebServlet("/req1")
public class RequestDemo1 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求行
//请求方式
String method = req.getMethod();
System.out.println(method);// GET
//项目访问路径
String contexPath = req.getContextPath();
System.out.println(contexPath);// /web-demo
//URL
StringBuffer requestURL = req.getRequestURL();
System.out.println(requestURL.toString());// http://localhost:8080/web-demo/req1
//URI
String requestURI = req.getRequestURI();
System.out.println(requestURI);// /web-demo/req1
//请求参数(GET方式)
String queryString = req.getQueryString();
System.out.println(queryString);// zhangsan=123
//获取请求头
//浏览器版本信息
String header = req.getHeader("user-agent");
System.out.println(header);
}
}
获取请求体:
@WebServlet("/req1")
public class RequestDemo1 extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求体(post请求)
BufferedReader br = req.getReader();
String line = br.readLine();
System.out.println(line);// username=aaa&password=1345
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/request-demo/req1" method="post">
用户名<input type="text" name="username">密码<input type="password" name="password">
<input type="submit" value="点击提交">
</form>
</body>
</html>
1.2.2Request通用方式获取请求参数
@WebServlet("/req2")
public class RequestDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("获取所有参数的map集合");
Map<String, String[]> map = req.getParameterMap();
for (String key : map.keySet()) {
System.out.print(key + ":");
String[] values = map.get(key);
for (String value : values) {
System.out.print(value + " ");
}
System.out.println();
}
// 获取所有参数的map集合
// username:zhangsan
// password:12345
// hobby:1 2 3
System.out.println("----------------------------------");
System.out.println("根据key获取参数值数组");
String[] hobbies = req.getParameterValues("hobby");
for (String hobby : hobbies) {
System.out.println(hobby);
}
// 根据key获取参数值数组
// 1
// 2
// 3
System.out.println("----------------------------------");
System.out.println("根据key获取单个参数值");
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println("username:" + username);
System.out.println("password:" + password);
// 根据key获取单个参数值
// username:zhangsan
// password:12345
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/request-demo/req2" method="post">
用户名<input type="text" name="username"><br>
密码<input type="password" name="password"><br>
爱好<input type="checkbox" name="hobby" value="1">游泳
<input type="checkbox" name="hobby" value="2">爬山
<input type="checkbox" name="hobby" value="3">跑步<br>
<input type="submit" value="点击提交">
</form>
</body>
</html>
idea模板创建Servlet
1.修改模板
2.使用模板
请求参数中文乱码处理
1.解决post方式中文乱码问题 getReader()
@WebServlet("/req3")
public class RequestDemo3 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.解决post方式中文乱码问题 getReader()
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
System.out.println(username);
}
}
2.解决get方式中文乱码问题 getQueryString()
@WebServlet("/req3")
public class RequestDemo3 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//2.解决get方式中文乱码问题 getQueryString()
String username = request.getParameter("username");
//2.1.decode转成字节数组:编码
byte[] bytes = username.getBytes("ISO-8859-1");
//2.2.字节数组转字符串:解码
username = new String(bytes, "utf-8");
//username = new String(username.getBytes("ISO-8859-1"), "utf-8");
System.out.println(username);
}
}
原理:
public class URLdemo {
public static void main(String[] args) throws UnsupportedEncodingException {
String username = "张三";
//浏览器用UTF-8编码
String encode = URLEncoder.encode(username,"utf-8");
//Tomcat用ISO-8859-1解码
String decode = URLDecoder.decode(encode,"ISO-8859-1");
//下面是我们要做的工作
//1.decode转成字节数组:编码
byte[] bytes = decode.getBytes("ISO-8859-1");
//2.字节数组转字符串:解码
String s = new String(bytes,"utf-8");
System.out.println(s);
}
}
1.3Request请求转发
@WebServlet("/req4_1")
public class RequestDemo4_1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//存数据
request.setAttribute("message", "hello");
//请求转发
request.getRequestDispatcher("/req4_2").forward(request, response);
}
}
@WebServlet("/req4_2")
public class RequestDemo4_2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取数据
Object o = request.getAttribute("message");
System.out.println(o);
}
}