當前位置:首頁 » 網頁前端 » web配置springmvc
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

web配置springmvc

發布時間: 2022-09-05 20:19:26

① 詳解Spring mvc工作原理及源碼分析

Model 模型層 (javaBean組件 = 領域模型(javaBean) + 業務層 + 持久層)

View 視圖層( html、jsp…)

Controller 控制層(委託模型層進行數據處理)

springmvc是一個web層mvc框架,類似struts2。

springmvc是spring的部分,其實就是spring在原有基礎上,又提供了web應用的mvc模塊。

實現機制:

struts2是基於過濾器實現的。

springmvc是基於servlet實現的。

運行速度:

因為過濾器底層是servlet,所以springmvc的運行速度會稍微比structs2快。

struts2是多例的

springmvc單例的

參數封裝:

struts2參數封裝是基於屬性進行封裝。

springmvc是基於方法封裝。顆粒度更細。

⑴ 用戶發送請求至DispatcherServlet。

⑵ DispatcherServlet收到請求調用HandlerMapping查詢具體的Handler。

⑶ HandlerMapping找到具體的處理器(具體配置的是哪個處理器的實現類),生成處理器對象及處理器攔截器(HandlerExcutorChain包含了Handler以及攔截器集合)返回給DispatcherServlet。

⑷ DispatcherServlet接收到HandlerMapping返回的HandlerExcutorChain後,調用HandlerAdapter請求執行具體的Handler(Controller)。

⑸ HandlerAdapter經過適配調用具體的Handler(Controller即後端控制器)。

⑹ Controller執行完成返回ModelAndView(其中包含邏輯視圖和數據)給HandlerAdaptor。

⑺ HandlerAdaptor再將ModelAndView返回給DispatcherServlet。

⑻ DispatcherServlet請求視圖解析器ViewReslover解析ModelAndView。

⑼ ViewReslover解析後返回具體View(物理視圖)到DispatcherServlet。

⑽ DispatcherServlet請求渲染視圖(即將模型數據填充至視圖中) 根據View進行渲染視圖。

⑾ 將渲染後的視圖返回給DispatcherServlet。

⑿ DispatcherServlet將響應結果返回給用戶。

(1)前端控制器DispatcherServlet(配置即可)

功能:中央處理器,接收請求,自己不做任何處理,而是將請求發送給其他組件進行處理。DispatcherServlet 是整個流程的控制中心。

(2)處理器映射器HandlerMapping(配置即可)

功能:根據DispatcherServlet發送的url請求路徑查找Handler

常見的處理器映射器:BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping,

,(不建議使用)

(3)處理器適配器HandlerAdapter(配置即可)

功能:按照特定規則(HandlerAdapter要求的規則)去執行Handler。

通過HandlerAdapter對處理器進行執行,這是適配器模式的應用,通過擴展多個適配器對更多類型的處理器進行執行。

常見的處理器適配器:HttpRequestHandlerAdapter,,

(4)處理器Handler即Controller(程序猿編寫)

功能:編寫Handler時按照HandlerAdapter的要求去做,這樣適配器才可以去正確執行Handler。

(5)視圖解析器ViewReslover(配置即可)

功能:進行視圖解析,根據邏輯視圖名解析成真正的視圖。

ViewResolver負責將處理結果生成View視圖,ViewResolver首先根據邏輯視圖名解析成物理視圖名即具體的頁面地址,再生成View視圖對象,最後對View進行渲染將處理結果通過頁面展示給用戶。

springmvc框架提供了多種View視圖類型,如:jstlView、freemarkerView、pdfView...

(6)視圖View(程序猿編寫)

View是一個介面,實現類支持不同的View類型(jsp、freemarker、pdf...)

引入相關依賴:spring的基本包、springmvc需要的spring-webmvc,日誌相關的slf4j-log4j12,jsp相關的jstl、servlet-api、jsp-api。

因為DispatcherServlet本身就是一個Servlet,所以需要在web.xml配置。

一、使用默認載入springmvc配置文件的方式,必須按照以下規范:

①命名規則:-servlet.xml ====> springmvc-servlet.xml

②路徑規則:-servlet.xml必須放在WEB-INF下邊

二、如果要不按照默認載入位置,則需要在web.xml中通過標簽來指定springmvc配置文件的載入路徑,如上圖所示。

將自定義的 Controller 處理器配置到 spring 容器中交由 spring 容器來管理,因為這里的 springmvc.xml 配置文件中處理器映射器配置的是 BeanNameUrlHandlerMapping ,根據名字可知這個處理器映射器是根據 bean (自定義Controller) 的 name 屬性值url去尋找執行類 Handler(Controller) , 所以bean的name屬性值即是要和用戶發送的請求路徑匹配的 url 。

根據視圖解析路徑:WEB-INF/jsps/index.jsp

功能:根據bean(自定義Controller)的name屬性的url去尋找執行類Controller。

功能:自定義的處理器(Controller)實現了Controller介面時,適配器就會執行Controller的具體方法。

會自動判斷自定義的處理器(Controller)是否實現了Controller介面,如果是,它將會自動調用處理器的handleRequest方法。

Controller介面中有一個方法叫handleRequest,也就是處理器方法。

因此,自定義的Controller要想被調用就必須實現Controller介面,重寫Controller介面中的處理器方法。

如何配置spring mvc的web.xml文件

<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

③ spring mvc 配置後,web中的html頁面報404,該怎麼處理

spring mvc 配置後,web中的html頁面報404,該怎麼處理
404的錯誤提示是因為找不到文件,說說我的幾個建議(以下均是默認樓主的jdk,tomcat,spring等環境配置沒有問題的):
確保已經在tomcat發布項目並且運行
確保輸入的Url都沒有錯誤(這個經常是有些大小寫的錯誤)
直接訪問localhost:8080/項目名稱/ ,會默認訪問項目的index.jsp項目的,查看一下項目中有沒有index.jsp
如果jsp頁面不是在WEebRoot根目錄的,輸入格式應該為:localhost:8080/項目名稱/裝jsp的文件名/xxx.jsp

④ 如何搭建springMVC開發環境

由於本人基礎比較差,每隔一段時間就會忘記如何搭建spring,故寫下來,一加深記憶、二方便下次快速瀏覽。下面是基於最簡單的SpringMVC搭建。
搭建SpringMVC的基本步驟(基於Maven項目):
1、在pom.xml中添加spring-webmvc
2、配置web.xml
3、配置應用上下文spring-servlet.xml
---------------------------------------------------------------------------
一、在pom.xml中為項目添加SpringMVC必須的jar包:

[html] view plain
<properties>
<spring.version>4.0.2.RELEASE</spring.version>
<junit.version>4.11</junit.version>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>

<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- end -->

<!-- httl -->
<dependency>
<groupId>com.github.httl</groupId>
<artifactId>httl-springmvc</artifactId>
<version>1.0.11</version>
</dependency>
<!-- end -->

代碼中httl的包是用於代替JSP作為視圖輸出數據給客戶端。

二、配置web.xml

[html] view plain
<!-- 1.載入Spring配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/maven20150807-servlet.xml
classpath*:/maven20150807-security.xml
</param-value>
</context-param>

<!-- 2.配置Spring監聽 -->
<!-- 上下文載入監聽器:作用就是啟動Web容器時,自動裝配ApplicationContext的配置信息 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- 3.配置spring核心servlet -->
<servlet>
<servlet-name>maven20150807</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>maven20150807</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

三、配置spring-servlet.xml

[html] view plain
<!-- 啟動註解驅動的Spring MVC功能,注冊請求url和註解POJO類方法的映射-->
<mvc:annotation-driven />
<!-- 啟動包掃描功能,以便注冊帶有@Controller、@Service、@repository、@Component等註解的類成為spring的bean -->
<context:component-scan base-package="com.hason.mvc.controller"></context:component-scan>

<!--對靜態資源文件的訪問,location是物理路徑-->
<mvc:resources location="/WEB-INF/images/*" mapping="/images/**"></mvc:resources>

<!-- HTTL 定義視圖分解器,對模型視圖名稱的解析 -->
<span style="white-space:pre"> </span><bean id="viewResolver" class="httl.web.springmvc.HttlViewResolver">
<property name="contentType" value="text/html; charset=UTF-8" />
<property name="prefix" value="/WEB-INF/HTTL-Templates/" />
<property name="suffix" value=".httl" />
</bean>

⑤ Spring MVC 直接訪問 WEB-INF下的靜態頁面怎麼在配置文件中配置,求大神解答

注意配置的時候如下規則

1、頁面jsp(html等)的訪問必須走controller的訪問和跳轉

2、css、js等可以直接通過地址去訪問不需要走後台控制器

3、怎麼處理的,可以配置訪問限制。也就是放開對css、js等靜態資源的訪問,動態資源(.jsp用控制器去訪問),參考連接網頁鏈接

⑥ 如何在web.xml中配置springmvc

:先幫助你理清幾個概念: (1)web.xml是J2EE用來描述web工程的描述文件,在裡面可配置servelet filter listener 等,應用伺服器根據此配置響應用戶的請求,spring和它無直接關系; (2)spring總共包含兩個概念:AOP(切面編程)和IOC(控制反轉),

⑦ spring mvc 如何配置最簡潔的

SpringMVC屬於SpringFrameWork的後續產品,已經融合在SpringWebFlow裡面。Spring框架提供了構建Web應用程序的全功能MVC模塊。使用Spring可插入的MVC架構,從而在使用Spring進行WEB開發時,可以選擇使用Spring的SpringMVC框架或集成其他MVC開發框架,如Struts1,Struts2等。通過策略介面,Spring框架是高度可配置的,而且包含多種視圖技術,例如JavaServerPages(JSP)技術、Velocity、Tiles、iText和POI。SpringMVC框架並不知道使用的視圖,所以不會強迫您只使用JSP技術。SpringMVC分離了控制器、模型對象、分派器以及處理程序對象的角色,這種分離讓它們更容易進行定製。Lifecycleforoverridingbinding,validation,etc,易於同其它View框架(Tiles等)無縫集成,採用IOC便於測試。它是一個典型的教科書式的mvc構架,而不像struts等都是變種或者不是完全基於mvc系統的框架,對於初學者或者想了解mvc的人來說我覺得spring是最好的,它的實現就是教科書!第二它和tapestry一樣是一個純正的servlet系統,這也是它和tapestry相比struts所沒有的優勢。而且框架本身有代碼,看起來容易理解。關於SpringMVCController層的單元測試測試准備工作:1、搭建測試Web環境12345@RunWith(UnitilsJUnit4TestClassRunner.class)@SpringApplicationContext({"classpath:*.xml","file:src/main/webapp/WEB-INF/spring-configuration/*.xml","file:src/main/webapp/WEB-INF/*.xml"})2、注入Controller類12@;3、編寫測試數據測試數據的文件名一定要與測試類的文件名相同,比如測試數據BeanControllerTest.xml,測試類BeanControllerTest。4、注入測試數據123@Test@DataSetpublicvoidtestBean(){}MVC已經是現代Web開發中的一個很重要的部分,下面介紹一下SpringMVC的一些使用心得。之前的項目比較簡單,多是用JSP、Servlet+JDBC直接搞定,在項目中嘗試用Struts(StrutsMVC)+Spring+Hibernate,嚴格按照分層概念驅動項目開發,因項目需求一直不斷變化,功能不斷擴充、增強,技術構建也幾經改變到目前有個穩定的應用,體會了很多感受,這次先對SpringMVC層進行一些個人總結。MVC作為WEB項目開發的核心環節,正如三個單詞的分解那樣,C(控制器)將V(視圖、用戶客戶端)與M(模塊,業務)分開構成了MVC,這邊不去討論項目中是否應用MVC,也不針對MVC的實現原理進行講解,而是探討實踐中如何從應用SSH,到Struts(StrutsMVC)+Spring+Hibernate的演化過程。先看Struts如何與Spring結合處理一次簡單的請求響應代碼,前台可以設為用AJAX調用:1.在struts-config.xml文件中加入2.在applicationContext.xml文件中加入3.cn.base.GetPersonListAction實現請求響應代碼可以看出一次請求需求如此多的步驟,在加上一個項目下來有很多這樣的請求響應,將給配置文件管理帶來很大的麻煩。經過對Spring的深入應用,Spring本身提供的URL請求控制,對其天然支持可以讓我們不需要applicationContext.xml再次聲明一次URL請求Bean,即減少了Struts的聲明URL,達到減少些繁瑣的配置。但只是少了一些而已,同樣也會面臨著配置文件的管理問題。Spring註解將給我們的工作帶來些輕松,利用反射機制原理出現的註解就是為了解決配置大量的配置問題。請看下處理一次簡單的請求響應代碼@Controller--聲明控制器@RequestMapping("/person")–聲明{@Autowired–業務介面注入;/***獲得人員列表*@paramrequest*@paramresponse*@throwsException*/@RequestMapping(params="method=geList")--即處理/person.do?method=geList方法publicvoidgetnodeList(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{//處理請求//處理響應}}可以看出,在代碼上加入註解可以省去我們上面說的多個配置文件的工作,達到簡便的MVC處理請求響應。在配上簡單的配置文件聲明,即可輕松處理項目的全部請求控制工作。SpringMVC亂碼問題在使用SpringMVC做javaWeb項目時,亂碼問題時常都會出現,解決方法也不盡相同,有簡單也有復雜的;如果加入了Spring框架之後就不一樣了,可以採用Spring框架自帶的過濾器CharacterEncodingFilter,這樣可以大大減輕了我們的工作量,即簡單方便又容易理解,配置方式如下:在web.xml文件中filter的位置加上如下內容:encodingFilterorg.springframework.web.filter.-*.htmspringmvc實現上傳文件代碼片段@Controller@RequestMapping("/common")publicclassCommonController{@RequestMapping(value="/upload")public@ResponseBodyStringupload(@RequestParam("file")MultipartFilefile,HttpSessionsession)throwsException{FilelocalFile=newFile("c:/test/a.rar");file.transferTo(localFile);return"success";}}

⑧ 從源碼理解總結web容器、spring容器、spring mvc容器三者關系

本篇,我打算從springMVC項目的web.xml的配置文件入手,通過部分源碼逐步去理解解釋三個容器的關系以及調用順序,因為是基於我個人的理解,可能有所不足。

一般web.xml文件里會有如下兩段配置信息:

我們先了解下web.xml,以下引用自 《web.xml文件是什麼?有什麼用?--詳解》 :

然後結合我們上面的web.xml中關於spring和spring mvc的配置信息來進入話題:

    首先,啟動web容器的時,會先生成對應項目的ServelContent對象,這個是每個項目的上下文,這個ServelContent可以管理所有的servlet,並將我們web.xml中設置的<context-param>內容作為鍵值對交給這個對象。

    然後載入<listener>標簽內容,這個時候就會產生org.springframework.web.context.ContextLoaderListener。

spring的這個 ContextLoaderListener 在接下來的過程中很重要,我們來看一下源碼

首先,可以看出它繼承了ContextLoader類,並實現了ServletContextListener介面。

這里再直接引用他人的結論   《Spring中ContextLoaderListener作用》

好了,人家說法中回到我們的起點了,我們基本都被人告知「ContextLoaderListener的作用是創建並初始化spring容器」

那我們就可以深入進去看看,到底哪裡做了這一步:

首先,我們知道了ServletContextListene是ServletContext的監聽者,監聽器的響應動作就是在伺服器啟動時contextInitialized會被調用,關閉的時候contextDestroyed被調用,這個好理解,那我們就來看一下ContextLoaderListener重寫的contextInitialized方法到底做了什麼。

我們再進入觀察initWebApplicationContext方法細看

我因為自己消化過一遍,直接給出關鍵位置的方法說明——

1、首先是278行:創建了WebApplicationContext,我們可以理解為spring容器的殼子有了

2、其次是288和289行:對ApplicationContext載入了配置文件,並設置servletContext為WebApplicationContext的parent,到這一步,可以理解為我們的spring容器也就差不多成型了

3、接下來是294行:把ApplicationContext對象以鍵值對的形式存到servletContext中,這一步很關鍵,就是因為servletContext中存在這個鍵值對,所以其他內部成員可以通過servletContext訪問到ApplicationContext,當然也能使用其管理的bean,而spring mvc則沒有這樣存在servletContext,所以我覺得正是這一步決定了子容器springmvc可以取用父容器內的bean,反著則不然。

接下來直到輪到我們的springmvc容器<servlet>標簽內容

會生成控制org.springframework.web.servlet.DispatcherServlet,這是一個前端控制器,主要的內容我之前也有一篇文章做過自我記錄

《Spring MVC的工作機制簡單理解》

我們可以看到設置的

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

這個標簽大概意思就是:

1、load-on-startup 元素標記容器是否應該在web應用程序啟動的時候就載入這個servlet,(實例化並調用其init()方法)。

2、它的值必須是一個整數,表示servlet被載入的先後順序。

3、如果該元素的值為負數或者沒有設置,則容器會當Servlet被請求時再載入。

4、如果值為正整數或者0時,表示容器在應用啟動時就載入並初始化這個servlet,值越小,servlet的優先順序越高,就越先被載入。值相同時,容器就會自己選擇順序來載入。

在DispatcherServlet的時候就根據springMVC容器容器的配置文件生成。

比如我這邊就是

那順序確定了,我們再看一下spring和spring mvc的父子關系哪裡確定:

我們可以從下面3個截圖看到dispatcherServlet的繼承關系,同時,init方法用的是dispatcherServlet父類的父類的方法。

重點在於initServletBean()方法,經過追蹤,我們找到該方法的最終實現又是在dispatcherServlet的父類FrameworkServlet中

其中涉及父子關系的實際是在219行的initWebApplicationContext()方法

initWebApplicationContext()方法主要用於創建或刷新WebApplicationContext實例,並對Servlet功能所使用的變數進行初始化。

從238行源碼就可以看到,它獲得ContextLoaderListener中初始化的rootContext,

在246行設置了父子關系的引用,也就是從這一點我們看到了spring和springMVC的父子關系!

並且,可以看到這只是一條單向的引用,spring中沒有引用直接指向springMVC,也就是子類能找到父類,然而父類都不知道這個子類,父子容器之間內部對象調用關系更明了。

再通過構造函數和Servlet的contextAttribute屬性查找ServletContext來進行webApplicationContext實例的初始化,最終。

這個方法內263行源碼onRefresh(wac)方法是FrameworkServlet提供的模板方法,在子類,也就是我們的DispatcherServlet的onRefresh()方法中進行了重寫。而在onRefresh()方法中調用了initStrategies()方法來完成初始化工作,初始化Spring MVC的9個組件。

1、Tomcat在啟動時給每個Web應用創建一個全局的上下文環境,這個上下文就是ServletContext,其為後面的Spring容器提供環境。

2、Tomcat在啟動過程中觸發容器初始化事件,Spring的ContextLoaderListener會監聽到這個事件,它的contextInitialized方法會被調用,在這個方法中,Spring會初始化全局的Spring根容器,這個就是Spring的IoC容器,IoC容器初始化完畢後,Spring將其存儲到ServletContext中,便於以後來獲取。

3、Tomcat在啟動過程中還會掃描Servlet,一個Web應用中的Servlet可以有多個,以SpringMVC中的DispatcherServlet為例,這個Servlet實際上是一個標準的前端控制器,用以轉發、匹配、處理每個Servlet請求。

4、Servlet會在容器啟動時載入或延遲載入(根據啟動級別設置數字)。延遲載入時,當第一個請求達到時,serlet容器發現對應Servlet還沒有被實例化,就調用Servlet的init方法。

在spring MVC里

        DispatcherServlet在初始化的時候會建立自己的容器,叫做SpringMVC 容器,用來持有Spring MVC相關的Bean。同時,Spring MVC還會通過ServletContext拿到Spring根容器,並將Spring根容器設為SpringMVC容器的父容器,請注意,Spring MVC容器可以訪問父容器中的Bean,但是父容器不能訪問子容器的Bean, 也就是說Spring根容器不能訪問SpringMVC容器里的Bean。

        說的通俗點就是,在Controller里可以訪問Service對象,但是在Service里不可以訪問Controller對象。

⑨ javaweb項目中spring與springMVC核心配置文件路徑指定時,名稱沖突,求破解方法

這個沒沖突啊
一個是context-param中,一個是servlet中,如果不載入,那應該是其他問題,可能你的路徑配錯了
classpath是代表 /WEB-INF /classes/ 這個路徑的