Spring mvc入門Demo
SpringMVC是基於MVC設計模式的,MVC模式擁有三個角色: Model、View、Controller。
文章目錄
1 依賴
<dependencies>
<!-- spring ioc元件需要的依賴包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.0.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
< artifactId>spring-core</artifactId>
<version>5.0.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.7.RELEASE</ version>
</dependency>
<!-- spring MVC依賴包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.0.7.RELEASE</version>
</dependency>
<!-- jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
2 註解開發Configuration檔案
@ComponentScan(value = "com.cc")
@Configuration
@EnableWebMvc
public class ApplicationConfig extends WebMvcConfigurationSupport{
public ApplicationConfig() {
System.out.println("應用啟動……");
}
@Bean
public InternalResourceViewResolver resourceViewResolver(){
InternalResourceViewResolver ir = new InternalResourceViewResolver();
ir.setPrefix("/WEB-INF/jsp/");
ir.setSuffix(".jsp");
return ir;
}
}
3 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 採用註解配置 -->
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.cc.config.ApplicationConfig</param-value>
</context-param>
<!-- 配置前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 設定spring配置檔案路徑 -->
<!-- 如果不設定初始化引數,那麼DispatcherServlet會讀取預設路徑下的配置檔案 -->
<!-- 預設配置檔案路徑:/WEB-INF/springmvc-servlet.xml -->
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</init-param>
<!-- 指定初始化時機,設定為2,表示Tomcat啟動時,DispatcherServlet會跟隨著初始化 -->
<!-- 如果不指定初始化時機,DispatcherServlet就會在第一次被請求的時候,才會初始化,而且只會被初始化一次 -->
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- URL-PATTERN的設定 -->
<!-- 不要配置為/*,否則報錯 -->
<!-- 通俗解釋:/*,會攔截整個專案中的資源訪問,包含JSP和靜態資源的訪問,對於靜態資源的訪問springMVC提供了預設的Handler處理器 -->
<!-- 但是對於JSP來講,springmvc沒有提供預設的處理器,我們也沒有手動編寫對於的處理器,此時按照springmvc的處理流程分析得知,它短路了 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
4 ControllerDemo
@Controller
@RequestMapping("demo")
public class ControllerDemo {
@RequestMapping("hello")
public String hello(Model model){
System.out.println("hello springmvc");
model.addAttribute("msg","hello Springmvc");
return "hello";
}
}
5 hello.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
msg: ${msg}
</body>
</html>
6 圖解三大元件的作用
1、 使用者傳送請求至前端控制器DispatcherServlet
2、 DispatcherServlet收到請求呼叫HandlerMapping處理器對映器。
3、 處理器對映器根據請求url找到具體的處理器,生成處理器物件及處理器攔截器(如果有則生成)一併返回給DispatcherServlet。
4、 DispatcherServlet通過HandlerAdapter處理器介面卡呼叫處理器
5、 HandlerAdapter執行處理器(handler,也叫後端控制器)。
6、 Controller執行完成返回ModelAndView
7、 HandlerAdapter將handler執行結果ModelAndView返回給DispatcherServlet
8、 DispatcherServlet將ModelAndView傳給ViewReslover檢視解析器
9、 ViewReslover解析後返回具體View物件
10、DispatcherServlet對View進行渲染檢視(即將模型資料填充至檢視中)。
11、DispatcherServlet響應使用者
6.1 元件說明
DispatcherServlet:前端控制器
使用者請求到達前端控制器,它就相當於mvc模式中的C,dispatcherServlet是整個流程控制的中心,由它呼叫其它元件處理使用者的請求,dispatcherServlet的存在降低了元件之間的耦合性。
HandlerMapping:處理器對映器
HandlerMapping負責根據使用者請求找到Handler即處理器,springmvc提供了不同的對映器實現不同的對映方式,例如:配置檔案方式,實現介面方式,註解方式等。
Handler:處理器
Handler 是繼DispatcherServlet前端控制器的後端控制器,在DispatcherServlet的控制下Handler對具體的使用者請求進行處理。
由於Handler涉及到具體的使用者業務請求,所以一般情況需要程式設計師根據業務需求開發Handler。
HandlAdapter:處理器介面卡
通過HandlerAdapter對處理器進行執行,這是介面卡模式的應用,通過擴充套件介面卡可以對更多型別的處理器進行執行。
View Resolver:檢視解析器
View Resolver負責將處理結果生成View檢視,View Resolver首先根據邏輯檢視名解析成物理檢視名即具體的頁面地址,再生成View檢視物件,最後對View進行渲染將處理結果通過頁面展示給使用者。
View:檢視
springmvc框架提供了很多的View檢視型別的支援,包括:jstlView、freemarkerView、pdfView等。我們最常用的檢視就是jsp。
一般情況下需要通過頁面標籤或頁面模版技術將模型資料通過頁面展示給使用者,需要由程式設計師根據業務需求開發具體的頁面。
說明:在springmvc的各個元件中,處理器對映器、處理器介面卡、檢視解析器稱為springmvc的三大元件。
需要使用者開發的元件有:處理器、檢視
6.2 預設元件
在spring-mvc原始碼中DispatherServlet.properties,裡面配置了一些預設元件。