標籤:初始化 web應用開發 index.jsp apt 核心 需要 添加 結構 控制
SpringMVC也叫spring web mvc,屬於表現層的架構,是Spring架構的一部分。
Spring MVC請求流程圖:
request-------->DispatcherServler(中央調度器/前端控制器)----->
HandlerMapping(處理器映射器)------>返回一個執行鏈----->將執行鏈轉交給HandlerAdaptor(處理器適配器)----->調度Handler(處理器)----->
ModelAndView----->先將結果交給HandlerAdaptor,然後再由HandlerAdaptor轉交給 DispatcherServler--------->DispatcherServler調度ViewResolver(視圖解析器)---->交給DispatcherServler------->
尋找View---->View做出響應(response)
關於urlpattern說法
最好配成*.do
不能配成/* 無法訪問*.jsp等動態資源
最好也不要配成/ 無法訪問靜態資源
不得不配成/
一切源於Restful編程 rest
不能配置為/*
DispatcherServlet會將向動態網頁面請求,即向jsp頁面的跳轉請求也當做是一個普通的Controller請求。中央調度器會調用處理器映射器為其尋找相應的處理器。當然是找不到的。jsp頁面會報404錯誤
結論:/*會攔截動態資源
不得不配成/
方案一:使用Tomcat預設的Servlet解決
方案二:使用MVC的default-servlet-handler
會將對靜態資源的訪問請求通過HandlerMapping映射到預設Servlet要求處理常式DefaultServletRequestHandler對象。而該處理器調用了Tomcat的DefaultServlet來處理靜態資源的訪問請求。當然需要引入mvc約束
<!--將靜態資源交流系統預設的servlet處理--><mvc:default-servlet-handler/>
方式三:使用MVC的resource解決
在Spring3.0.4之後,Spring定義了專門用於處理靜態資源請求的處理器ResourceHttpRequestHandler。並且添加了<mvc:resources/>標籤,專門用於解決靜態資源無法訪問問題。
<!--方式三:使用SPring3之後自己提供的處理器,處理靜態資源--><mvc:resources mapping="/img/**" location="/img/"></mvc:resources>
Location:靜態資源所在目錄
mapping: 對資源的請求
注意:需要Tomcat7支援
Spring MVC環境搭配 (兼第一個案例)
在MyEclipse中建立Web Project後,使用Spring MVC架構的步驟如下:
(1)引入jar檔案
下載需要的jar檔案: spring-web-3.2.13.RELEASE.jar:在web應用開發時使用Spring架構所需的核心類。
spreing-webmvc-3.2.13.RELEASE.jar:Spring MVC架構相關的所有類,包含架構的servlets,Web MVC架構,以及對控制器和視圖的支援。
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.13.RELEASE</version></dependency>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.3.9.RELEASE</version></dependency>
(2)Spring MVC配置:
*在web.xml中配置Servlet,定義DispatcherServlet.
Spring MVC是基於Servlet的,DispatcherServlet是整個Spring MVC架構的核心,它負責截獲請求並將其指派給相應的處理器處理。
<!--配置Spring MVC的核心控制器DispatcherServlet--><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.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> 只要tomcat一啟動就將servlet建立好,並存入記憶體。 </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
*建立Spring MVC的設定檔(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
<!--將靜態資源交流系統預設的servlet處理--> <!-- <mvc:default-servlet-handler/> --><!--方式三:使用SPring3之後自己提供的處理器,處理靜態資源--> <!--<mvc:resources mapping="/img/**" location="/img/"></mvc:resources>--> <!--處理器映射器--><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!--註冊處理器--><bean id="/hello.do" class="cn.happy.controller.Onecontriller"></bean> <!--視圖解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/"></property> <property name="suffix" value=".jsp"></property></bean>
(3)建立Controller(處理請求的控制器)
在src下建立cn.happy.controller包,並在該包下建立Onecontriller類,該類需要繼承org.springframework.web.servlet.mvc.Controller;並實現傳回值是ModelAndView的handleRequest方法。
public class Onecontriller implements Controller { public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { ModelAndView mv=new ModelAndView();
mv.addObject("uname","啦啦啦啦"); // 二
mv.setViewName("index"); return mv; }}
(4)建立View
在WEB-INF下建立一個index.jsp頁面
<body><h3>人生若是無誤,鉛筆何需橡皮!${uname}</h3><img src="${pageContext.request.contextPath}/img/1.jpg"></body>
SpriingMVC執行流程結構