JavaWeb --- filtrer la solution globale déformée

Solution globale déformée JavaWeb-filter

  • Définissez le codage de la demande avant d'obtenir les paramètres
  • Définissez le codage de la réponse avant de répondre au navigateur

Code de cas

GetFormServlet

package com.lbl.servlet;

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;

@WebServlet("/get_form")
public class GetFormServlet 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.setCharacterEncoding("UTF-8");
        //1:获取表单数据
        String username = request.getParameter("username");
        System.out.println("username:"+username);
        //2:响应
//        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("收到数据啦!");
    }
}

form.jsp

<%--
  Created by IntelliJ IDEA.
  User: Carlos
  Date: 2020/9/16
  Time: 11:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/get_form" method="post">
    用户名:<input type="text" name="username"/>
    <input type="submit" value="提交"/>
</form>

</body>
</html>

résultat courant:

Insérez la description de l'image ici

Ouvrez response.setContentType("text/html;charset=UTF-8");le commentaire de cette ligne dans GetFormServlet

résultat courant:

Insérez la description de l'image ici

Voici la clé, tant que la requête qualifiée sera interceptée par le filtre, plusieurs requêtes de servlet, après avoir été interceptées, définissent d'abord le codage, puis remettez-le au servlet

CharSetFilter

package com.lbl.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

@WebFilter("/*")
public class CharSetFilter implements Filter {
    
    
    public void destroy() {
    
    
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    
    
        //1:解决请求参数乱码
        HttpServletRequest request = (HttpServletRequest)req;
        String method = request.getMethod();

        if(method.equals("POST")) {
    
    
            req.setCharacterEncoding("UTF-8");
        }
        resp.setContentType("text/html;charset=UTF-8");
        chain.doFilter(req, resp);

    }

    public void init(FilterConfig config) throws ServletException {
    
    

    }

}

Commentez maintenantresponse.setContentType("text/html;charset=UTF-8");

Insérez la description de l'image ici

filtre - Analyse globale brouillée

  • Exécution interne de la méthode doFilter
  • Exécutez d'abord le code avant doChain, puis exécutez la méthode doChain
  • Puis exécutez doGet / doPost de Servlet
  • Enfin exécutez le code après doChain
    Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/qq_37924905/article/details/108618793
conseillé
Classement