SpringMVC學習1——基礎學習及入門
參考:https://www.jianshu.com/p/91a2d0a1e45a
基礎概念介紹
servlet
servlet的作用就是是接收瀏覽器傳給服務端的請求(request),並將服務端處理完的響應(response)返回給用戶的瀏覽器,瀏覽器和服務端之間通過http協議進行溝通,其過程是瀏覽器根據用戶的選擇將相關信息按http協議報文的規範組裝請求的http報文,報文通過網絡傳輸到指定的服務器,服務器通過特定的web容器接收這個報文信息web容器會將http報文解析出來,如果是用戶請求,最終解析出來的報文信息會用一個request對象存儲起來,服務端使用這個request做完相應的處理後,服務端程序將結果信息封裝到response對象裏,然後將response對象交給web容器,web容器則把這個response對象轉變爲http協議的報文,並將報文回傳給瀏覽器,瀏覽器最後解析這個響應報文,將最終結果展示給用戶。
SpringMVC
SpringMVC 中,控制器Controller 負責處理由DispatcherServlet 分發的請求,它把用戶請求的數據經過業務處理層處理之後封裝成一個Model ,然後再把該Model 返回給對應的View 進行展示。在SpringMVC 中提供了一個非常簡便的定義Controller 的方法,你無需繼承特定的類或實現特定的接口,只需使用@Controller 標記一個類是Controller ,然後使用@RequestMapping 和@RequestParam 等一些註解用以定義URL 請求和Controller 方法之間的映射,這樣的Controller 就能被外界訪問到。此外Controller 不會直接依賴於HttpServletRequest 和HttpServletResponse 等HttpServlet 對象,它們可以通過Controller 的方法參數靈活的獲取到。
SpringMVC代碼流程
創建控制器
@Controller
public class HelloControl {
@RequestMapping("hello")
private ModelAndView hello(){
System.out.println("hello");
// 模型和視圖
ModelAndView mav = new ModelAndView();
// 設置模型數據用於傳遞jsps
mav.addObject("msg","hello");
// 設置視圖名用於響應用戶
mav.setViewName("hello");
return mav;
}
}
web中創建jsp文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
$( msg )
</body>
</html>
在resources文件中創建spring的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="springmvc.controller"></context:component-scan>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/page/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
在web.xml中設置servlet
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 核心控制器配置 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 加載springmvc核心配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:config/springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
注意:
Spring MVC之所以可以整合到web應用中,是通過名爲一個由框架提供的名爲DispatcherServlet
的servlet攔截請求實現的,
<context:component-scan/>
表示啓動spring的掃描功能,掃描有@Controller @Service
等註解的java類,就把類實例化bean,然後完成注入
【WEB-INF】是 Java Web 中默認的安全目錄,是不允許用戶直接訪問的(也就是說通過 localhost/WEB-INF/ 這樣的方式是永遠訪問不到的),我們需要添加以下配置,告訴給視圖解析器:在視圖名上添加前綴和後綴,進而確定一個 Web 應用中視圖資源的物理路徑的
<context:component-scan base-package="controller"/>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/page/" />
<property name="suffix" value=".jsp" />
</bean>
SpringMVC執行流程:
1:輸入url進行網絡訪問
2-4:在DispatcherServlet中進行url的映射,查詢一個或多個處理器映射來確定請求的下一站在哪裏;
5-7:一旦選擇了合適的控制器, DispatcherServlet 會將請求發送給選中的控制器,到了控制器,請求會卸下其負載(用戶提交的請求)等待控制器處理完這些信息:
8-10:在找到@controller標註的控制器,通過RequestMapping找到具體的控制器方法。 當控制器在完成邏輯處理後,通常會產生一些信息,這些信息就是需要返回給用戶並在瀏覽器上顯示的信息,它們被稱爲模型(Model)。僅僅返回原始的信息時不夠的——這些信息需要以用戶友好的方式進行格式化,一般會是 HTML,所以,信息需要發送給一個視圖(view),通常會是 JSP。
SpingMvc架構體系:
SpringMvc三大組件:
-
處理器映射器:用戶請求路徑到Controller方法的映射
-
處理器適配器:根據handler(controlelr類)的開發方式(註解開發/其他開發) 方式的不同區尋找不同的處理器適配器
-
視圖解析器:根據handler返回的view地址文件類型(jsp/pdf….)去尋找相應的視圖解析器來進行解析