《SpringMVC从入门到放肆》九、SpringMVC注解式开发(简单参数接收)

释放双眼,带上耳机,听听看~!

上一篇我们学习了注解式开发的配置方式并写了一个小Demo跑起来。今天我们来学习注解开发的参数接收。处理器方法中的常用参数有五类,这些参数会在系统调用时由系统自动赋值,即程序员可以在方法中直接使用。具体如下:

1:HttpServletRequest

2:HttpServletResponse

3: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进行一个映射。使之对应起来。

给TA打赏
共{{data.count}}人
人已打赏
站长资讯

我的小纠结,技术与认知哪个更重要?

2020-11-9 3:46:12

站长资讯

零拷贝-zero copy

2020-11-9 3:46:14

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索