使用ControllerClass實現(xiàn)Spring MVC的CoC配置
只要我們的Controller是以XXXController的方式命名的話就可以使用到CoC帶來的好處。
例如,對于普通的Controller(非MultiActionController),CoC幫我們做以下的映射:
HomeController映射到/home*請求URL
DisplayShoppingCartController映射到/displayshoppingcart*請求URL
注意:應該映射成使用全部小寫的請求URL
對與MultiActionController,映射規(guī)則如下:
例如,我有一個UserInfoController,里面有一個方法valid,那么就會映射成/userinfo/valid.do(.do對應你設置的dispatcher-servlet的url-pattern)。
使用CoC帶來的好處就是我們不需要再忍受必須先定義它們,然后還要維護冗長的SimpleUrlHandlerMapping的枯燥。
規(guī)則就這么多,以下是配置。
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創(chuàng)建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就可以調(diào)用了。
另外,如果你想對這些使用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" />
【編輯推薦】