初学SpringMVC之过滤器解决乱码

写个 login.jsp 页面

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

action 表示提交后跳转的地址

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

<%@ 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

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

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);  固定写法,必须要加,不然卡死

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 文件注册

  <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 的乱码过滤

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

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 15:28:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 15:28:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 15:28:03       58 阅读
  4. Python语言-面向对象

    2024-07-13 15:28:03       69 阅读

热门阅读

  1. Tg机器人开发:实现自动化图片审核功能

    2024-07-13 15:28:03       18 阅读
  2. Mojo AI编程语言(三)数据结构:高效数据处理

    2024-07-13 15:28:03       22 阅读
  3. postgresql创建只读权限的用户

    2024-07-13 15:28:03       17 阅读
  4. Oracle数据文件扩容

    2024-07-13 15:28:03       22 阅读
  5. vue3的服务端渲染实战项目(1)共12节

    2024-07-13 15:28:03       23 阅读
  6. ubuntu 24.04 安装telnet服务

    2024-07-13 15:28:03       21 阅读
  7. 【Docker Install SQL Server】

    2024-07-13 15:28:03       18 阅读
  8. 在鸿蒙开发中如何实现主题切换?

    2024-07-13 15:28:03       23 阅读