HandlerMapping
顶级接口getHandler()根据HttpServletRequest获取Handler
AbstractHandlerMapping
定义了拦截器
AbstractUrlHandlerMapping
提供PathVar的解析,及Controller Register的统一入口,至此整个HandlerMapping的框架已经搭起来了,只要将handlerMap填充相应的数据就可以使用了,继承树下的所有子类都是提供了不同的填充方式。
SimpleUrlHandlerMapping
HandlerMapping的一个最简单的实现,提供一个定义了url=beanName映射规则的Properties或Map来填充handlerMap。
AbstractDetectingUrlHandlerMapping
提供了自动扫描ApplicationContext中的所有bean,查找映射规则的功能。
DefaultAnnotationHandlerMapping(Default)
扫描bean,查找@RequestMapping,构建映射规则
BeanNameUrlHandlerMapping(Default)
扫描bean,将以”/”开头的bean的名称或别名(alias)注册为可以处理的url
AbstractControllerUrlHandlerMapping
提供了使用Controller beanName或class进行convention配置的抽象,提供了excludesPackage,及是否是合法Controller(继承自Controller或有@Controller)的判断。
ControllerClassNameHandlerMapping
通过Controller类名,包名建立映射关系,可以附加前缀。
ControllerBeanNameHandlerMapping
类似BeanNameUrlHandlerMapping的注册方式,不同的是这个类将所有继承自Controller或标有Controller的bean根据beanName以包名及指定的前缀,后缀自动生成映射关系。
spring 3.1.0以后就没必要配置上面的HandlerMapping beans,因为有了
RequestMappingHandlerMapping ,它会自动查找在所有@Controller中使用了@requestMapping 注解的bean,同时也可以自定义一些属性行为:
interceptors
interceptor列表
defaultHandler
默认的handler,当不能找到合适的handler时使用。
order 用于排序,即使用优先级
alwaysUseFullPath
若为true,将使用全路径上下文(/testing/*)匹配查找(/testing/view.jsp),为false则使用当前路径(/view.jsp)。
urlDecode
默认为true,
使用interceptor例子
<beans>
<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="interceptors">
<list>
<ref bean="officeHoursInterceptor"/>
</list>
</property>
</bean>
<bean id="officeHoursInterceptor"
class="samples.TimeBasedAccessInterceptor">
<property name="openingTime" value="9"/>
<property name="closingTime" value="18"/>
</bean>
<beans>
/**
Interceptors located in the handler mapping must implement HandlerInterceptor from the
org.springframework.web.servlet package. This interface defines three methods:
preHandle(..) is called before the actual handler is executed; postHandle(..) is called after the
handler is executed; and afterCompletion(..) is called after the complete request has finished.
These three methods should provide enough flexibility to do all kinds of preprocessing and
postprocessing.
*/
package samples;
public class TimeBasedAccessInterceptor extends HandlerInterceptorAdapter {
private int openingTime;
private int closingTime;
public void setOpeningTime(int openingTime) {
this.openingTime = openingTime;
}
public void setClosingTime(int closingTime) {
this.closingTime = closingTime;
}
public boolean preHandle(
HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
Calendar cal = Calendar.getInstance();
int hour = cal.get(HOUR_OF_DAY);
if (openingTime <= hour < closingTime) {
return true;
} else {
response.sendRedirect("http://host.com/outsideOfficeHours.html");
return false;
}
}
}
扩展阅读:
Spring MVC 全面学习
Spring MVC 全面学习2
自定义用于“基于Annotation的Controller ”的HandlerMapping
分享到:
相关推荐
本文将详细探讨Spring MVC中常见的三种请求映射方式:基于注解的映射、基于XML配置的映射以及基于Java配置的映射。我们将深入理解每种方式的工作原理,并通过实例来展示其用法。 ### 1. 基于注解的映射 **注解驱动...
- **基本概念**:Spring MVC提供了一个灵活的MVC实现,包括请求映射、视图解析、模型绑定等功能。它通过DispatcherServlet作为前端控制器,负责接收请求并分发到相应的处理器。 - **组件**:主要包括Model、View、...
在Spring MVC框架中,Controller是处理用户请求的核心组件。这篇"Spring MVC 学习笔记 七 controller中其他可用的annotation"可能涵盖了除我们常见的`@RequestMapping`之外的其他注解,这些注解使得控制器功能更加...
首先,Spring MVC的基础架构包括DispatcherServlet(前端控制器)、Model、View和Controller。DispatcherServlet是整个流程的入口,负责接收请求并分发到相应的Controller。Controller是业务逻辑处理的核心,Model...
9. **HandlerMapping**:处理映射器,根据请求URL找到对应的Controller方法。 10. **HandlerAdapter**:处理器适配器,用于调用Controller方法,因为不同的Controller可能会有不同的接口,HandlerAdapter使得Spring...
在 Spring MVC 中,核心类和接口是 DispatcherServlet、HandlerMapping、HandlerAdapter、Controller、ViewResolver、HandlerInterceptor、View 等。 DispatcherServlet 是 Spring MVC 的前置控制器,它负责处理...
在Spring MVC中,每个请求都会经过DispatcherServlet,这是一个前端控制器,它会根据请求的URL和配置的映射规则将请求分发到合适的处理器。处理器可以是自定义的Controller类,Controller通过方法注解(如@...
Spring MVC是Spring框架的一个核心模块,专为构建Web应用程序而设计。它提供了模型-视图-控制器(MVC)架构,使开发者能够有效地分离业务逻辑、数据处理和用户界面。在"Spring MVC 4.2.3"版本中,我们看到了一系列的...
Spring MVC通过分离模型(Model)、视图(View)和控制器(Controller)来简化Web开发。以下将详细分析Spring MVC的核心知识点。 一、前言:介绍了选择Spring MVC的原因和优势。Spring MVC简单易用,可以快速提高...
Spring MVC 是一个强大的Java Web开发框架,它是Spring框架的一部分,专为构建高度可扩展和模块化的Web应用程序而设计。在2015年的版本中,Spring MVC 4已经相当成熟,提供了许多特性来简化开发流程并提高开发效率。...
在"SpringMVC_01"这个压缩包中,你可能会找到相关的配置文件(如`spring-mvc.xml`或Java配置类)、Controller类、Model类以及视图文件(如JSP)。通过分析这些源码,你可以更好地理解Spring MVC的工作流程和各个组件...
它是Spring MVC的前端控制器,接收所有HTTP请求,然后根据请求信息选择合适的HandlerMapping找到对应处理器(Controller方法)。处理器执行后,通过HandlerAdapter将结果转换为ModelAndView对象,最后由ViewResolver...
- Spring MVC是基于Model-View-Controller(MVC)设计模式的Web应用框架,提供了一种组织和处理请求的机制。 - 它的核心组件包括DispatcherServlet、HandlerMapping、HandlerAdapter、ModelAndView和ViewResolver...
标题中的"开发Spring MVC应用程序补充—程序源码下载.rar_spring_spring mvc_spring mvc 源码_sp"表明这是一个关于Spring MVC框架的开发教程,其中包含了源代码供学习者参考。Spring MVC是Spring框架的一个核心组件...
Spring MVC支持自动的数据绑定,将请求参数自动映射到Controller方法的参数上。同时,使用JSR-303/JSR-349提供的注解可以进行数据验证,如@NotNull、@Size等。 9. **上传下载** 使用MultipartFile处理文件上传,...
Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建Web应用程序的后端控制器。Spring MVC的设计目标是提供一个清晰的组件化架构,使得开发者可以独立地开发和测试控制器、...
查询结果被封装为Java对象,然后传递给Spring MVC的Controller。Controller再将这些对象传给Velocity模板,Velocity根据模板和数据生成响应的HTML页面。 例如,一个典型的流程可能如下:用户发起一个请求,...
通过这个简单的Demo,我们可以了解到Spring MVC的基本工作流程:从HTTP请求到DispatcherServlet,再到Controller处理,然后返回视图名,最后由View Resolver找到视图资源进行渲染。这个过程展示了Spring MVC如何将...