SpringMvc-原理和入門

SpringMvc

SpringMvc是Spring框架中的產品之一,對應的解釋,博主不再贅述,我們學習Spring,也不得不學習SpringMvc。

SpringMvc執行流程

在這裏插入圖片描述

大致過程如上圖,深色框中的都不需要我們實現,我們僅僅需要關注Handler和View的部分,其他都由SpringMvc實現。
具體流程如下:

  1. 用戶發起訪問。
  2. DispatcherServlet根據用戶的請求路徑在HandlerMapping中查找對應的Handler。
  3. HandlerMapping生成處理器執行鏈HandlerExecutionChain(包括處理器對象和處理器攔截器)一併返回給DispatcherServlet。
  4. DisPatcherServlet根據處理器Handler獲取處理器適配器HandlerAdapter執行一系列的操作(比如請求數據封裝,數據格式轉換和數據驗證等操作)。
  5. 執行處理器Handler(Controller控制器)。
  6. Handler處理完成後返回ModelAndView給處理器適配器。
  7. HandlerAdapter將Handler的執行結果ModelAndView返回給DispatcherServlet。
  8. DispatcherServlet將HandlerAdapter返回的ModelAndView傳給ViewResolver解析。
  9. ViewResolver解析之後返回具體的View給DispatcherServlet。
  10. DispatcherServlet根據ViewResolver返回的View進行視圖渲染(將ModelAndView中的Model數據填充到視圖View中)。
  11. DispatcherServlet響應給用戶。

入門案例

  1. 創建Maven項目,導入如下依賴:
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.4.RELEASE</version>
</dependency>

<!--演示原理需要,實際開發不會導入該依賴-->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
</dependency>
  1. 在resources中編寫SpringMvc配置文件springMvc-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--處理器映射器:
        DispatcherServlet先通過處理器映射器找到處理對應請求的Handler(我們自己編寫的類和方法)
    -->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

    <!--處理器適配器:
        按照特定的規則去執行對應的Handler
    -->
    <bean class= "org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

    <!--視圖解析器:
        1.獲取ModelAndView中的數據
        2.解析ModelAndView的視圖名字
        3.根據視圖解析器拼接這個視圖名字,並找到響應的視圖
        4.將ModelAndView中的數據渲染到這個視圖中
        5.最後視圖就呈現在用戶的瀏覽器上
    -->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>
  1. 在web中的WEB-INF下配置web.xml文件(讓所有的請求都交由SpringMvc處理):
<servlet>
    <servlet-name>springMvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <!--配置DispatcherServlet要綁定Spring的配置文件-->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springMvc-config.xml</param-value>
    </init-param>

    <!--配置DispatcherServlet的啓動級別爲1,與服務器同時啓動加載-->
    <load-on-startup>1</load-on-startup>

</servlet>

<!--
    /和/*的區別:
        /:只匹配所有的請求,不會去匹配jsp頁面
        /*:匹配所有的請求,包括jsp頁面
-->
<servlet-mapping>
    <servlet-name>springMvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
  1. 編寫Handler處理類(HelloController):
package com.ara.controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//實現Controller接口 表示這是一個處理器
public class HelloController implements Controller {
    //實現接口的方法 處理請求的方法
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {

        ModelAndView modelAndView = new ModelAndView();

        //設置返回數據Model
        String result = "Hello SpringMVC";
        modelAndView.addObject("msg",result);

        //設置返回視圖
        modelAndView.setViewName("test");

        return modelAndView;
    }
}
  1. 在WEB-INF下創建jsp目錄,然後創建test.jsp頁面,作爲視圖。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--取出模型中的數據--%>
${msg}
</body>
</html>
  1. 在SpringMvc的配置文件中添加處理器的bean:
<!-- BeanNameUrLHandlerMapping :bean id:對應請求路徑-->
<bean id="/hello" class="com.ara.controller.HelloController"/>
  1. 現在我們就可以直接配置Tomcat,運行看結果了,我們運行之後就直接訪問該項目下的hello,結果如下:
    在這裏插入圖片描述

到此,我們的第一個SpringMvc的入門程序就成功了。

當然,實際開發我們不會這樣做,這個入門僅僅爲了展示其原理,實際的開發,我們更多的是用註解開發,但是我們在學習時,需要先了解其原理,然後再學習簡單的操作。

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