单个接收表单提交的参数
在实际开发中通过会在spring MVC的Controller里面接收表单提交过来的参数,这块代码该怎么去编写呢?
示例:
编写一个带有表单的html:
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/regist1.do" method="post">
姓名:<input type="text" name="username"><br>
年龄:<input type="text" name="age"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
之后创建一个controller来接收这个表单提交的值:
package com.monkey1024.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class RegistController {
@RequestMapping("/regist1.do")
public ModelAndView regist1(String username, int age) throws Exception{
ModelAndView mv = new ModelAndView();
mv.addObject("username", username);
mv.addObject("age", age);
mv.setViewName("result");
return mv;
}
}
创建result.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
用户名:${username}
<br>
年龄:${age}
</body>
</html>
在上面的controller中,我们在regist1方法后面的参数列表中写上了两个参数username和age,因为这两个参数与表单中input中的name一致,所以spring MVC会自动为其赋值,通过这种方式就可以在controller中获取表单提价的数据了。
此时你可能会发现一个问题,在之前我们写的controller中的方法参数列表里面我们都写上了request和response,而这里却没有写,其实这不会影响spring mvc的工作,也就是说在controller的方法里面,我们可以写多个参数,也可以一个都不写,不过spring mvc只会自动为以下五个参数进行自动赋值:
- HttpServletRequest
- HttpServletResponse
- HttpSession
- 请求携带的参数
- 用于承载数据的Model
当前示例其实就是spring mvc将请求携带参数进行赋值,这样子我就可以直接获取表单提交的数据了。其他的以后在介绍。
获取请求参数乱码
在上面的示例中,倘若你输入了中文,那很有可能出现乱码问题,我们可以使用spring MVC为开发者提供的CharacterEncodingFilter来解决乱码问题,这个其实就是一个过滤器。我们需要在web.xml文件中进行配置,最好将其设置在其他过滤器之前,因为过滤器是按照web.xml中的顺序执行的:
<!--字符编码过滤器-->
<filter>
<filter-name>characterEncodingFilter</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>
<!--强制指定字符编码,即如果在request中指定了字符编码,那么也会为其强制指定当前设置的字符编码-->
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这里可以通过springmvc的源码中看到forceEncoding如果设置为true的话,那么不论你是否在request中设置了字符编码,spring mvc都会强制将其字符编码设置为我们在web.xml文件中写的字符编码。