標籤: springmvchtml
[TOC]前端
本文主要介紹springmvc的框架原理,並經過一個入門程序展現環境搭建,配置以及部署調試。java
springmvc是spring框架的一個模塊,springmvc和spring無需經過中間整合層進行整合。git
給個官網示意圖程序員
組件及其做用github
注:其中加粗的爲須要程序員開發的,沒加粗的爲不須要程序員開發的web
文末參考連接中《跟開濤學SpringMVC》裏面有張圖挺好的,感受很詳細.spring
步驟:架構
DispatcherServlet
)HandlerMapping
)查找Handler
(可根據xml配置、註解進行查找)HandlerMapping
)向前端控制器返回Handler
HandlerAdapter
)執行Handler
HandlerAdapter
)向前端控制器返回ModelAndView
DispatcherServlet
)請求視圖解析器(ViewResolver
)進行視圖解析,根據邏輯視圖名解析成真正的視圖(jsp)DispatcherServlet
)返回ViewModelAndView
對象中)填充到request域一個展現商品列表的小頁面mvc
intellij IDEA 15.0.2
new->project->maven->勾選create from archetype->選中webapp
在src/main
下新建java
文件夾,標記爲Sources Root
這樣建出來的工程感受有問題,點開一些xml文件一片紅,內心不是很踏實,因此放棄這個方法了
new->project->maven
,建一個裸的maven工程,手動建webapp的目錄
在src/main
下新建文件夾webapp
pom.xml文件
添加依賴
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.2.4.RELEASE</version> </dependency>
加上下面的標籤會生成Artifacts
<packaging>war</packaging>
build標籤的finalName要和Artifacts的output directory一致
<build> <finalName>springmvc-2nd-1.0-SNAPSHOT</finalName> </build>
web.xml
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- contextConfigLocation配置springmvc加載的配置文件(配置處理器映射器、適配器等等) 若不配置,默認加載WEB-INF/servlet名稱-servlet(springmvc-servlet.xml) --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet>
<servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 第一種:*.action,訪問以.action結尾,由DispatcherServlet進行解析 第二種:/,全部訪問的地址由DispatcherServlet進行解析,對靜態文件的解析須要配置不讓DispatcherServlet進行解析, 使用此種方式和實現RESTful風格的url 第三種:/*,這樣配置不對,使用這種配置,最終要轉發到一個jsp頁面時,仍然會由DispatcherServlet解析jsp地址, 不能根據jsp頁面找到handler,會報錯 --> <url-pattern>*.action</url-pattern> </servlet-mapping>
將編寫Handler在spring容器加載
<!-- 配置Handler --> <bean name="/queryItems.action" class="com.iot.ssm.controller.ItemsController"/>
在classpath下的springmvc.xml中配置處理器映射器
<!-- 處理器映射器 將bean的name做爲url進行查找,須要在配置Handler時指定beanname(就是url) --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
全部處理器適配器都實現了HandlerAdapter
接口
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter">
源碼
public boolean supports(Object handler) { return handler instanceof Controller; }
此適配器能執行實現Controller
接口的Handler
須要配置解析jsp的視圖解析器
<!-- 視圖解析器 解析jsp,默認使用jstl,classpath下要有jstl的包 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
在springmvc.xml中視圖解析器配置前綴和後綴:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 配置jsp路徑的前綴 --> <property name="prefix" value="/WEB-INF/jsp/"/> <!-- 配置jsp路徑的後綴 --> <property name="suffix" value=".jsp"/> </bean>
程序中不用指定前綴和後綴:
//指定視圖 //下邊的路徑,若是在視圖解析器中配置jsp的路徑前綴和後綴,修改成items/itemsList //modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp"); //下邊的路徑配置就能夠不在程序中指定jsp路徑的前綴和後綴 modelAndView.setViewName("items/itemsList");
HTTP Status 404 -
處理器映射器根據url找不到Handler,說明url錯誤
HTTP Status 404 -/springmvc/WEB-INF/jsp/items/itemsLists.jsp
處理器映射器根據url找到了Handler,轉發的jsp頁面找不到