初学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> 路径必须是 /*,如果写 / 还是乱码

相关推荐
二哈赛车手3 小时前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
为何创造硅基生物3 小时前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言
吃好睡好便好3 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
栗子~~3 小时前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
星寂樱易李3 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
YDS8293 小时前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
仰泳之鹅4 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
之歆4 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
未若君雅裁5 小时前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis
cen__y5 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git