写个 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 {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {servletRequest.setCharacterEncoding("utf-8");servletResponse.setContentType("utf-8");//让链继续往下走,不然卡死filterChain.doFilter(servletRequest,servletResponse);}@Overridepublic 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> 路径必须是 /*,如果写 / 还是乱码