欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
spring學(xué)習筆記之handler mapping源碼解讀


   用 handler mapping 可以映射請求到合適的 handler ,比如用 SimpleUrlHandlerMapping 或者 BeanNameUrlHandlerMapping 。首先我們來(lái)看 handler mapping 這個(gè)概念。

   最基本的 HandlerMapping 提供的功能是 HandlerExecutionchain 的傳遞,必須包括請求匹配的處理器,也可能包括一系列應用于這個(gè)請求的的攔截器。當請求發(fā)生時(shí), DispatcherServlet 將請求遞交給 hangler mapping, 讓其檢測請求并提出一個(gè)合適的 HandlerExecutionChain.DispatcherServlet 將執行該處理器和攔截器。

   Handler mappings 對攔截器的配置是可選的,包括前,后執行或者前后都執行,功能很強大。很多已經(jīng)支持的功能可以在 HandlerMappings 配置中定制。選擇一個(gè)處理器的 handler mapping 定制不僅基于請求的 URL ,而且基于請求相關(guān)的 session 的狀態(tài)。

所有 handler mapping 類(lèi)都要繼承 AbstractHandlerMapping 。下面是共有的屬性。

Interceptors: 攔截器

defaultHandler: 默認的處理器,當沒(méi)有匹配的處理器時(shí)使用。

Order: 基于 order 屬性的值。

   BeanNameUrlHandlerMapping 簡(jiǎn)單而強大,根據定義在 web 應用環(huán)境的 bean 的名字映射 http 請求。比如說(shuō)我們要讓一名用戶(hù)增加一賬號,我們已經(jīng)提供了合適的表單控制器, jsp 或者 velocity 視圖渲染表單。

如果使用 BeanNameUrlHandlerMapping, 請求 http://samples.com/editaccoutn.form. 配置如下: <beans>


  1.  <bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>  
  2. <bean name="/editaccount.form" class="org.springframework.web.servlet.mvc.SimpleFormController">  
  3. <property name="formView" value="account"/>  
  4. <property name="successView" value="account-created"/>  
  5. <property name="commandName" value="account"/>  
  6. <property name="commandClass" value="samples.Account"/>  
  7. </bean>  
  8. <beans>   


所有請求的 url editaccount.form 都會(huì )被 SimpleFormController 處理。當然在 web.xml 也要作如下的配置。

  1. <web-app>  
  2. <servlet>  
  3. <servlet-name>sample</servlet-name>  
  4. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  5. <load-on-startup>1</load-on-startup>  
  6. </servlet>  
  7. <!-- maps the sample dispatcher to *.form -->  
  8. <servlet-mapping>  
  9. <servlet-name>sample</servlet-name>  
  10. <url-pattern>*.form</url-pattern>  
  11. </servlet-mapping>  
  12. </web-app>   


需要注意的是,你想用 BeanNameUrlHandlerMapping 是,并不需要定義。如果沒(méi)有定義處理類(lèi),則 DispatcherServlet 默認創(chuàng )建它。

SimpleUrlHandlerMapping 功能更強大。下面是例子

  1. <web-app>  
  2. <servlet>  
  3. <servlet-name>sample</servlet-name>  
  4. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  5. <load-on-startup>1</load-on-startup>  
  6. </servlet>  
  7. <!-- maps the sample dispatcher to *.form -->  
  8. <servlet-mapping>  
  9. <servlet-name>sample</servlet-name>  
  10. <url-pattern>*.form</url-pattern>  
  11. </servlet-mapping>  
  12. <!-- maps the sample dispatcher to *.html -->  
  13. <servlet-mapping>  
  14. <servlet-name>sample</servlet-name>  
  15. <url-pattern>*.html</url-pattern>  
  16. </servlet-mapping>  
  17. </web-app>   


上面例子表示以 .form 或者 .html 結尾的請求都會(huì )被下面的處理器處理。

  1. <beans>  
  2. <!-- no 'id' required, HandlerMapping beans are automatically detected by the DispatcherServlet -->  
  3. <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
  4. <property name="mappings">  
  5. <value>  
  6. /*/account.form=editAccountFormController  
  7. /*/editaccount.form=editAccountFormController  
  8. /ex/view*.html=helpController  
  9. /**/help.html=helpController  
  10. </value>  
  11. </property>  
  12. </bean>   


  1.  <bean id="helpController"  
  2. class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/>  
  3. <bean id="editAccountFormController"  
  4. class="org.springframework.web.servlet.mvc.SimpleFormController">  
  5. <property name="formView" value="account"/>  
  6. <property name="successView" value="account-created"/>  
  7. <property name="commandName" value="Account"/>  
  8. <property name="commandClass" value="samples.Account"/>  
  9. </bean>  
  10. <beans>   


上面配置的意思很容易看明白的。


我們也可以用 HandlerInterceptor 攔截請求。攔截器必須實(shí)現 HandlerInterceptor 接口。這個(gè)接口定義了三個(gè)方法。見(jiàn)代碼:

  1. boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)  
  2. throws Exception;  
  3. void postHandle(  
  4. HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)  
  5. throws Exception;  
  6. void afterCompletion(  
  7. HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)  
  8. throws Exception;   

上面三個(gè)方面分別負責預處理,后置處理和請求完成后的處理。下面是例子:

  1. <beans>  
  2. <bean id="handlerMapping"  
  3. class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
  4. <property name="interceptors">  
  5. <list>  
  6. <ref bean="officeHoursInterceptor"/>  
  7. </list>  
  8. </property>  
  9. <property name="mappings">  
  10. <value>  
  11. /*.form=editAccountFormController  
  12. /*.view=editAccountFormController  
  13. </value>  
  14. </property>  
  15. </bean>  
  16. <bean id="officeHoursInterceptor"  
  17. class="samples.TimeBasedAccessInterceptor">  
  18. <property name="openingTime" value="9"/>  
  19. <property name="closingTime" value="18"/>  
  20. </bean>  
  21. <beans>   




  1. package samples;  
  2. public class TimeBasedAccessInterceptor extends HandlerInterceptorAdapter {  
  3. private int openingTime;  
  4. private int closingTime;  
  5. public void setOpeningTime(int openingTime) {  
  6. this.openingTime = openingTime;  
  7. }  
  8. public void setClosingTime(int closingTime) {  
  9. this.closingTime = closingTime;  
  10. }  
  11. public boolean preHandle(  
  12. HttpServletRequest request,  
  13. HttpServletResponse response,  
  14. Object handler) throws Exception {  
  15. Calendar cal = Calendar.getInstance();  
  16. int hour = cal.get(HOUR_OF_DAY);  
  17. if (openingTime <= hour < closingTime) {  
  18. return true;  
  19. } else {  
  20. response.sendRedirect("http://host.com/outsideOfficeHours.html");  
  21. return false;  
  22. }  
  23. }  
  24. }  

我們看到,攔截器類(lèi)是繼承了 HandlerInterceptorAdapter ,而 HandlerInterceptorAdapter 基本實(shí)現了 HandlerInterceptor 接口,接下來(lái)就是我們根據需要改寫(xiě)上面的三個(gè)某些方法了,而不需要全部實(shí)現。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
SpringMVC MultiActionController的使用-最簡(jiǎn)化教程
Spring MVC 配置
SpringMVC源碼分析——初始化過(guò)程
spring MVC 基本操作方法1
你真的了解DispatcherServlet的url
SpringMVC
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久