四SpringMVC——处理器方法的参数&解决中文乱码

Posted 上善若水

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四SpringMVC——处理器方法的参数&解决中文乱码相关的知识,希望对你有一定的参考价值。

一、处理器方法的参数

处理器方法可以包含以下四类参数,这些参数会在系统调用时由系统自动赋值,即程序员可在方法内直接使用。

  • HttpServletRequest
  • HttpServletResponse
  • HttpSession
  • 请求中所携带的请求参数

1.1、逐个参数接收

只要保证请求参数名与该请求处理方法的参数名相同即可。
1.修改index.jsp

<form action="/user/register.do" method="POST">
    姓名:<input type="text" name="name" /><br/>
    年龄:<input type="text" name="age" /><br/>
    <input type="submit" value="注册">
</form>

2.修改处理器类MyController

@Controller
@RequestMapping("/user")
public class MyController {
    @RequestMapping(value = "/register.do")
    public ModelAndView register(String name,int age){
        ModelAndView mv = new ModelAndView();
        // 相当于request.setAttribute("myname",name);
        mv.addObject("myname",name);
        mv.addObject("myage",age);
        mv.setViewName("show");
        return mv;
    }
}

3.添加show页面
在/WEB-INF/view下添加show.jsp页面

<div>
    name = ${myname}<br/>
    age = ${myage}
</div>

1.2、请求参数中文乱码问题

对于前面所接收的请求参数,若含有中文,则会出现中文乱码问题。spring对于请求参数中的中文乱码问题,给出了专门的字符集过滤器:spring-web-5.2.5.RELEASE.jar 的
org.springframework.web.filter 包下的 CharacterEncodingFilter 类。
在这里插入图片描述
(1)解决方案
在 web.xml 中注册字符集过滤器,即可解决 Spring 的请求参数的中文乱码问题。不过,
最好将该过滤器注册在其它过滤器之前。因为过滤器的执行是按照其注册顺序进行的。
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <!--  注册字符集过滤器:解决POST请求乱码的问题  -->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <!--   spring-web.jar     -->
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <!--   指定字符集     -->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <!--    强制request使用字符集encoding     -->
        <init-param>
            <param-name>forceRequestEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <!--    强制response使用字符集encoding    -->
        <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

(2)源码分析
字符集设置核心方法:
在这里插入图片描述

以上是关于四SpringMVC——处理器方法的参数&解决中文乱码的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVC--请求传参总结

SpringMVC— “SpringMVC获取请求参数的方法”

SpringMVC— “SpringMVC获取请求参数的方法”

SpringMVC— “SpringMVC获取请求参数的方法”

SpringMVC— “SpringMVC获取请求参数的方法”

SpringMVC_[2]处理器参数的获取