`

spring MVC之将请求映射到处理程序

 
阅读更多

spring MVC之将请求映射到处理程序

----------

 

当DispatcherServlet接收到web请求时,它只会将请求分发给适当的处理程序来处理请求。你想为DispatcherServlet定义一种策略,用来将请求映射到处理程序。

在Spring MVC应用程序中,web请求被web应用程序上下文中声明的一个或多个处理程序映射Bean映射到处理程序上。这些Bean必须实现HandlerMapping接口,这样DispatcherServlet才能自动侦测它们。Spring MVC提供了几个HandlerMapping实现,让你可以利用不同的策略来映射请求。默认情况下,如果你没有显式地配置程序映射,DispatcherServlet将利用BeanNameUrlHandlerMapping作为它的默认处理程序映射,它根据Bean名称中指定URL模式将请求映射到处理程序上。因此,如果你觉得这一策略还好用,就不需要定义自己的处理程序映射了。

处理程序映射根据它们与上下文路径和Servlet路径的相对路径来匹配URL。因此,对于http://localhost:8080/court/welcome.htm这个URL而言,与之匹配的路径应该是/weblcome.htm,因为上下文路径是/court,没有Servlet路径。

 

 

1.按Bean名称映射请求

要将请求映射到处理程序,最简单的策略是按照处理程序的Bean名称进行映射,这也是默认的策略。为了让这个策略生效,必须将每个处理程序的Bean名称声明成URL模式的形式,它可以接受通配符,供处理程序处理多个URL。如果处理程序的Bean名称与请求的URL相匹配,DispatcherServlet就会将请求分布给这个处理程序,让它处理请求。

<beans...>
	...
	<bean name="/welcome.htm" class="com.apress.springrecipes.court
		.web.WelcomeController">
		...
	</bean>
	<bean name="/reservationQuery.htm" class="com.apress.springrecipes.court
		.web.ReservationQueryController">
		...
	</bean>
</beans>

 在使用这个映射策略时,必须通过name属性设置处理程序的名称,因为id属性无法包含/字符

 

 

2.按控制器类名称映射请求

Spring提供的另一个处理程序映射是ControllerClassNameHandlerMapping,它为实现Controller接口的处理程序生成处理程序映射。它根据web应用程序上下文中声明的控制器的类名称,自动生成映射。

<beans...>
	...
	<bean class="org.springframework.web.servlet.mvc.support.
		ControllerClassNameHandlerMapping"/>
	<bean class="com.apress.springrecipes.court.web.WelcomeController">
		...
	</bean>
	<bean class="com.apress.springrecipes.court.web.ReservationQueryController">
		...
	</bean>
</beans>

对于这些Bean配置,ControllerClassNameHandlerMapping会移除类名称中的Controller后缀,并将其他部分转换成小写字母,以此来自动生成处理程序映射。 

WelcomeController --> /welcome*
ReservationQueryController --> /reservationquery*

然而,如果想让你的URL模式遵循java的变量命名约定(如生成/reservationQuery*而不是/reservationquery*),必须将caseSensitive属性设置为true。此外,可以在pathPrefix属性中为生成的URL模式指定一个前缀。你还可以在basePackage属性中指定基包,然后在映射中就会包含相对于基包的子包。 

<bean class="org.springframework.web.servlet.mvc.support.
	ControllerClassNameHandlerMapping">
	<property name="caseSensitive" value="true"/>
	<property name="pathPrefix" value="/reservation"/>
	<property name="basePackage" value="com.apress.springrecipes.court"/>
</bean>

 这个ControllerClassNameHandlerMapping定义会生成下面的处理程序映射。

WelcomeController --> /reservation/web/welcome*
ReservationQueryController --> /reservation/web/reservationQuery*

 

 

3.用定制的映射定义来映射请求

将请求映射到处理程序的最直接且最灵活的策略,是显式地指定URL模式和处理程序之间的映射定义。你可以通过

SimpleUrlHandlerMapping来做到这一点。

<beans...>
	...
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<propery name="mappings">
			<props>
				<prop key="/welcom.htm">welcomeController</prop>
				<prop key="/reservationQuery.htm">reservationQueryController</prop>
			</props>
		</property>
	</bean>
	<bean id="welcomeController" class="com.apress.springrecipes.court.web
		.WelcomeController">
		...
	</bean>
	<bean id="reservationQueryController" 
		class="com.apress.springrecipes.court.web.ReservationQuerController">
		...
	</bean>
</beans>

SimplerUrlHandlerMapping接受Properties对象形式的映射定义。属性键是URL模式,而属性值则是处理器ID或名称。URL模式也可以接受通配符,让处理程序能够处理多个URL。 

 

 

4.按多种策略映射请求

在带有大量处理程序的web应用程序中,只选择一种处理程序映射策略经常是不够用的。一般情况下,ControllerClassNameHandlerMapping可以满足大多数的映射。然而,有些映射必须利用SimpleUrlHandlerMapping显式地进行映射。在这种情况下,要结合这两种策略来处理映射。

<beans...>
	...
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/index.htm">welcomeController</prop>
				<prop key="/main.htm">welcomeController</prop>
			</props>
		</property>
		<property name="order" value="0"/>
	</bean>
	<bean class="org.springframework.web.servlet.mvc.support.
		ControllerClassNameHandlerMapping">
		<property name="caseSensitive" value="true"/>
		<property name="order" vlaue="1"/>
	</bean>
</beans>

当同时选择不止一种策略时,重要的是指定映射优先级。为此,可以设置处理程序映射Bean的order属性。order值越小,表示优先级越高。对于这两种处理程序映射,web请求映射是下面这样的。 

/index.htm --> WelcomeController
/amin.htm --> WelcomeController
/welcome* --> WelcomController
/reservationQuery* --> ReservationQueryController

 

 

 

 

分享到:
评论

相关推荐

    精通Spring MVC 4

    本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...

    Spring MVC+MyBatis开发从入门到项目实战

    第3篇是Spring MVC技术入门,包括Spring MVC的背景介绍、架构整体剖析、环境搭建、处理器与映射器的讲解、前端控制器的源码分析、多种视图解析器的介绍、请求映射与参数绑定的介绍、Validation校验与异常处理和拦截...

    Spring MVC入门教程

    八、spring mvc 请求如何映射到具体的Action中的方法? 九、spring mvc 中的拦截器: 十、spring mvc 如何使用拦截器? 十一、spring mvc 如何实现全局的异常处理? 十二、spring mvc 如何把全局异常记录到日志中? ...

    Spring MVC 教程 快速入门 深入分析

    八、spring mvc 请求如何映射到具体的Action中的方法? 九、spring mvc 中的拦截器: 十、spring mvc 如何使用拦截器? 十一、spring mvc 如何实现全局的异常处理? 十二、spring mvc 如何把全局异常记录到日志中? ...

    SpringMVC框架架构介绍

    八、spring mvc 请求如何映射到具体的Action中的方法? 九、spring mvc 中的拦截器: 十、spring mvc 如何使用拦截器? 十一、spring mvc 如何实现全局的异常处理? 十二、spring mvc 如何把全局异常记录到日志中? ...

    Spring MVC--2.@RequestMapping 映射请求

    Spring MVC--2.@RequestMapping 映射请求

    Spring MVC请求映射常见的三种方式

    NULL 博文链接:https://xieke90.iteye.com/blog/2235706

    Spring MVC 入门实例

    基于 Spring 的 Web 应用程序接收到 http://localhost:8080/hello.do(事实上请求路径是 /hello.do) 的请求后, Spring 将这个请求交给一个名为 helloController 的程序进行处理, helloController 再调用 一个名为 ...

    全面掌握Spring MVC:从基础到高级的实践指南

    Spring MVC是Spring框架的一个模块,专注于构建Web应用程序。作为架构师和Java开发者,深入理解Spring MVC的原理和实践应用是非常重要的。本文通过分析Spring MVC的核心组件和执行流程,提供了一个全面的学习指南。 ...

    第5章spring-mvc请求映射处理

    RequestMapping测试案例

    SPRING MVC 的请求参数获取的几种方法

    慨括了spring mvc请求参数常见的几种获取方法

    精通Spring MVC 4 [精校高清版](Geoffroy.Warin). pdf

    本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...

    Spring MVC 3.0实战指南.ppt

    《Spring MVC 3.0实战指南》,参考《Spring 3.x企业应用开发实战》。 内容简介: 1、Spring MVC框架简介 2、HTTP请求地址映射 3、HTTP请求数据的绑定 4、数据转换、格式化、校验 5、数据模型控制 6、视图及解析器 7...

    Spring MVC的教程项目代码

    奉上学习Spring MVC 3.0的技术资料PPT资料,我花了两天写成,该资料根据最新拙作的《Spring 3.x 企业应用开发实战 》写成,仅需要1个小时左右的时间,就可以让你学习到Spring MVC 3.0的所有知识点和新功能,强烈推荐...

    Spring3MVC注解教程.ppt

    《Spring MVC 3.0实战指南》,参考《Spring 3.x企业应用开发实战》。 内容简介: 1、Spring MVC框架简介 2、HTTP请求地址映射 3、HTTP请求数据的绑定 4、数据转换、格式化、校验 5、数据模型控制 6、视图及...

    spring mvc 3.2 参考文档

    Spring Web model-view-controller (MVC)框架是围绕 DispatcherServlet 设计的,并分发请求到处理程序(handler),Spring MVC支持可配置的处理程序映射(handler mapping),视图解析(view resolution)、 区域设置...

    SpringMVC入门教程

    八、spring mvc 请求如何映射到具体的Action中的方法 九、 spring mvc 中的拦截器: 十、 spring mvc 如何使用拦截器 十一、 spring mvc 如何实现全局的异常处理 十二、 spring mvc 如何把全局异常记录到日志中 十三...

    使用Spring MVC和JSP构建的全栈RSS阅读器Web应用程序(95分以上课程大作业).zip

    它采用MVC(Model-View-Controller,模型-视图-控制器)的架构模式,将应用程序分为模型层、视图层和控制器层,提供了处理请求、渲染视图和管理流程的功能。 3. MyBatis框架:MyBatis是一个持久层框架,用于与数据库...

Global site tag (gtag.js) - Google Analytics