- Spring mvc 为 HandleMapping 提供了以下Controller:
Controller |
说明 |
UrlFilenameViewController |
用于跳转界面,控制器根据请求的URL直接解析出视图名,省去了自己实现 Ccntroller 跳转页面 |
ParameterizableViewController |
同样用于界面跳转,控制器根据配置的参数来跳转界面,也省去了自己实现 Ccntroller 跳转页面 |
ServletForwardingController |
将请求转发到 Servlet |
ServletWrappingController |
将某个 Servlet 包装为 Controller,所有到 ServletWrappingController 的请求实际上是由它内部所包装的这个 Servlet 实例来处理的,这样可以将这个 Servlet 隐藏起来 |
MultiActionController |
一个 Controller 可以写多个方法,分别对应不同的请求,使同一业务的方法可以放在一起了。在使用时让自己的 Controller 类继承 MultiActionController 类 |
UrlFilenameViewController
- 直接根据路径的解析视图
示例
<bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<!-- /index 路径的请求交给 id 为 urlFilenameViewController 的控制器处理-->
<prop key="/index">urlFilenameViewController</prop>
</props>
</property>
</bean>
<!-- urlFilenameViewController --> <bean id="urlFilenameViewController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController" /> |
ParameterizableViewController
- 直接跳转到Controller中viewname参数指定的视图
示例
<bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<!-- /index 路径的请求交给 id 为 parameterizableViewController 的控制器处理-->
<prop key="/index">parameterizableViewController</prop>
</props>
</property>
</bean>
<!-- parameterizableViewController,指定跳转的视图路径 -->
<bean id="parameterizableViewController" class="org.springframework.web.servlet.mvc.ParameterizableViewController"> <property name="viewName" value="/index.jsp" /> </bean> |
ServletForwardingController / ServletWrappingController
- 将请求转发到特定的Servlet
示例
- dispatcher-servlet.xml
<bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<!-- /index 路径的请求交给 id 为 parameterizableViewController 的控制器处理-->
<prop key="/index">parameterizableViewController</prop>
</props>
</property>
</bean>
<!-- servletForwardingController,转发到特定的Servlet -->
<bean id="servletForwardingController" class="org.springframework.web.servlet.mvc.ServletForwardingController"> <property name="servletName" value="indexServlet" /> </bean>
|
- web.xml
<!-- 指定转发的Servlet --> <servlet> <servlet-name>indexServlet</servlet-name> <servlet-class>com.servlet.ServletForwarding</servlet-class> </servlet>
|
MultiActionController
- 通过继承MultiActionController,将同一业务的请求方法写在继承后的Controller类中
示例
- MyController.java
public class MyController extends MultiActionController{ public ModelAndView add(HttpServletRequest request, HttpServletResponse response) { ModelAndView mv = new ModelAndView(); mv.addObject("message", "add"); mv.setViewName("add"); return mv; }
public ModelAndView delete(HttpServletRequest request, HttpServletResponse response) { ModelAndView mv = new ModelAndView(); mv.addObject("message", "delete"); mv.setViewName("delete"); return mv; } } |
- dispatcher-servlet.xml
<bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<!-- /index 路径的请求交给 id 为继承MutiActionController的 myController 的控制器处理-->
<prop key="/index">myController</prop>
</props>
</property>
</bean>
<bean id="myController" class="com.controller.MyController">
<property name="methodNameResolver">
<!-- InternalPathMethodNameResolver 根据请求路径解析执行方法名
ParameterMethodNameResolver 根据参数解析执行方法名
PropertiesMethodNameResolver 根据 key/value 列表解析执行方法名 -->
<bean class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<!-- 指定参数名为action -->
<property name="paramName" value="action" />
</bean>
</property>
<!-- 不指定参数-->
<property name="methodNameResolver"> <bean class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver" /> </property> |
</bean>