亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

深入理解Spring MVC 思想

發布時間:2020-06-17 22:49:14 來源:網絡 閱讀:1279 作者:qq58edf1d989a2d 欄目:移動開發

一、前言
二、spring mvc 核心類與接口
三、spring mvc 核心流程圖

四、spring mvc DispatcherServlet說明

五、spring mvc 父子上下文的說明

六、springMVC-mvc.xml 配置文件片段講解 
七、spring mvc 如何訪問到靜態的文件,如jpg,js,css

八、spring mvc 請求如何映射到具體的Action中的方法

九、 spring mvc 中的攔截器:
十、 spring mvc 如何使用攔截器

十一、 spring mvc 如何實現全局的異常處理

十二、 spring mvc 如何把全局異常記錄到日志中

十三、 如何給spring3 MVC中的Action做JUnit單元測試

十四、 spring mvc 轉發與重定向 (帶參數重定向)

十五、 spring mvc 處理ajax請求

十六、 spring mvc 關于寫幾個配置文件的說明 

十七、 spring mvc 如何取得Spring管理的bean

十八、 spring mvc 多視圖控制器

十九、 <mvc:annotation-driven /> 到底做了什么工作 
二十、 本文中springMVC.xml配置文件是核心,這里給一個下載地址

一、前言:

為開發團隊選擇一款優秀的MVC框架是件難事兒,在眾多可行的方案中決擇需要很高的經驗和水平。你的一個決定會影響團隊未來的幾年。要考慮方面太多:

1、簡單易用,以提高開發效率。使小部分的精力在框架上,大部分的精力放在業務上。

2、性能優秀,這是一個最能吸引眼球的話題。

3、盡量使用大眾的框架(避免使用小眾的、私有的框架),新招聘來的開發人員有一些這方面技術積累,減低人員流動再適應的影響。

 

如果你還在為這件事件發愁,本文最適合你了。選擇Spring MVC吧。

 

Spring MVC是當前最優秀的MVC框架,自從Spring 2.5版本發布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,實現了對Struts 2的超越。現在越來越多的開發團隊選擇了Spring MVC。

 

Struts2也是非常優秀的MVC構架,優點非常多比如良好的結構,攔截器的思想,豐富的功能。但這里想說的是缺點,Struts2由于采用了值棧、OGNL表達式、struts2標簽庫等,會導致應用的性能下降,應避免使用這些功能。而Struts2的多層攔截器、多實例action性能都很好。可以參考我寫的一篇關于Spring MVC與Struts2與Servlet比較的文章《Struts2、SpringMVC、Servlet(Jsp)性能對比 測試》

 

Spring3 MVC的優點:

1、Spring3 MVC使用簡單,學習成本低。學習難度小于Struts2,Struts2用不上的多余功能太多。呵呵,當然這不是決定因素。

2、Spring3 MVC很容易就可以寫出性能優秀的程序,Struts2要處處小心才可以寫出性能優秀的程序(指MVC部分)

3、Spring3 MVC的靈活是你無法想像的,Spring框架的擴展性有口皆碑,Spring3 MVC當然也不會落后,不會因使用了MVC框架而感到有任何的限制。

二、核心類與接口:

 

先來了解一下,幾個重要的接口與類。現在不知道他們是干什么的沒關系,先混個臉熟,為以后認識他們打個基礎。

 

DispatcherServlet   -- 前置控制器

 

HandlerMapping接口 -- 處理請求的映射

HandlerMapping接口的實現類:

SimpleUrlHandlerMapping  通過配置文件,把一個URL映射到Controller

DefaultAnnotationHandlerMapping  通過注解,把一個URL映射到Controller類上

 

HandlerAdapter接口 -- 處理請求的映射

AnnotationMethodHandlerAdapter類,通過注解,把一個URL映射到Controller類的方法上

 

Controller接口 -- 控制器

由于我們使用了@Controller注解,添加了@Controller注解注解的類就可以擔任控制器(Action)的職責,

所以我們并沒有用到這個接口。

 

 

 

HandlerInterceptor 接口--攔截器

無圖,我們自己實現這個接口,來完成攔截的器的工作。

 

 

ViewResolver接口的實現類

UrlBasedViewResolver類 通過配置文件,把一個視圖名交給到一個View來處理

InternalResourceViewResolver類,比上面的類,加入了JSTL的支持

 

View接口

JstlView類

 

LocalResolver接口

 

HandlerExceptionResolver接口 --異常處理

SimpleMappingExceptionResolver實現類

 

ModelAndView類

無圖。

三、核心流程圖

 

本圖是我個人畫的,有不嚴謹的地方,大家對付看吧。總比沒的看強。

轉載請注明出處:本文地址:http://elf8848.iteye.com/blog/875830

 

 


四、DispatcherServlet說明

 

使用Spring MVC,配置DispatcherServlet是第一步。

DispatcherServlet是一個Servlet,所以可以配置多個DispatcherServlet。

DispatcherServlet是前置控制器,配置在web.xml文件中的。攔截匹配的請求,Servlet攔截匹配規則要自已定義,把攔截下來的請求,依據某某規則分發到目標Controller(我們寫的Action)來處理。

 

“某某規則”:是根據你使用了哪個HandlerMapping接口的實現類的不同而不同。

 

先來看第一個例子:

  1. <web-app>  

  2.     <servlet>  

  3.         <servlet-name>example</servlet-name>  

  4.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  

  5.         <load-on-startup>1</load-on-startup>  

  6.     </servlet>  

  7.     <servlet-mapping>  

  8.         <servlet-name>example</servlet-name>  

  9.         <url-pattern>*.form</url-pattern>  

  10.     </servlet-mapping>  

  11. </web-app>  

  1. <web-app>  

  2.     <servlet>  

  3.         <servlet-name>example</servlet-name>  

  4.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  

  5.         <load-on-startup>1</load-on-startup>  

  6.     </servlet>  

  7.     <servlet-mapping>  

  8.         <servlet-name>example</servlet-name>  

  9.         <url-pattern>*.form</url-pattern>  

  10.     </servlet-mapping>  

  11. </web-app>  

 <load-on-startup>1</load-on-startup>是啟動順序,讓這個Servlet隨Servletp容器一起啟動。

 <url-pattern>*.form</url-pattern> 會攔截*.form結尾的請求。

 

 <servlet-name>example</servlet-name>這個Servlet的名字是example,可以有多個DispatcherServlet,是通過名字來區分的。每一個DispatcherServlet有自己的WebApplicationContext上下文對象。同時保存的ServletContext中和Request對象中,關于key,以后說明。

 

在DispatcherServlet的初始化過程中,框架會在web應用的 WEB-INF文件夾下尋找名為[servlet-name]-servlet.xml 的配置文件,生成文件中定義的bean。

 

 

第二個例子:

  1. <servlet>  

  2.     <servlet-name>springMVC</servlet-name>  

  3.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  

  4.     <init-param>  

  5.         <param-name>contextConfigLocation</param-name>  

  6.         <param-value>classpath*:/springMVC.xml</param-value>  

  7.     </init-param>  

  8.     <load-on-startup>1</load-on-startup>  

  9. </servlet>  

  10. <servlet-mapping>  

  11.     <servlet-name>springMVC</servlet-name>  

  12.     <url-pattern>/</url-pattern>  

  13. </servlet-mapping>  

  1. <servlet>  

  2.     <servlet-name>springMVC</servlet-name>  

  3.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  

  4.     <init-param>  

  5.         <param-name>contextConfigLocation</param-name>  

  6.         <param-value>classpath*:/springMVC.xml</param-value>  

  7.     </init-param>  

  8.     <load-on-startup>1</load-on-startup>  

  9. </servlet>  

  10. <servlet-mapping>  

  11.     <servlet-name>springMVC</servlet-name>  

  12.     <url-pattern>/</url-pattern>  

  13. </servlet-mapping>  

指明了配置文件的文件名,不使用默認配置文件名,而使用springMVC.xml配置文件。

其中<param-value>**.xml</param-value> 這里可以使用多種寫法
1、不寫,使用默認值:/WEB-INF/<servlet-name>-servlet.xml
2、<param-value>/WEB-INF/classes/springMVC.xml</param-value>
3、<param-value>classpath*:springMVC-mvc.xml</param-value>
4、多個值用逗號分隔

 


Servlet攔截匹配規則可以自已定義,攔截哪種URL合適? 
當映射為@RequestMapping("/user/add")時,為例:


1、攔截*.do、*.htm, 例如:/user/add.do

這是最傳統的方式,最簡單也最實用。不會導致靜態文件(jpg,js,css)被攔截。

 

2、攔截/,例如:/user/add

可以實現現在很流行的REST風格。很多互聯網類型的應用很喜歡這種風格的URL。

弊端:會導致靜態文件(jpg,js,css)被攔截后不能正常顯示。想實現REST風格,事情就是麻煩一些。后面有解決辦法還算簡單。

 

3、攔截/*,這是一個錯誤的方式,請求可以走到Action中,但轉到jsp時再次被攔截,不能訪問到jsp。

源碼來源:×××/technology QQ:1695402893


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐山市| 宜州市| 梨树县| 阳山县| 恩施市| 临安市| 汪清县| 金川县| 霍山县| 饶阳县| 隆回县| 洛扎县| 漳州市| 汝南县| 定日县| 萨迦县| 沧源| 怀宁县| 章丘市| 灌阳县| 松潘县| 九寨沟县| 温州市| 西安市| 南宁市| 新干县| 阿鲁科尔沁旗| 玉林市| 平江县| 四平市| 斗六市| 思茅市| 靖宇县| 奎屯市| 古丈县| 囊谦县| 禹城市| 望都县| 平顶山市| 昭苏县| 通州市|