只要我们的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" />
【编辑推荐】