1. 程式人生 > >對前端控制器等配置的理解

對前端控制器等配置的理解

.SpringMVC

就是關於Web層面的MVC分層框架

Spring FrameWork框架的延續

該框架為我們的Web開發提供了一整套的MVC模式

View: jsp html頁面 -->客戶端也可以是瀏覽器

Controller: class類,擁@Controller ----->核心

Model: 就是Map集合 ,這裡的資料預設會轉化到request.setAttribute

原來的url

http://localhost:8080/TB/index?un=張三&pass=123456

RESTFUL:型別的url

http://localhost:8080/TB/index/張三/123456

.SpringMVC基本使用

1.引用jar包

 

2. 建立配置檔案

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd">

<!--配置控制器物件 -->

<bean id="/h1" class="org.qf.controller.HelloController"></bean>

<!-- 掃描註解 -->

<context:component-scan base-package="org.qf.controller"></context:component-scan>

</beans>

3. 建立控制器物件

4. 在web.xml配置分發的DispatcherServlet並載入配置檔案

5.執行

SpringMVC三大件 -->缺一不可

1.控制器: 我們需要重點掌握

2.xxxMVC.xml :配置Spring FrameWork的一些內容 :控制器需要在該配置中使用

3.DispatcherServlet :前端控制器(分發的servlet) :解析請求並轉發給對應的View

3.SpringMVC配置詳解

DispatcherServlet:

必須在web.xml中進行註冊對映

這個必須優先啟動,數值越小,優先順序越高

需要配置:

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

預設會載入 :Spring FrameWork的配置檔案,檔案要求

檔案: WEB-INF/servletname--->servlet.xml

(SpringMVC規定,一個DispatcherServlet就應該有一個配置檔案)

如果改變配置檔案路徑:

需要使用`初始化引數

contextConfigLocation

這個值就是我們的配置檔案路徑

Servlet的url-pattern取值說明:

1. /完整名稱 :只能針對當前的url請求

2 /* :攔截所有 包含:圖片(png\jpg等) css js html jsp servlet等 SpringMVC 不建議使用

3. /*.xxx -->*.do *.op *.action *.controller *.jpg -->攔截指定字元結尾的請求

4. / :攔截所有資源(除了jsp)-->springMVC推薦使用

<!--就是為了放行靜態資源 -->

<mvc:default-servlet-handler/>

<mvc:resources location="" mapping=""></mvc:resources>

初始化過程:

1. 在啟動Web專案時,容器(比如Tomcat)會讀web.xml配置檔案中的兩個節點<listener><contex-param>

2. 接著容器會建立一個ServletContext(上下文),應用範圍內即整個WEB專案都能使用這個上下文。

3. 接著容器會將讀取到<context-param>轉化為鍵值對,並交給ServletContext

4. 容器建立<listener></listener>中的類例項,即建立監聽(備註:listener定義的類可以是自定義的類但必須需要繼承ServletContextListener)。

5. 在監聽的類中會有一個contextInitialized(ServletContextEvent event)初始化方法,在這個方法中可以通過event.getServletContext().getInitParameter("contextConfigLocation") 來得到context-param 設定的值。在這個類中還必須有一個contextDestroyed(ServletContextEvent event) 銷燬方法.用於關閉應用前釋放資源,比如說資料庫連線的關閉。

6. 得到這個context-param的值之後,你就可以做一些操作了.注意,這個時候你的WEB專案還沒有完全啟動完成.這個動作會比所有的Servlet都要早。

ContextLoaderListener初始化的上下文載入的Bean是對於整個應用程式共享的,不管是使用什麼表現層技術,一般如DAO層、ServiceBean

DispatcherServlet初始化的上下文載入的Bean是隻對Spring Web MVC有效的Bean,如ControllerHandlerMappingHandlerAdapter等等,該初始化上下文應該只加載Web相關元件。

由上面的初始化過程可知容器對於web.xml的載入過程是context-param >> listener  >> fileter  >> servlet

三.Spring FrameWork的配置檔案

也就是之前Spring的配置檔案

通過IOC容器建立的物件

需要引用:mvc 和context還有bean

可以配置:

需要配置控制器物件

配置檢視攔截器

資料解析器

1.控制器

根據建立控制器方式的不同,配置也不一樣

2.SpringMVC建立的兩種建立方式

實現Controller介面(基本不用)

需要在配置檔案中,使用<bean id="url" class=""/>

必須實現唯一方法:

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)

註解

@Controller:主要用在類上,標記這是一個控制器

內部的方法應該使用@RequestMapping

可以用來類或方法上,可以標記請求的url路徑

必須在配置檔案中使用

<context:component-scan base-package="org.qf.controller"></context:component-scan>

進行註解的掃描

 

.解析DispatcherServlet

DispatcherServlet:類

繼承

FrameworkServlet

繼承

HttpServletBean

繼承

HttpServlet

initStrategies(ApplicationContext context),完成初始化配置

完成以下的模組哈ude初始化:

initMultipartResolver(context);//檔案上傳模組的初始化

主要用來完成檔案上傳的

initLocaleResolver(context);//初始化本地化解析

國際化

initThemeResolver(context);//主題解析器

initHandlerMappings(context);處理器對映檔案

一般用來處理Mapping

initHandlerAdapters(context);處理器介面卡

initHandlerExceptionResolvers(context);處理器異常解析器

initRequestToViewNameTranslator(context);檢視名稱解析器

initViewResolvers(context);檢視解析器

initFlashMapManager(context);flash重新整理

DispatcherServlet內部的物件例項:

multipartResolve:預設沒有,一個

localeResolver:預設有,一個

themeResolver:預設有,一個

handlerMapping:預設有,可以有多個

handlerAdapter:預設有,可以有多個

handlerExceptionResolver:預設有,可以有多個

viewNameTranslator:預設有,一個

viewResolvers:預設有,可以有多個

flashMapManager:預設有,一個

.執行過程:

initStrategies:完成初始化

詳情見圖: