spring-mvc入门之映射处理器
来源:互联网 发布:嵌入式软件培训机构 编辑:程序博客网 时间:2024/04/27 22:55
spring-mvc入门:映射处理器
handlerMapping的工作就是为每个请求找到合适的处理器handler.
一、
BeanNameUrlHandlerMapping: 查找spring容器中和请求的url同名的bean.这个映射器不需要配置,因为spring在找不到handlerMapping的情况下会使用BeanNameUrlHandlerMapping.如果一定要配置,像下面这样就行了:
《bean class=“org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping” /》
比如有一个请求/index.htm, 则就会找到一个名叫/index.htm的bean来处理这个请求; 这种做法让我们可以做出虚拟目录的效果:
《bean name=“/user/index.htm” class=“controller.TestController” /》
《bean name=“/admin/index.htm” class=“controller.TestController” /》
二、
SimpleUrlHandlerMapping: 这个handlerMapping可以配置请求的url和handler的映射关系。
view plaincopy to clipboardprint?
《bean id=“urlMapping” class=“org.springframework.web.servlet.handler.SimpleUrlHandlerMapping”》
《property name=“mappings”》
《props》
《prop key=“/project.htm”》projectController《/prop》
《prop key=“/manage.htm”》managementController《/prop》
《prop key=“/user.htm”》userController《/prop》
《prop key=“/upload.htm”》fileUploadController《/prop》
《/props》
《/property》
《/bean》
《bean id=“urlMapping” class=“org.springframework.web.servlet.handler.SimpleUrlHandlerMapping”》
《property name=“mappings”》
《props》
《prop key=“/project.htm”》projectController《/prop》
《prop key=“/manage.htm”》managementController《/prop》
《prop key=“/user.htm”》userController《/prop》
《prop key=“/upload.htm”》fileUploadController《/prop》
《/props》
《/property》
《/bean》
前面提到了DiapatcherServlet查询handlerMapping获得handler,handlerMapping事实上返回的是HandlerExecutionChain,HandlerExecutionChain里面的interceptor正是在handlerMapping中配置的:
《bean id=“urlMapping” class=“org.springframework.web.servlet.handler.SimpleUrlHandlerMapping”》
《property name=“interceptors”》
《list》
《ref bean=“localeChangeInterceptor”/》
《ref bean=“someOtherCheckInterceptor”/》
《/list》
《/property》
《property name=“mappings”》
《props》
《prop key=“/project.htm”》projectController《/prop》
《prop key=“/manage.htm”》managementController《/prop》
《prop key=“/user.htm”》userController《/prop》
《prop key=“/upload.htm”》fileUploadController《/prop》
《/props》
《/property》
《/bean》
三、
ControllerClassNameHandlerMapping
使用CoC,惯例优先原则(conventionoverconfiguration)的方式来配置SpringMVC可以帮我们声明Controller的时候省下很多功夫。
只要我们的Controller是以XXXController的方式命名的话就可以使用到CoC带来的好处。
例如,对于普通的Controller(非MultiActionController),CoC帮我们做以下的映射:
HomeController映射到/home*请求URL
DisplayShoppingCartController映射到/displayshoppingcart*请求URL
注意:应该映射成使用全部小写的请求URL
对与MultiActionController,映射规则如下:
例如,我有一个UserInfoController,里面有一个方法valid,那么就会映射成/userinfo/valid.do(.do对应你设置的dispatcher-servlet的url-pattern)。
使用CoC带来的好处就是我们不需要再忍受必须先定义它们,然后还要维护冗长的SimpleUrlHandlerMapping的枯燥。
规则就这么多,以下是配置。
1.dispatcher-servlet.xml配置:
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
- <!-- ControllerClassNameHandlerMapping用于匹配我们的Controller -->
- <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
- <!-- 使用annocation创建Controller的bean -->
- <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
- <!-- Controller的包,使容器启动的时候可以找的并实例化Controller -->
- <context:component-scan base-package="test.controller"/>
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
- p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>
- </beans>
2.编写我们的Controller:
- package test.controller;
- import java.io.PrintWriter;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
- @Controller
- public class MYController extends MultiActionController {
- @RequestMapping
- public void test(HttpServletRequest request,
- HttpServletResponse response){
- PrintWriter out = null;
- try {
- out = response.getWriter();
- out.println("ok");
- }catch(Exception e) {
- out.println("not ok");
- }finally {
- out.close();
- }
- }
- }
这里我们可以看到,我们只需要在class前面声明@Controller,方法前面声明@RequestMapping就可以了,其他什么都不需要自己配置,最后使用地址/my/test.do就可以调用了。
另外,如果你想对这些使用 ControllerClassNameHandlerMapping匹配的Controller使用拦截器的话,只需要为 ControllerClassNameHandlerMapping bean的interceptors list注入拦截器就可以了:
- <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
- <property name="interceptors">
- <list>
- <ref bean="myInter" />
- </list>
- </property>
- </bean>
- <bean id="myInter" class="test.MyInter" />
- spring-mvc入门之映射处理器
- spring-mvc入门之映射处理器
- Spring MVC之处理器映射器
- Spring MVC处理器映射(handlerMapping)
- Spring MVC 映射处理器配置
- spring mvc基础篇(五):映射处理器之BeanNameUrlHandlerMapping
- Spring MVC组件-HandleMapping处理器映射
- Spring MVC教程 映射处理器Handler Mapping
- spring mvc基础篇(八):映射处理器之FreeMarker模板技术
- spring学习笔记:spring mvc处理器映射(handlerMapping)
- spring学习笔记:spring mvc处理器映射(handlerMapping)
- 第三集 Spring MVC教程 映射处理器Handler Mapping
- Spring MVC之入门
- Spring3.1.0实现原理分析(十四).MVC之处理器映射
- spring mvc注解的处理器适配器为什么不能处理非注解的处理器映射器映射的handler
- SpringMVC之处理器映射
- Spring MVC之简单入门
- spring 处理器映射器/适配器
- 杭州最新公交线路一览(1-10)
- 杭州最新公交线路一览(11-20)
- 我带徒弟的方式。
- 选择下拉框时如何取选项的值?
- 杭州最新公交线路一览(21-30)
- spring-mvc入门之映射处理器
- 杭州最新公交线路一览(31-40)
- Android之不同Activity之间的数据传递
- 杭州最新公交线路一览(41-50)
- 杭州最新公交线路一览(51-60)
- 深入浅出DirectShow Filter(一)
- C#字符串处理1
- spinlock理解
- Android之隐式意图(Intent)如何查找匹配的组件