`

SpringMVC(四)_功能处理方法的映射

阅读更多

       前言:本文主要介绍控制器上的功能处理方法映射,包括URL路径映射,请求方法映射,请求参数映射,请求头映射。

本篇文章重点关注以下问题:

  • 简述Http请求信息
  • URL路径映射限定
  • 请求方法映射限定
  • 请求参数映射限定
  • 请求头映射限定

1. HTTP请求信息

        Http请求信息主要包括五部分信息

  1. 请求方法:如GET、POST等,表示提交方式;
  2. URL:请求的地址信息;
  3. 协议及版本
  4. 请求头信息:包括Cookie等;
  5. 请求内容:请求的内容或数据,如表单提交时的参数数据、URL请求参数(?abc=123 ?后边的)等。

       分析上述五部分信息,可以看到1,2,4,5是可变的,因此可以将这些信息进行请求到处理器的功能处理方法的映射,因此请求的映射分为如下几种

  • URL路径映射:使用URL映射请求到处理器的功能处理方法;
  • 请求方法映射限定:如限定功能处理方法只处理GET请求;
  • 请求参数映射限定:如限定只处理包含“abc”请求参数的请求;
  • 请求头映射限定:如限定只处理“Accept=application/json”的请求。

 2. 功能处理方法映射

         功能处理方法映射使用注解:@RequestMapping。@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。其有六个属性

属性 作用
value 指定请求的实际地址,指定的地址可以是URI Template 模式。
method 指定请求的method类型, GET、POST、PUT、DELETE等。
params 指定request中必须包含某些参数值时,才让该方法处理。
headers 指定request中必须包含某些指定的header值时,才能让该方法处理请求。
consumes 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

 

2.1 URL路径映射

        @RequestMapping注解的value属性指明URL值,其值有三种类型

  1. 普通URL路径映射:指定为普通的具体值;
  2. 可以指定为含有某变量的一类值(URI Template Patterns with Path Variables);
  3. 可以指定为含正则表达式的一类值( URI Template Patterns with Regular Expressions);

2.1.1 普通URL路径映射         

         这种映射类型很简单,需要说明的是多个URL路径可以映射到同一个处理器的功能处理方法的情况(或的关系):

@RequestMapping(value={"/test1", "/user/create"})

2.1.2 URI 模板模式映射

         第二种类型样例如下,{ownerId}为占位符,可通过@PathVariable提取URI模板模式中的{×××}中的×××变量。

@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
public String findOwner(@PathVariable String ownerId, Model model) {
    Owner owner = ownerService.findOwner(ownerId);  
    model.addAttribute("owner", owner);  
    return "displayOwner"; 
}
 

2.1.3 正则表达式风格的URL路径映射

        从Spring3.0 开始支持正则表达式风格的URL路径映射,格式为{变量名:正则表达式},可以通过@PathVariable提取模式中的{×××:正则表达式匹配的值}中的×××变量。

@RequestMapping(value="/products/{categoryCode:\\d+}-{pageNumber:\\d+}")   

        上述URL可以匹配“/products/123-1”,但不能匹配“/products/abc-1”,这样可以设计更加严格的规则。

        正则表达式风格的URL路径映射是一种特殊的URI模板模式映射:URI模板模式映射是{userId},不能指定模板变量的数据类型,如是数字还是字符串;正则表达式风格的URL路径映射,可以指定模板变量的数据类型,可以将规则写的相当复杂。

2.1.4 Ant 风格的URL

        Ant 风格资源地址支持 3 种匹配符:

  • ?:匹配文件名中的一个字符
  • *:匹配文件名中的任意字符
  • **:** 匹配多层路径
        @RequestMapping 还支持 Ant 风格的 URL:
/user/*/createUser: 匹配
    ==> /user/aaa/createUser、/user/bbb/createUser 等 URL
/user/**/createUser: 匹配
    ==> /user/createUser、/user/aaa/bbb/createUser 等 URL
/user/createUser??: 匹配
    ==> /user/createUseraa、/user/createUserbb 等 URL

 

2.2 请求方法映射限定

        @RequestMapping注解的method属性指明请求方法,包括以下8种,GET、POST是我们开发中常见的,DELETE、PUT在REST风格中较为常见,后续文章也会讲解SpringMVC对RESTful风格的支持。

 

public enum RequestMethod {
	GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
}
         样例如下,即请求方法可以是GET 或POST。

 

@RequestMapping(value="/methodOr", method = {RequestMethod.POST, RequestMethod.GET})
提示:
1、一般浏览器只支持GET、POST请求方法,如想通过浏览器发送PUT、DELETE 等请求方法,介可以在前台添加隐含域实现,后续章节介绍。
2、除了GET、POST,还有HEAD、OPTIONS、PUT、DELETE、TRACE、PATCH。
3、DispatcherServlet默认开启对GET、POST、PUT、DELETE、HEAD 的支持;
4、如果需要支持OPTIONS、TRACE,请添加DispatcherServlet 在web.xml 的初始化参数:dispatchOptionsRequest 和dispatchTraceRequest 为true。

 2.3 请求参数数据映射限定

         @RequestMapping注解的params属性指明请求参数映射的限制,params和headers一样,支持简单的表达式:

  • param1: 表示请求必须包含名为 param1 的请求参数;
  • !param1: 表示请求不能包含名为 param1 的请求参数;
  • param1 != value1: 表示请求包含名为 param1 的请求参数,但其–值不能为 value1;
  • {“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2的两个请求参数,且 param1 参数的值必须为 value1;
        样例如下,params属性指明:仅处理请求中包含了名为“myParam”,值为“myValue”的请求;
@Controller
@RequestMapping("/owners/{ownerId}")
public class RelativePathUriTemplateController {

    @RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, params="myParam=myValue")
    public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {    
        // implementation omitted
    }
}
 

2.4 请求头数据映射限定

         @RequestMapping注解的headers属性指明请求头数据映射的限制,和params一样,支持简单的表达式:

  • param1: 表示请求头必须包含名为 param1 的请求头参数;
  • !param1: 表示请求头不能包含名为 param1 的请求头参数;
  • param1 != value1: 表示请求头包含名为 param1 的请求头参数,但其值不能为 value1;
  • {“param1=value1”, “param2”}: 请求头必须包含名为 param1 和param2的两个请求头参数,且 param1 参数的值必须为 value1;
         样例如下,仅处理request的header中包含了指定“Refer”请求头和对应值为“http://www.ifeng.com/”的请求;
@Controller
@RequestMapping("/owners/{ownerId}")
public class RelativePathUriTemplateController {

    @RequestMapping(value = "/pets", method = RequestMethod.GET, headers="Referer=http://www.ifeng.com/")
    public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {    
        // implementation omitted
    }
}
 

2.5 生产者、消费者限定

         @RequestMapping注解的consumes属性指明功能处理方法能消费的媒体类型(其通过请求头的“Content-Type”来判断),此方式等价于使用@RequestMapping的“headers = 'Content-Type=application/json'”,但更为简明。

         cousumes的样例如下,方法仅处理request Content-Type为“application/json”类型的请求:

@Controller
@RequestMapping(value = "/pets", method = RequestMethod.POST, consumes="application/json")
public void addPet(@RequestBody Pet pet, Model model) {    
    // implementation omitted
}

         @RequestMapping注解的produces属性指明功能处理方法能产生的媒体类型(其根据请求头中的Accept进行匹配),此方式等价于使用@RequestMapping的“headers = 'Accept=application/json'”,但更为简明。

         produces的样例如下,方法仅处理request Content-Type为“application/json”类型的请求:

@Controller
@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, produces="application/json")
@ResponseBody
public Pet getPet(@PathVariable String petId, Model model) {    
    // implementation omitted
}

         

 

代码下载来源:http://super-wangj.iteye.com/blog/2388430

 
  • 大小: 135.5 KB
分享到:
评论

相关推荐

    SpringMVC Demo_java_springmvc_DEMO_

    6. **数据绑定和验证**:SpringMVC提供数据绑定功能,可以直接将请求参数绑定到Controller方法的参数上。此外,还可以使用`@Valid`注解和JSR-303/JSR-349 Bean Validation进行表单验证。 7. **异常处理**:...

    SpringMVC PPT_springmvc_

    SpringMVC 作为 Spring 框架的一部分,提供了处理 HTTP 请求和响应的强大功能。它通过解耦控制器、业务逻辑和服务层,使得开发者能够更加专注于应用的核心功能,而不是繁琐的 web 层实现。SpringMVC 的主要组件包括 ...

    springmvc4_springmvc_mainlyyb8_

    `@RequestBody` 和 `@ResponseBody` 注解分别用于将请求体映射为方法参数,以及将方法返回值转换为响应体。 11. **Tiles 和 Freemarker 视图技术** 除了 JSP,Spring MVC 还支持 Tiles 和 Freemarker 等模板引擎,...

    SSM.zip_mybatis_spring_springMVC mybatis_springmvc_ssm

    SpringMVC通过DispatcherServlet接收请求,然后根据请求的URL和方法调用相应的Controller。Controller可以利用Spring的DI特性来注入MyBatis的SqlSessionTemplate或SqlSessionFactory,从而执行SQL操作。MyBatis的...

    mc.rar_springMVC mybatis_springmvc

    SpringMVC允许开发者将业务逻辑、数据处理和用户界面分离,从而实现松耦合和更好的代码组织。其主要特性包括: 1. **依赖注入(Dependency Injection, DI)**:SpringMVC通过DI帮助管理对象之间的关系,使得代码更...

    springMvc_SpringMvc入门_

    5. **@RequestMapping**:此注解用于将请求 URL 映射到处理方法。可以用于类级别或方法级别,方法级别的映射优先级更高。 6. **模型与视图**:在 Controller 方法中,我们可以创建 Model 对象,通过 `ModelMap` 或 ...

    springMVC12.rar_springMvc 注册_springmvc

    在本压缩包 "springMVC12.rar" 中,我们主要探讨的是如何在 Spring MVC 中实现用户注册功能,包括增加、删除和更新用户。 首先,让我们从 MVC 模式开始。MVC 是一种软件设计模式,用于分离应用程序的数据模型、用户...

    springMVC_Mybatis_jar

    SpringMVC是Spring框架的一部分,主要用于构建前端控制器,而Mybatis是一个优秀的持久层框架,处理数据库操作。当这两个框架整合在一起时,可以实现高效的MVC(Model-View-Controller)架构和灵活的数据访问。 1. *...

    SpringMVC3.0_Demo

    在SpringMVC 3.0版本中,引入了许多增强功能和优化,使得开发更加高效且灵活。这个名为"SpringMVC3.0_Demo"的压缩包文件很可能是为了展示如何配置和使用SpringMVC 3.0进行Web应用开发,包含的子文件"spring3"和"jpa...

    MVC.rar_SpringMVC Struts_java MVC_mvc_spring-aspects-3.2.2_spri

    Hibernate是Java领域的一款对象关系映射(ORM)工具,它简化了数据库操作,使得开发者可以使用面向对象的方式处理数据。在SpringMVC中,Spring的Hibernate支持可以帮助开发者更方便地进行事务管理,同时提供了一种...

    SSM.rar_springmvc SSM_ssm

    5. **Controller类**:SpringMVC的控制器,处理HTTP请求并调用Service层的方法,返回视图或JSON响应。 这个示例源码可能包含了创建一个简单SSM应用的步骤,例如: 1. **初始化环境**:设置JDK、Maven或Gradle、IDE...

    SpringMVC_Upload.rar_shipvu7_springmvc_springmvc upload

    在本文中,我们将深入探讨如何使用Spring MVC框架实现多文件上传功能,并且如何处理返回值以及与数据库交互。Spring MVC是Java开发中的一个流行MVC(Model-View-Controller)框架,它为构建Web应用程序提供了强大的...

    Java实训教程 Java软件开发实战 Java开发框架介绍 SpringMVC_8_标签库 共39页.pptx

    **SpringMVC_9_文件上传**(共9页):这部分内容介绍了如何使用SpringMVC实现文件上传功能,包括文件上传的原理、配置MultipartResolver等组件、处理上传文件的控制器方法等。 **SpringMVC_10_拦截器**(共7页):...

    springmvc_day01_01_start.zip

    方法返回的"hello"字符串会被ViewResolver解析,通常映射到一个视图文件,如jsp或ftl。 接下来,我们需要配置SpringMVC的DispatcherServlet和相关bean。在web.xml中,我们添加DispatcherServlet的配置,指定其初始...

    springmvc_mybatis1110

    它简化了Web应用的开发,通过DispatcherServlet进行请求分发,HandlerMapping处理映射,ModelAndView构建模型和视图,ViewResolver解析视图,以及一系列拦截器和异常处理器。 1. 请求处理流程:客户端发起请求到达...

    springmvc19_day01_02.zip

    SpringMVC提供了模型数据绑定功能,如`@ModelAttribute`,可以将请求参数自动绑定到方法参数。视图解析则由`ViewResolver`完成,通过`@ResponseBody`或视图解析器如`InternalResourceViewResolver`,将处理结果转化...

    SSM.zip_mybatis_spring springmvc _ssm功能实现_ssm框架实站

    SpringMVC的servlet配置,MyBatis的mybatis-config.xml),实体类(Entity),Mapper接口和XML映射文件,以及Controller和服务层(Service)的Java代码,可能还有测试类(Test)来验证功能是否正常工作。 通过实践...

    springmvc_day01

    处理器映射器负责找到处理特定请求的控制器方法,而处理器适配器则执行这些方法。使用注解驱动后,我们可以省去这些繁琐的配置,让框架自动管理它们。 1. `@Controller` 注解:标记一个类作为 Spring MVC 的控制器...

    mis.rar_MyBeanUtils _hibernate @Finder_mis_springmvc_springmvc h

    - 在SpringMVC的Controller中,通过依赖注入获取Service层对象,调用其方法进行业务处理,Service层则通过Hibernate进行数据库操作。 通过以上整合,项目能够实现高效的数据存取和业务逻辑处理,同时保持代码的整洁...

    ssmbuild_springmvc_spring_bootstrap_mybatis_

    在该项目中,开发者可能创建了多个控制器类来处理不同的用户请求,通过注解如@RequestMapping来定义URL映射。Spring MVC的核心组件包括DispatcherServlet、ModelAndView、HandlerMapping和ViewResolver等,它们协同...

Global site tag (gtag.js) - Google Analytics