SpringMVC處理器映射器和方法名稱解析器


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM