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

相关推荐
lazy★boy17 分钟前
DDD与MVC扩展能力对比
mvc·ddd
编程咕咕gu-19 分钟前
从零开始玩python--python版植物大战僵尸来袭
开发语言·python·python基础·pygame·python教程
柏木乃一25 分钟前
双向链表增删改查的模拟实现
开发语言·数据结构·算法·链表
小周不摆烂1 小时前
Java Web从入门到精通:全面探索与实战(一)
java
cherryc_1 小时前
JavaSE基础——第六章 类与对象(二)
java·开发语言
快来卷java1 小时前
JVM虚拟机篇(三):JVM运行时数据区与方法区详解
java·jvm·mysql
whltaoin2 小时前
Java实现N皇后问题的双路径探索:递归回溯与迭代回溯算法详解
java·算法
nlog3n5 小时前
Java策略模式详解
java·bash·策略模式
Qlittleboy5 小时前
windows如何安装wkhtmltoimage 给PHP使用根据HTML生成图片
开发语言·windows·php
水w6 小时前
【Android Studio】解决报错问题Algorithm HmacPBESHA256 not available
android·开发语言·android studio