前言:本文主要介绍控制器上的功能处理方法映射,包括URL路径映射,请求方法映射,请求参数映射,请求头映射。
本篇文章重点关注以下问题:
- 简述Http请求信息
- URL路径映射限定
- 请求方法映射限定
- 请求参数映射限定
- 请求头映射限定
1. HTTP请求信息
Http请求信息主要包括五部分信息:
- 请求方法:如GET、POST等,表示提交方式;
- URL:请求的地址信息;
- 协议及版本;
- 请求头信息:包括Cookie等;
- 请求内容:请求的内容或数据,如表单提交时的参数数据、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值,其值有三种类型:
- 普通URL路径映射:指定为普通的具体值;
- 可以指定为含有某变量的一类值(URI Template Patterns with Path Variables);
- 可以指定为含正则表达式的一类值( 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
分享到:
相关推荐
6. **数据绑定和验证**:SpringMVC提供数据绑定功能,可以直接将请求参数绑定到Controller方法的参数上。此外,还可以使用`@Valid`注解和JSR-303/JSR-349 Bean Validation进行表单验证。 7. **异常处理**:...
SpringMVC 作为 Spring 框架的一部分,提供了处理 HTTP 请求和响应的强大功能。它通过解耦控制器、业务逻辑和服务层,使得开发者能够更加专注于应用的核心功能,而不是繁琐的 web 层实现。SpringMVC 的主要组件包括 ...
`@RequestBody` 和 `@ResponseBody` 注解分别用于将请求体映射为方法参数,以及将方法返回值转换为响应体。 11. **Tiles 和 Freemarker 视图技术** 除了 JSP,Spring MVC 还支持 Tiles 和 Freemarker 等模板引擎,...
SpringMVC通过DispatcherServlet接收请求,然后根据请求的URL和方法调用相应的Controller。Controller可以利用Spring的DI特性来注入MyBatis的SqlSessionTemplate或SqlSessionFactory,从而执行SQL操作。MyBatis的...
SpringMVC允许开发者将业务逻辑、数据处理和用户界面分离,从而实现松耦合和更好的代码组织。其主要特性包括: 1. **依赖注入(Dependency Injection, DI)**:SpringMVC通过DI帮助管理对象之间的关系,使得代码更...
在本压缩包 "springMVC12.rar" 中,我们主要探讨的是如何在 Spring MVC 中实现用户注册功能,包括增加、删除和更新用户。 首先,让我们从 MVC 模式开始。MVC 是一种软件设计模式,用于分离应用程序的数据模型、用户...
SpringMVC是Spring框架的一部分,主要用于构建前端控制器,而Mybatis是一个优秀的持久层框架,处理数据库操作。当这两个框架整合在一起时,可以实现高效的MVC(Model-View-Controller)架构和灵活的数据访问。 1. *...
在SpringMVC 3.0版本中,引入了许多增强功能和优化,使得开发更加高效且灵活。这个名为"SpringMVC3.0_Demo"的压缩包文件很可能是为了展示如何配置和使用SpringMVC 3.0进行Web应用开发,包含的子文件"spring3"和"jpa...
Hibernate是Java领域的一款对象关系映射(ORM)工具,它简化了数据库操作,使得开发者可以使用面向对象的方式处理数据。在SpringMVC中,Spring的Hibernate支持可以帮助开发者更方便地进行事务管理,同时提供了一种...
5. **Controller类**:SpringMVC的控制器,处理HTTP请求并调用Service层的方法,返回视图或JSON响应。 这个示例源码可能包含了创建一个简单SSM应用的步骤,例如: 1. **初始化环境**:设置JDK、Maven或Gradle、IDE...
在本文中,我们将深入探讨如何使用Spring MVC框架实现多文件上传功能,并且如何处理返回值以及与数据库交互。Spring MVC是Java开发中的一个流行MVC(Model-View-Controller)框架,它为构建Web应用程序提供了强大的...
**SpringMVC_9_文件上传**(共9页):这部分内容介绍了如何使用SpringMVC实现文件上传功能,包括文件上传的原理、配置MultipartResolver等组件、处理上传文件的控制器方法等。 **SpringMVC_10_拦截器**(共7页):...
方法返回的"hello"字符串会被ViewResolver解析,通常映射到一个视图文件,如jsp或ftl。 接下来,我们需要配置SpringMVC的DispatcherServlet和相关bean。在web.xml中,我们添加DispatcherServlet的配置,指定其初始...
它简化了Web应用的开发,通过DispatcherServlet进行请求分发,HandlerMapping处理映射,ModelAndView构建模型和视图,ViewResolver解析视图,以及一系列拦截器和异常处理器。 1. 请求处理流程:客户端发起请求到达...
SpringMVC提供了模型数据绑定功能,如`@ModelAttribute`,可以将请求参数自动绑定到方法参数。视图解析则由`ViewResolver`完成,通过`@ResponseBody`或视图解析器如`InternalResourceViewResolver`,将处理结果转化...
SpringMVC的servlet配置,MyBatis的mybatis-config.xml),实体类(Entity),Mapper接口和XML映射文件,以及Controller和服务层(Service)的Java代码,可能还有测试类(Test)来验证功能是否正常工作。 通过实践...
处理器映射器负责找到处理特定请求的控制器方法,而处理器适配器则执行这些方法。使用注解驱动后,我们可以省去这些繁琐的配置,让框架自动管理它们。 1. `@Controller` 注解:标记一个类作为 Spring MVC 的控制器...
- 在SpringMVC的Controller中,通过依赖注入获取Service层对象,调用其方法进行业务处理,Service层则通过Hibernate进行数据库操作。 通过以上整合,项目能够实现高效的数据存取和业务逻辑处理,同时保持代码的整洁...
在该项目中,开发者可能创建了多个控制器类来处理不同的用户请求,通过注解如@RequestMapping来定义URL映射。Spring MVC的核心组件包括DispatcherServlet、ModelAndView、HandlerMapping和ViewResolver等,它们协同...
除了`@RequestMapping`,SpringMVC还提供了其他注解来增强URL映射的功能: - `@GetMapping`、`@PostMapping`、`@PutMapping`、`@DeleteMapping`:这些注解分别对应HTTP的GET、POST、PUT、DELETE方法,使得URL映射更...