SpringMVC學習1——基礎學習及入門

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….)去尋找相應的視圖解析器來進行解析

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章