zoukankan      html  css  js  c++  java
  • 《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进行一个映射。使之对应起来。

  • 相关阅读:
    c++ cout、cin、endl
    c++ namespace
    找到小镇的法官
    整数反转
    c++stack类的用法
    栈应用:最小栈(第二题)
    栈的压入、弹出序列(第一题)
    c++中vector类的用法
    Android 面试常问七道题
    传感器实现仿微信摇一摇功能
  • 原文地址:https://www.cnblogs.com/xinhudong/p/10528022.html
Copyright © 2011-2022 走看看