1 乱码问题 25
// get请求在请求行上提交数据。
// post请求在请求体中提交数据。
// 设置请求体的字符集。(显然这个方法是处理POST请求的乱码问题。这种方式并不能解决get请求的乱码问题。)
// Tomcat10之后,request请求体当中的字符集默认就是UTF-8,不需要设置字符集,不会出现乱码问题。
// Tomcat9前(包括9在内),如果前端请求体提交的是中文,后端获取之后出现乱码,怎么解决这个乱码?执行以下代码。
request.setCharacterEncoding("UTF-8");
1.1 在Tomcat9之前(包括9),响应中文也是有乱码的,怎么解决这个响应的乱码? 25
response.setContentType("text/html;charset=UTF-8");
// 在Tomcat10之后,包括10在内,响应中文的时候就不在出现乱码问题了。以上代码就不需要设置UTF-8了。
// 注意一个细节
// 在Tomcat10包括10在内之后的版本,中文将不再出现乱码。(这也体现了中文地位的提升。)
1.2 get请求乱码问题怎么解决?25
// get请求发送的时候,数据是在请求行上提交的,不是在请求体当中提交的。
// get请求乱码怎么解决
// 方案:修改CATALINA_HOME/conf/server.xml配置文件
// 注意:从Tomcat8之后,URIEncoding的默认值就是UTF-8,所以GET请求也没有乱码问题了。
代码在com.bjpowernode.javaweb.servlet
RequestTestServlet
package com.bjpowernode.javaweb.servlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
//request对象的常用方法 24-25
public class RequestTestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//获取客户端的ip地址
String remoteAddr = request.getRemoteAddr();
System.out.println("客户端的ip地址="+remoteAddr);//客户端的ip地址=127.0.0.1
}
//设置请求体的字符集。(显然这个方法是处理POST请求的乱码问题。
// 这种方式并不能解决get请求的乱码问题。)24-25
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置请求体的字符集
//request.setCharacterEncoding("UTF-8");
//响应中文也是有乱码的,怎么解决这个响应的乱码? 25
// response.setContentType("text/html;charset=UTF-8");
//这是POST请求
String username = request.getParameter("username");
//输出这个用户提交的用户名
System.out.println(username);
}
}
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>user register</title>
</head>
<body>
<h1>user register</h1>
<form action="/servlet09/testRequest" method="post">
username:<input type="text" name="username"><br>
<br>
<input type="submit" value="register">
</form>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 这是RequestTestServlet的配置-->
<servlet>
<servlet-name>requestTest</servlet-name>
<servlet-class>com.bjpowernode.javaweb.servlet.RequestTestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>requestTest</servlet-name>
<url-pattern>/testRequest</url-pattern>
</servlet-mapping>
</web-app>
2. HttpServletRequest接口的其他常用方法:24-25
// 获取客户端的IP地址
String remoteAddr = request.getRemoteAddr();
// 获取应用的根路径
String contextPath = request.getContextPath();
// 获取请求方式
String method = request.getMethod();
// 获取请求的URI
String uri = request.getRequestURI(); // /aaa/testRequest
// 获取servlet path
String servletPath = request.getServletPath(); // /testRequest
代码在 com.bjpowernode.javaweb.servlet
MethodTest
package com.bjpowernode.javaweb.servlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class MethodTest extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//获取客户端的ip地址
String remoteAddr = request.getRemoteAddr();
System.out.println("客户端的ip地址="+remoteAddr);//客户端的ip地址=127.0.0.1
// 获取应用的根路径,这个方法用的较多,因为它可以动态的获取应用的根路径
String contextPath = request.getContextPath();
System.out.println("应用的根路径:"+contextPath);// 应用的根路径:/servlet09
// 获取请求方式
String method = request.getMethod();
System.out.println("请求方式"+method);//请求方式GET
// 获取请求的URI
String requestURI = request.getRequestURI();
System.out.println("请求的URI="+requestURI);//请求的URI=/servlet09/test
// 获取servlet path
String servletPath = request.getServletPath();
System.out.println("获取servlet path="+servletPath);//获取servlet path=/test
}
}
web.xml
<!-- 这是MethodTest的配置-->
<servlet>
<servlet-name>methodTest</servlet-name>
<servlet-class>com.bjpowernode.javaweb.servlet.MethodTest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>methodTest</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>