`

Spring MVC实战系列教程(2)--常用请求参数接收方式

 
阅读更多

      在MVC结构中,控制器组件主要的功能就是接收请求、处理请求、生成响应,接收客户端传来的请求参数的往往是控制器要做的第一件事,本节就介绍下spring mvc接收请求参数的几种常用方式。

     (一)直接用方法参数名映射客户端请求参数(也就是查询字符串querystring)
     与Struts2类似,spring mvc也可以通过按照与HTTP请求中的参数名相一致的java代码的的变量名字来自动接收参数,只不过struts2是用的属性(成员变量),spring mvc用的方法参数(局部变量)。看示例代码:
@Controller
@RequestMapping("/paramPassDemo")
public class ParamPassDemo {
    @RequestMapping("/queryString")
    public String test1(String userName,String userPass,int age){
        System.out.println("用户名为:"+userName+",密码为:"+userPass+"年龄为:"+age);
        return "index";
    }
 

里我们简单传入用户名、密码、年龄三个参数到spring mvc的控制器组件(注意,我们在类和方法上都是用了@RequestMapping注解,那么,该方法最终访问的URL就是类上标注的URL+方法上标注的URL)。这三个方法参数会自动接收同名的请求参数。比如,是用如下URL访问test1:

localhost:8088/HelloSpringMVC/paramPassDemo/queryStringWithSpecName?userName=张三&userPass=123&age=21

程序输出就是用户名为:张三,密码为:123,年龄为:21。这种方式实际上就是COC(约定优于配置)思想的体现,spring mvc框架通过反射自动匹配与请求参数名一致的方法参数名,并且对于非字符串类型的参数也可以自动转换(如int型的age),无需额外配置就可以方便地完成传参。

   那么,如果某个请求参数没有传过来怎么办?大家可以自行实验一下,将用户名或者密码不传,那么在控制器中接收到的就是null。如果年龄(age)不传呢?则会报一个500错误,说不能把age参数转换为null。说明,对于没有传过来的参数,spring mvc默认是以null作为默认值, 由于age类型是基本数据类型Int,则无法设为null。所以在spring mvc开发中不要使用基本数据类型作为方法参数,如果需要使用整型之类的参数应使用其对应的包装类,这样,如果请求参数不存在,spring mvc将自动为其设置为null,比如这个例子,age改为Integer类型即可,请大家自行实验。(当然这个场景中也可以通过设置@required标签将参数设为可选,这个以后我们再介绍)


引用类型的参数不存在,spring mvc会自动为其设置为null



 如果基本类型的参数不存在,则会抛出非法参数异常
 

 

(二)通过@RequestParam注解来辅助请求参数的接收

      如果客户端请求参数与你方法的参数名确实不一样,也可以用@RequestParam注解来具体指定映射哪一个请求参数,该注解写在方法参数前面,比如:

@RequestMapping("/queryStringWithSpecName")
    public String test2(@RequestParam("userName1") String userName,@RequestParam("userPass1")   String userPass){
        System.out.println("用户名为:"+userName+",密码为:"+userPass);
        return "index";
    }
注解里的字符串表示客户端传过来的参数name,也一样可以自动填充方法参数

 

(三)使用领域对象接收参数

     一个交互流程中有可能要接收的参数比较多,一个一个方法入餐写会比较麻烦,也不利于复用,spring mvc能不能像struts2一样把参数都作为业务属性封装在一个领域对象里呢,答案是肯定的,看下面的例子:

@RequestMapping("/queryStringWithDomainObj")
    public String test3(User user){
        System.out.println("用户名为:"+user.getUserName()+",密码为:"+user.getUserPass()+"年龄为:"+user.getAge());
        return "index";
    }

其中User类是自定义的一个领域对象,也可以叫值对象(VO),User中封装了userName, userPass等属性。那么在接收时spring mvc会利用反射自动将请求参数名同领域对象的属性名进行映射并填充值,即自动完成装箱。如果传值成功,在方法体里的领域对象不仅被实例化了,而且也拥有了响应属性值。user对象的结构如下:

public class User {
    private String userName;
    private String userPass;
    private Integer age;

 

    getters/setters...

}

 

(四)使用URL动态参数方式接收参数

     把请求参数作为URL一部分(不是querystring)传到控制器,又称为路径参数。比如,我们可以这样写:

   @RequestMapping("/user/query/{userId}")
    public String test4(@PathVariable("userId") Integer userId){
        System.out.println("用户id:"+userId);
        return "index";
    }

 这里的{userId}是个占位符,在实际请求时会被URL中相应部分替换,并且在方法参数中使用@PathVariable注解指定该参数要接收的占位符名称。比如实际访问URL为:

localhost:8088/HelloSpringMVC/user/query/101,此时占位符{userId}则被101替换,并且自动传递到标注了@PathVariable("userId")的参数,当然数据类型也自动转换了。这就是流行的restful风格的URL,请大家自行实验。

 

(五)使用HttpServletRequest接口获取参数
     如果你还是念念不忘原生的servlet,spring mvc也提供了传统的HttpServletRequest方式获取参数。

   @RequestMapping("/queryUser")
    public String test5(HttpServletRequest request){
        System.out.println("用户id:"+request.getParameter("userId"));
        return "index";
    }

这个方法直接将HttpServletRequest作为参数,访问时spring mvc会自动将该接口实例化,这样就可以用传统的request.getParameter的方式获取参数了。

 

总结:本节介绍了spring mvc框架获取客户端参数的几种常见方式,都非常简单,下节将接受spring mvc控制器向客户端生成响应的常用方式。本节完整的代码上传到附件中。


    

 

  • 大小: 4.3 KB
  • 大小: 71.7 KB
分享到:
评论

相关推荐

    Spring MVC实战系列教程(1)--Hello Spring MVC

    **Spring MVC实战系列教程(1)--Hello Spring MVC** 在本文中,我们将深入探讨Spring MVC框架,这是一个广泛使用的Java Web应用程序开发工具。Spring MVC是Spring框架的一个模块,它提供了MVC(模型-视图-控制器)...

    spring+MVC中文教程

    #### 三、Spring MVC实战 1. **配置Spring MVC** - 配置DispatcherServlet,它是Spring MVC的核心组件之一,负责接收HTTP请求并分发给合适的控制器处理。 - 定义视图解析器,如InternalResourceViewResolver等...

    Spring MVC简单样例

    Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建MVC(Model-View-...在后续的系列教程中,你可能会接触到更多高级特性和实战案例,如RESTful API设计、AJAX交互、国际化支持以及Spring Data JPA集成等。

    Spring3.0-MVC_简单自学教程(英文)

    Spring 3.0 MVC系列教程包括以下几个部分: 1. Spring 3.0 MVC框架简介:这部分将介绍Spring MVC的基本概念和架构。 2. 创建Spring 3.0 MVC的"Hello World"应用:通过一个简单的示例,帮助初学者理解如何搭建和运行...

    Spring MVC3。 最近研究

    在Spring 3.0 MVC系列教程中,我们可以逐步了解这个框架: 1. **介绍Spring 3.0 MVC框架**:这部分会概述Spring MVC的基本概念,包括它的工作原理和架构设计,以及如何开始搭建一个基本的Spring MVC项目。 2. **...

    spring MVC 3.0实战指南

    SpringMVC通过一系列的组件协作将Web请求转换为模型对象,然后将其传递给视图以生成响应。SpringMVC3.0实战指南详细地介绍了如何使用SpringMVC 3.0版本进行Web开发,该指南针对初学者提供了详尽的入门知识和实战指导...

    Spring技术栈构建完整java前后台团购网站java spring视频教程附源码

    在本教程中,我们主要使用的Spring技术栈包括了Spring Boot、Spring MVC、Spring Data JPA等核心组件。这些组件相互协作,为开发高效、可维护的企业级应用提供了强有力的支持。 1. **Spring Boot**: - 快速开发...

    Spring基础教程.pdf

    - DispatcherServlet是Spring MVC的入口点,负责接收请求并分发到相应的处理器。 5. **Spring Bean和配置**: - 在Spring中,一个Java对象被称为Bean,由Spring容器管理其生命周期和依赖关系。 - 配置Bean有两种...

    传智播客_Springmvc+Mybatis全套视频+代码+文档+教案

    根据提供的文件信息,我们可以推断出这是一套关于Spring MVC框架与MyBatis框架结合使用的教程资源包。接下来,我们将围绕这些关键词展开详细介绍,包括Spring MVC框架的基本概念、功能特性、工作原理及其与MyBatis...

    Java实训教程 Java软件开发实战 Java开发框架介绍 SpringMVC_5_常用注解 共22页.pptx

    ### Java实训教程知识点详解 #### 一、SpringMVC概述与环境搭建 ...以上是关于SpringMVC系列教程的主要知识点概述,通过学习这些内容,开发者可以更好地掌握SpringMVC框架的使用技巧,从而高效地进行Web应用开发。

    Phase4_Using-Spring-MVC

    本项目"Phase4_Using-Spring-MVC"可能是针对Spring MVC的学习或实战教程,包含了如何在实际开发中使用Spring MVC的步骤和技巧。 1. **Spring MVC 架构**:Spring MVC 的核心组件包括 DispatcherServlet(前端控制器...

    java web 实战宝典_JSP+Servlet+Struts_2+Hibernate+Spring+Ajax

    根据标题、描述和部分内容,知识点覆盖范围主要集中在Java Web开发领域,并且包括了JSP、Servlet、Ajax以及SSH框架(Struts 2、Spring、Hibernate)的技术整合和实战案例分析。 JSP(Java Server Pages)是一种动态...

    于洋spring

    2. **DispatcherServlet**:作为Spring MVC的前端控制器,负责接收请求并调度到相应的处理器。 3. **@Controller、@RequestMapping等注解**:简化了控制器类和方法的配置,通过注解可以快速关联HTTP请求和处理方法...

    SpringMVC项目实战教程

    它为开发者提供了强大的MVC(Model-View-Controller)设计模式支持,使得开发人员能够更高效、更模块化地处理Web请求和响应。在这个"SpringMVC项目实战教程"中,我们将深入探讨SpringMVC的核心概念和实践技巧。 ...

    【Java实战教程】08. 员工培训流程介绍及演示

    2. **Spring MVC**:作为Spring框架的一部分,Spring MVC用于构建Web应用程序。它将模型、视图和控制器分离,使得代码结构清晰,易于维护。在员工培训模块中,Spring MVC可以处理HTTP请求,管理用户界面与后端服务...

    郭克华J2EE高级框架实战教学视频01

    【郭克华J2EE高级框架实战教学视频01】是一个专注于J2EE开发的高级教程,由知名讲师郭克华主讲。本教程旨在帮助开发者深入理解和掌握J2EE平台上的高级框架技术,提升实际项目开发能力。通过观看这个视频系列,学员将...

    跟开涛学SpringMVC(3)DispatcherSer

    《跟开涛学SpringMVC(3)DispatcherServlet详解》是一份深入讲解Spring MVC核心组件DispatcherServlet的教程,旨在帮助Java开发者提升在Web应用开发中的技能。这份资料共计16页,涵盖了Spring MVC框架中...

    struts2教程我在培训时用的

    ### Struts2教程知识点梳理 #### 一、Struts2概述 **1.1 MVC简介** - **Model1与Model2** - **Model1**:早期的MVC模式,通常指的是Servlet+JSP的形式,其中JSP既充当视图也承担一定的控制逻辑。 - **Model2**...

    hibernate+struts+spring

    在SSH-Books这个压缩包中,可能包含了一系列关于SSH框架学习的书籍或教程资源。这些资料可能会涵盖以下内容: - **Struts基础**:Struts的工作原理,Action和ActionForm,配置文件的解析,以及Struts的拦截器。 - *...

Global site tag (gtag.js) - Google Analytics