初学SpringMVC之过滤器解决乱码

写个 login.jsp 页面

提交的 method 一般为 post(写 get 不安全,地址栏上会显示)

action 表示提交后跳转的地址

(不直接写控制器里的路径是因为配置 Tomcat 时设置了前缀路径,默认走 http://localhost:8080

html 复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
    <form action="/annotation/demo" method="post">
		<input type="text" name="name"/>
		<input type="submit"/>
	</form>
</body>
</html>

写个控制器

因为提交是 post,所以控制器里也要用 @PostMapping

获取表单提交的值,需要在方法括号里也加上

java 复制代码
package com.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class Demo {
    @PostMapping("/demo")
    public String demo(Model model,String name){
        model.addAttribute("msg",name); //获取表单提交的值
        return "test"; //跳转到 /WEB-INF/jsp/test.jsp显示输入的值
    }
}

运行,地址栏后缀输入 login.jsp 回车,输入中文,提交后进入 test.jsp,出现乱码

在审查元素里可以看到,响应是乱码,说明在 Java 层面已经是乱码了

使用过滤器解决乱码

写个类实现 Filter 接口(注意是 servlet 下的 Filter)

重写方法,主要代码写在 doFilter

请求和响应都设置 utf-8

**filterChain.doFilter(servletRequest,servletResponse);**固定写法,必须要加,不然卡死

java 复制代码
package com.demo.filter;

import javax.servlet.*;
import java.io.IOException;

public class EncodingFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        servletRequest.setCharacterEncoding("utf-8");
        servletResponse.setContentType("utf-8");

        //让链继续往下走,不然卡死
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}

方法1:web.xml 文件注册

XML 复制代码
  <filter>
    <filter-name>encoding</filter-name>
    <filter-class>com.demo.filter.EncodingFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

方法2:配置 SpringMVC 的乱码过滤

XML 复制代码
  <!-- 配置SpringMVC的乱码过滤 -->
  <filter>
    <filter-name>encoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

<url-pattern> 路径必须是 /*,如果写 / 还是乱码

相关推荐
Jerry404_NotFound8 分钟前
工厂方法模式
java·开发语言·jvm·工厂方法模式
一起养小猫8 分钟前
【探索实战】Kurator统一流量治理深度实践:基于Istio的跨集群服务网格
java·云原生·istio
微风欲寻竹影9 分钟前
深入理解Java中的String
java·开发语言
Coder_Boy_10 分钟前
基于SpringAI的智能平台基座开发-(二)
java·人工智能·springboot·aiops·langchain4j
代码or搬砖17 分钟前
TransactionManager 详解、常见问题、解决方法
java·开发语言·spring
程序员佳佳20 分钟前
文章标题:彻底抛弃OpenAI官方Key?实测GPT-5.2与Banana Pro(Gemini 3):这才是开发者的终极红利!
开发语言·人工智能·python·gpt·ai作画·api·midjourney
挖矿大亨22 分钟前
C++中左移运算符重载
开发语言·c++
廋到被风吹走22 分钟前
【Spring】Spring Context 详细介绍
java·后端·spring
CoderCodingNo24 分钟前
【GESP】C++五级真题(数论-素数、贪心思想考点) luogu-B4050 [GESP202409 五级] 挑战怪物
开发语言·c++·算法
Kiyra37 分钟前
LinkedHashMap 源码阅读
java·开发语言·网络·人工智能·安全·阿里云·云计算