上一篇我们学习了注解式开发的配置方式并写了一个小 Demo 跑起来. 今天我们来学习注解开发的参数接收. 处理器方法中的常用参数有五类, 这些参数会在系统调用时由系统自动赋值, 即程序员可以在方法中直接使用. 具体如下:
- HttpServletRequest
- HttpServletResponse
- HttpSession
4: 用户承载数据的 Model
5: 请求中所携带的请求参数
在进行参数接收之前我们先在 / webRoot/index.jsp 下添加如下内容:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <HTML>
- <head>
- <title>
- My JSP 'index.jsp' starting page
- </title>
- </head>
- <body>
- <form action="${pageContext.request.contextPath }/user/register.do">
- 姓名:
- <input name="name" type="text" />
- 年龄:
- <input name="age" type="text" />
- <input type="submit" value="注册" />
- </form>
- </body>
- </HTML>
在 / Web-INF/jsp / 下建立 success.jsp, 内容如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <HTML>
- <head>
- <title>SpringMVC1</title>
- </head>
- <body>
姓名:${name }<br />
年龄:${age }
</body> </HTML>
接下来我们着重来看在 Controller 中如何进行参数的接收.
一, 逐个接收
在 cn.wechatbao.controller 包下新建 UserController, 内容如下:
package cn.wechatbao.controller; import org.springframework.stereotype.Controller; import org.springframework.Web.bind.annotation.RequestMapping; import org.springframework.Web.servlet.ModelAndView; @Controller @RequestMapping("/user") public class UserController { @RequestMapping("/register.do") public ModelAndView register(String name,int age) throws Exception { ModelAndView mv = new ModelAndView(); mv.addObject("name", name); mv.addObject("age", age); mv.setViewName("/WEB-INF/jsp/success.jsp"); return mv; } }
注意: 当程序写到这里的时候, 功能基本就没有什么问题了, 但是有一个小 bug, 就是前台传中文姓名的时候, 会乱码. 当然这个问题我们必须要考虑. 只是这个问题由 SpringMVC 帮我早就考虑到了, 所以我们只需要在 Web.xml 中配置一个过滤器就 OK 了.
二, 解决中文乱码
上面说了作为优秀的大型框架, SpringMVC 已经为我们考虑了统一编码的问题. 所以我们直接在 Web.xml 中配置使用就 OK 了, 具体配置方式如下:
<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> <init-param> <param-name>forceRequestEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
有的朋友可能看到这里的时候, 已经迫不及待的试了一下. 但是发现可能还是乱码. 不要着急. 这是由于 tomcat 已经配置了编码格式, server.xml 里如果不配置编码格式, 则默认是 iso-8859-1, 于是我们来修改 tomcat 的 conf/server.xml 文件, 如下:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" />
修改为:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
三, 校正请求参数名
假设前台的 input 的 name 为 personName, 而后台 Controller 需要接收的参数名称为 name, 这时我们就需要用另一个注解来校正请求参数名. 如下
@RequestMapping("/register.do") public ModelAndView register(@RequestParam("personName") String name,int age) throws Exception { System.out.println("name="+name); System.out.println("age="+age); ModelAndView mv = new ModelAndView(); mv.addObject("name", name); mv.addObject("age", age); mv.setViewName("/WEB-INF/jsp/success.jsp"); return mv; }
注意:@RequestParam("personName") String name 该写法就是将前台的 personName 和后台的 name 进行一个映射. 使之对应起来.
来源: https://www.cnblogs.com/xinhudong/p/10528022.html