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>