Request继承体系
Request获取请求数据
1.请求行:
package com.itheima.web;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Description: TODO
* @author: scott
* @date: 2022年02月21日 13:50
*/
@WebServlet("/req1")
public class RequestDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//get
String method = req.getMethod();
System.out.println(method);
//获取虚拟目录
String contextPath = req.getContextPath();
System.out.println(contextPath);
//获取URL
StringBuffer url =req.getRequestURL();
System.out.println(url.toString());
//获取URI
String uri = req.getRequestURI();
System.out.println(uri);
//获取请求参数
String queryString = req.getQueryString();
System.out.println(queryString);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
访问
http://localhost:8080/web-demo/req1?username=zhangsan&password=123
控制台输出结果:
2.请求头:
String getHeader(String name):根据请求头名称,获取值
//user-agent : 浏览器版本信息
String agent = req.getHeader("user-agent");
System.out.println(agent);
3.请求体:
ServletInputStream getInputStream():获取字节输入流
BufferedReader getReader():获取字符输入流
req.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/web-demo/req1" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit">
</form>
</body>
</html>
RequsetDemo.java
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取字符输入流
BufferedReader br = req.getReader();
//读取数据
String line = br.readLine();
System.out.println(line);
}
访问http://localhost:8080/web-demo/req1
结果如图
Request通用方式获取请求参数
req.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/web-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">爬山<br>
<input type="submit">
</form>
</body>
</html>
RequestDemo2.java
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/web-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">爬山<br>
<input type="submit">
</form>
</body>
</html>
尽量使用POST请求,因为POST请求处理中文乱码问题很容易。
POST请求参数解决中文乱码问题
req.setCharacterEncoding("UTF-8");
GET请求需要手动把乱码数据转换成字节数据,再将字节数组转换为字符串
代码如下:
package com.itheima.web;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Map;
/**
* @Description: TODO
* @author: scott
* @date: 2022年02月21日 13:50
*/
@WebServlet("/req2")
public class RequestDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//req.setCharacterEncoding("UTF-8");
String username =req.getParameter("username");
//解决乱码前
System.out.println(username);
//解决乱码
byte[] bytes = username.getBytes(StandardCharsets.ISO_8859_1);
username= new String(bytes,StandardCharsets.UTF_8);
//解决乱码后
System.out.println(username);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}