日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

--------------springMVC的开篇,以及底层执行流程,配置视图解析器,静态资源的访问,流程图,工作原理...

發布時間:2024/10/12 c/c++ 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 --------------springMVC的开篇,以及底层执行流程,配置视图解析器,静态资源的访问,流程图,工作原理... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

springMVC:

一:創建第一個項目
01.引入需要的jar包
web webmvc context context-support
02.在web.xml文件中 配置我們需要的核心控制器 DispatcherServlet
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>

注意點:
<servlet-name>springmvc</servlet-name>
那么我們springmvc的核心配置文件名稱 必須是 springmvc-servlet.xml
因為底層明確了文件的名稱是 <servlet-name>-servlet.xml
這個文件的位置 現階段 只能在web-inf 下面

03.在web-inf文件下創建需要的核心配置文件 springmvc-servlet.xml
頭部信息增加
xmlns:mvc="http://www.springframework.org/schema/mvc"

http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
04.書寫一個controller(其實就是我們的servlet) 繼承 AbastractController


二:第一個項目的整體流程

01.用戶在index.jsp頁面中點擊Hello超鏈接
02.點擊之后請求路徑是 /hello <a href="hello">Hello</a>
03.會被我們web.xml文件中配置的DispatcherServlet攔截
04.默認執行doDispatch()
HandlerExecutionChain mappedHandler = null; 處理器執行鏈
mappedHandler = this.getHandler(processedRequest); 根據用戶的請求獲取處理器執行鏈
4.1.跟進getHandler()看到了
for (HandlerMapping hm : this.handlerMappings)
handlerMappings是一個List<HandlerMapping>

HandlerExecutionChain handler = hm.getHandler(request);
hm是List<HandlerMapping>是集合中的一個元素===》HandlerMapping
根據用戶的請求在處理器映射器中查詢Handler
4.2.跟進getHandler()看到了
Object handler = getHandlerInternal(request); 獲取需要執行的Handler

HandlerExecutionChain executionChain = getHandlerExecutionChain(handler, request);

4.3.跟進getHandlerExecutionChain
發現方法中有處理器攔截器
for (HandlerInterceptor interceptor : this.adaptedInterceptors)

所以mappedHandler(處理器執行鏈)中包含一個即將執行的handler和一些列的interceptor(攔截器)

05.HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
獲取處理器適配器
跟進 getHandlerAdapter()
for (HandlerAdapter ha : this.handlerAdapters)
handlerAdapters是一個List<HandlerAdapter>
ha就是List<HandlerAdapter>其中一個元素 就是HandlerAdapter

if (ha.supports(handler)) {
return ha;
}
5.1:跟進supports
進入了HandlerAdapter====》是一個接口!
接口有5個實現類!默認執行3個!

在webmvc的jar包中的根目錄下找到DispatcherServlet.properties

默認的處理器映射器的配置
org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping

默認的處理器適配器的配置
org.springframework.web.servlet.HandlerAdapter
=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
5.2:回到doDispatch()
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
跟進handle()發現 HandlerAdapter====》是一個接口的handle()有5個實現
首先進入HttpRequestHandlerAdapter,我們的HelloController和HttpRequestHandler沒關系,繼續執行下一個Adapter
進入SimpleControllerHandlerAdapter,我們的HelloController繼承了AbstractController,
AbstractController實現了Controller! 產生了關系!

5.3:跟進SimpleControllerHandlerAdapter類中的handler()

return ((Controller) handler).handleRequest(request, response);
只有轉換成Controller才有handleRequest這個方法!
關鍵是我們的HelloController中的方法名稱是handleRequestInternal()

001.只有轉換成Controller才有handleRequest這個方法!
002.AbstractController重寫了Controller的handleRequest
003.但是返回的是一個handleRequestInternal()
004.我們的HelloController中的方法名稱是handleRequestInternal()
005.所以執行Controller的handleRequest就是執行HelloController中的handleRequestInternal()


三:配置視圖解析器
為什么?
01.我們controller中肯定會返回很多頁面
02.頁面的前綴/WEB-INF ==>安全
03.后綴都是以.jsp結尾

我們現在統一把所有的前綴和后綴寫在一個地方!
只要是后臺有返回頁面,我會自動的給頁面加前綴和后綴!
這時候就需要我們配置視圖解析器


有疑問?
通關觀察dispatcherServlet.properties文件我們看到了有默認的試圖解析器
就是InternalResourceViewResolver!
那為什么我們還需要設置?
因為我們需要對InternalResourceViewResolver視圖解析器中的屬性賦值!

InternalResourceViewResolver的父類中 UrlBasedViewResolver的屬性沒有值

private String prefix = "";
private String suffix = "";


四:靜態資源的訪問
問題的引入:

01.我們在web.xml文件中配置核心控制器的url-pattern是什么? 是 /
02./ 不能匹配 .jsp .js .css .png....后綴路徑
03.如果我們項目中需要這些文件,是不能使用的!

所以需要設置允許靜態資源的訪問!

解決方式3種

01.去tomcat服務器中找到conf/web.xml中有如下配置
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern> 不會匹配靜態文件
</servlet-mapping>

在web.xml文件中配置
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>

問題?
如果我們的圖片后綴比較多!那么我們的web.xml文件中的節點是不是很多!


02.在springmvc核心配置文件中配置 推薦使用
注釋掉web.xml文件中的配置

03.在springmvc核心配置文件中配置
<mvc:default-servlet-handler/>

五、springmvc的流程圖:

(1)

?工作yuanl

?

?

(2)

(3)--------------------------------------------------------------------------------------------------------------------------------------------------

(4)底層代碼實現圖:

六、springMVC的工作原理:

SpringMVC的工作原理:

  • SpringMVC所有的請求都提交給DispatcherServlet,它會委托應用系統的其它模塊負責對請求進行真正的處理工作。
  • DispatcherServlet查詢一個或多個HandleMapping,找到處理請求的Controller.
  • DispatcherServlet提交到目標Controller.
  • Controller進行業務邏輯處理后,會返回一個ModelAndView
  • Dispatcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象
  • 視圖對象負責渲染返回給客戶端。
  • ?

    轉載于:https://www.cnblogs.com/laosunlaiye/p/7717407.html

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的--------------springMVC的开篇,以及底层执行流程,配置视图解析器,静态资源的访问,流程图,工作原理...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。