所謂配置式開發是指,“處理器類是程序員手工定義的,實現了特定接口的類,然后再在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>
