SpringMVC URL处理逻辑

本文是参阅了另一篇post,地址为:http://my.oschina.net/abian/blog/128028?fromerr=hamVhltR

1.

前面说过Spring MVC中用DispatherServlet捕捉特定URL(取决于web.xml中的servlet-mapping配置)上的HTTP请求之后,会将实际的request转交给用户自定义的Controller来处理,因为DispatherServlet本身并不处理应用的业务逻辑。这就需要一个映射配置(在spring中叫HandlerMapping),根据此Mapping,DispatcherSerlet就知道把当前的HTTP request转交给哪个用户类来处理了。前面已经认识到四种HandlerMapping,即:

org.springframework.web.servlet.handler.SimpleUrlHandlerMapping

org.springframework.web.servlet.mvc.support.ControllerBeanNameHandlerMapping

org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping

org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping

现在有另一种更受欢迎的HandlerMapping: org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping,因为上面几个HandlerMapping是将一个URL对应于一个@Controller,而这个却可以用一个@Controller类的不同方法处理不同的URL。

注意,还可在HandlerMapping配置时添加拦截器,做一些额外的工作等等,类似于AOP。

在Spring3.2之后,DefaultAnnotationHandlerMapping被替换为RequestMappingHandlerMapping


2.

在一个@Controller接到HTTP Request之后,下一个问题就是如何将Request转交到相应的@Controller的方法中去,这就涉及到HandlerAdapter。同样的Spring MVC也提供了几种HandlerAdapter供使用:

org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter  

org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter  

org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdaptor

(在Spring3.2起,使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter代替)

其中AnnotationMethodHandlerAdaptor通常是和DefaultAnnotationHanderMapping配合使用。


3.

配置DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdaptor,Spring提供了一种简便的写法:<mvc:annotation-driven />。

具体可参考类:org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser。

它配置的HandlerMapping是下面两种:

RequestMappingHandlerMapping - 顺序为order=0; mapping requests to annotated controller methods

BeanNameUrlHandlerMapping - 顺序为order=2; map URL paths to controller bean names

你还可以在配置文件中配置其他的HandlerMapping。


它配置的HandlerAdapter是下面三种:

RequestMappingHandlerAdapter - process requests with annotated controller methods

HttpRequestHandlerAdapter - process requests with HttpRequestHandler's

SimpleControllerHandlerAdapter - process requests with interface-based @Controller's


如此即相当于你配置了DefaultAnnotationHandlerMapping和HttpRequestHandlerAdapter。


4.

通过上面的步骤,Spring已经知道怎么查找@Controller以及Controller的方法,接着就要知道去哪里查找Controller或Bean。一种方法是直接在context配置好所以的Bean,如SimpleUrlHandlerMapping,另一种就是让Spring自动扫瞄,此时就需要用到<context:component-scan package="com.yquants.*"/>。要注意的是这个配置并不只是扫瞄含@Component的bean,实际上它会扫瞄所有下面几种注解。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值