所谓配置式开发是指,“处理器类是程序员手工定义的,实现了特定接口的类,然后再在SpringMVC配置文件中对该类进行显式的,明确的注册”的开发方式”
1.处理器映射器HandlerMapping
HandlerMapping接口负责根据request请求找到对应的Handler处理器即Interceptor拦截器,并将它们封装在HandlerExecutionChain对象中,返回给中央调度器。
其常用的实现类有两种:
01BeanNameUrlHandlerMapping
02SimpleUrlHandlerMapping
01BeanNameUrlHandlerMapping
BeanNameUrlHandlerMapping处理器映射器,会根据请求的url与spring容器中所定义的处理器bean的name属性值进行匹配,从而在spring容器中找到处理器bean的实例
1 <!--处理器 映射器-->
2 <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
3 <!--处理器-->
4 <bean id="/hello.do" class="cn.happy.day01.FirstController"></bean>
02.SimpleUrlHandlerMapping
SimpleUrlHandlerMapping处理器映射器,不仅可以将url与处理器的定义分离,还可以对url进行统一的映射管理
SimpleUrlHandlerMapping处理器映射器,会根据请求的url与Spring容器中定义的处理器映射器自标签的key属性进行匹配,匹配上后,再将该key的value值与处理器bean的id值进行匹配,从而在spring容器中找到处理器bean
只需修改springmvc.xml文件即可
第一种方式
1 <!--处理器映射器-->
2 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
3 <property name="urlMap">
4 <map>
5 <entry key="/*.do" value="multiActionController"></entry>
6 </map>
7 </property>
8 </bean>
9 <!--处理器-->
10 <bean id="firstController" class="cn.happy.day02.MyAbstractController">
11 </bean>
第二种方式
1 <bean id="propertyNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
2 <property name="mappings">
3 <props>
4 <prop key="/first.do">doFirst</prop>
5 <prop key="/second.do">doSecond</prop>
6 </props>
7 </property>
8 </bean>
9
10 <!--处理器-->
11 <bean id="firstController" class="cn.happy.day02.MyAbstractController">
12 </bean>
三种方法名称解析器
01.默认方法名称解析器 MultiActionController
MyMultiActionController :
1 public class MyMultiActionController extends MultiActionController {
2 public String doFirst(HttpServletRequest request, HttpServletResponse response){
3 return "first";
4 }
5 public String doSecond(HttpServletRequest request, HttpServletResponse response){
6 return "second";
7 }
8 }
spring.mvc.xml
1 <!--处理器映射器-->
2 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
3 <property name="urlMap">
4 <map>
5 <entry key="/*.do" value="multiActionController"></entry>
6 </map>
7 </property>
8 </bean>
9 <!--默认视图解析器的名称-->
10 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
11 <property name="prefix" value="/"></property>
12 <property name="suffix" value=".jsp"></property>
13 </bean>
14
15 <bean id="multiActionController" class="cn.happy.day03.MyMultiActionController"></bean>
02属性方法名称解析器 PropertiesMethodNameResolver
MyMultiActionController :与上一案例相同
springmvc.xml
1 <!--处理器映射器-->
2 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
3 <property name="urlMap">
4 <map>
5 <entry key="/*.do" value="multiActionController"></entry>
6 </map>
7 </property>
8 </bean>
9
10 <!--属性方法名称解析器 PropertiesMethodNameResolver
11 访问格式:first.do / second.do
12 -->
13 <bean id="propertyNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
14 <property name="mappings">
15 <props>
16 <prop key="/first.do">doFirst</prop>
17 <prop key="/second.do">doSecond</prop>
18 </props>
19 </property>
20 </bean>
21 <bean id="multiActionController" class="cn.happy.day03.MyMultiActionController">
22 <property name="methodNameResolver" ref="propertyNameResolver" ></property>
23 </bean>
03参数方法名称解析器
springmvc.xml
1 <!--处理器映射器-->
2 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
3 <property name="urlMap">
4 <map>
5 <entry key="/hello.do" value="multiActionController"></entry>
6 </map>
7 </property>
8 </bean>
9 <!--参数方法名称解析器 ParameterMethodNameResolver
10 访问格式: /hello.do?actionName=doFirst/doSecond value不写默认为action-->
11 <bean id="parameterNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
12 <property name="paramName" value="actionName"[value不写默认为action]></property>
13 </bean>
14 <!--默认视图解析器的名称-->
15 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
16 <property name="prefix" value="/"></property>
17 <property name="suffix" value=".jsp"></property>
18 </bean>
19
20 <bean id="multiActionController" class="cn.happy.day03.MyMultiActionController">
21 <property name="methodNameResolver" ref="parameterNameResolver" ></property>
22 </bean>
value不写默认为action 源码解析
三种视图解析器
01视图解析器 InternalResourceViewResolver
1 <!--默认视图解析器的名称-->
2 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
3 <property name="prefix" value="/"></property>
4 <property name="suffix" value=".jsp"></property>
5 </bean>
02视图解析器 BeanNameViewResolver
RedirectView:定义外部资源视图对象
JstlView:定义内部资源视图对象
1 <!--内部视图对象-->
2 <bean id="innerView" class="org.springframework.web.servlet.view.JstlView">
3 <property name="url" value="/index.jsp"></property>
4 </bean>
5 <!--外部视图对象-->
6 <bean id="jd" class="org.springframework.web.servlet.view.RedirectView">
7 <property name="url" value="https://www.jd.com/"></property>
8 </bean>
9 <!--BeanNameViewResolver视图解析器-->
10 <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
03视图解析器 XMLViewResolver
可以将部分配置信息提取到另一个配置文件中
myview.xml
1 <!--内部视图对象-->
2 <bean id="innerView" class="org.springframework.web.servlet.view.JstlView">
3 <property name="url" value="/index.jsp"></property>
4 </bean>
5 <!--外部视图对象-->
6 <bean id="jd" class="org.springframework.web.servlet.view.RedirectView">
7 <property name="url" value="https://www.jd.com/"></property>
8 </bean>
在原位配置文件(springmvc.xml)引入
1 <bean class="org.springframework.web.servlet.view.XmlViewResolver">
2 <property name="location" value="classpath:myview.xml"></property>
3 </bean>