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

相关推荐
你的保护色5 分钟前
多AS互联BGP4综合实验设计
java
某不知名網友24 分钟前
ROS2进阶:服务通信、自定义SRV接口、参数服务器与基于服务的参数通信详解
java·开发语言·microsoft
Wang's Blog34 分钟前
Java 项目实战: 交友项目 - MongoDB 入门:体系结构和命令行操作
java·mongodb·交友
小溪学编程35 分钟前
将 Bean 放入 Spring 容器中的方式有哪些?
java·后端·spring
java_nnnn39 分钟前
LeetCode刷题滑动窗口(水果成篮+找到字符串中所有字母的异位词)Java
java·开发语言·leetcode
用户37215742613541 分钟前
Java 读取、修改和清空 PDF 文档属性(元数据)
java
SL_staff44 分钟前
从‘改一行代码等三天’到‘改完即生效’:实施工程师的逻辑引擎避坑手记
java·产品·全栈
qetfw44 分钟前
Bash 字符串处理:参数展开、序列与脚本执行方式
linux·开发语言·chrome·bash
小羊没烦恼!1 小时前
异步编程:线程概述及使用
java·开发语言·mysql·算法·c#
hhwyqwqhhwy1 小时前
设备树之 provider 和 consumer
java·linux·前端