Java框架之SpringMVC(一)什麼是MVC、springMVC配置

推薦博客:https://www.cnblogs.com/hellokuangshen/p/11263631.html

1.什麼是MVC

MVC : 模型、視圖、控制器 , 是一種軟件設計規範,說明不是設計模式;

本質:將業務邏輯 , 數據 , 顯示 分離的方式來編寫代碼; 前後端分離;

Model:數據模型,提供要展示的數據,一般我們都會把這兩個分離開來 , 數據Dao,服務層Service。

View :負責進行數據的渲染和展示;客戶端想要看到的東西

Controller:接收用戶請求,交給Model處理,從Model更新後的數據或者結果,返回給前端。調度員

面向接口編程;

最典型的案例就是:JSP:View + Servlet:Controller + JavaBean:Model;

Model1

在早期的Web開發中,就是用的Model1模式

只有兩層:視圖層和模型層;
在這裏插入圖片描述
優點:架構簡單,適合小型項目開發;

缺點:JSP職責不單一 , 承受它不該承受的壓力,不便於維護;

Model2

將項目分爲三個模塊:M:模型 V:視圖 C :控制器

在這裏插入圖片描述

職責分析:

controller:

  • 取得表單的數據
  • 調用業務的邏輯方法
  • 轉向指定的頁面

Model:

  • Dao:操作數據庫
  • Service:業務邏輯
  • 保存數據的更新狀態

View:

  • 顯示頁面

Model2優化了Model1時代的缺點,讓所有層職責更加分明;降低了維護難度,

2.SpringMVC

Struct1/2 :比較簡單 , 更簡單SpringMVC;
在這裏插入圖片描述

什麼是SpringMVC

SpringMVC 是 Spring的一部分,是基於Java實現的MVC的輕量級Web框架

springMVC 的優點

  • 趨勢,使用的人多。
  • 簡單,易學,輕量級
  • 高效,基於請求和響應的MVC框架;
  • 約定優於配置;
  • 功能強大:RestFul、數據驗證、格式化{json}、主題,本地化、異常處理…

官網上說Spring的web模塊提供了大量獨特的功能,包括:

清晰的角色劃分:控制器(controller)、驗證器(validator)、 命令對象(command object)、表單對象(form object)、模型對象(model object)、 Servlet分發器(DispatcherServlet)、 處理器映射(handler mapping)、視圖解析器(view resolver)等等。 每一個角色都可以由一個專門的對象(類)來實現。< Bean>

強大而直接的配置方式:將框架類和應用程序類都能作爲JavaBean配置,而且支持跨多個context 的引用。

可適配、非侵入:可以根據不同的應用場景,選擇合適的控制器子類 (simple型、command型、form型、wizard型、multi-action型或者自定義),而不是從單一控制器 (比如Action/ActionForm)繼承。

可重用的業務代碼:可以使用現有的業務對象作爲命令或表單對象,而不需要去擴展某個特定框架的基類。

可定製的綁定(binding) 和驗證(validation):比如將類型不匹配作爲應用級的驗證錯誤, 這可以保存錯誤的值。再比如本地化的日期和數字綁定等等。在其他某些框架中,你只能使用字符串表單對象, 需要手動解析它並轉換到業務對象。

可定製的handler mapping和view resolution:Spring提供從最簡單的URL映射, 到複雜的、專用的定製策略。與某些web MVC框架強制開發人員使用單一特定技術相比,Spring顯得更加靈活。

靈活的model轉換:在Springweb框架中,使用基於Map的 鍵/值對來達到輕易地與各種視圖技術的集成。

可定製的本地化和主題(theme)解析:支持在JSP中可選擇地使用Spring標籤庫、支持JSTL、支持Velocity(不需要額外的中間層)等等。

簡單而強大的JSP標籤庫(Spring Tag Library):支持包括諸如數據綁定和主題(theme) 之類的許多功能。它提供在標記方面的最大靈活性。

JSP表單標籤庫:在Spring2.0中引入的表單標籤庫,使得在JSP中編寫 表單更加容易。

Spring Bean的生命週期可以被限制在當前的HTTP Request或者HTTP Session。 準確的說,這並非Spring MVC框架本身特性,而應歸屬於Sping MVC使用的WebApplicationContext容器。

正因爲SpringMVC較Struct2好 , 簡單 , 便捷 , 易學 , 天生和Spring無縫集成(使用SpringIoC和Aop) , 使用約定優於配置 . 能夠進行簡單的junit測試 . 支持Restful風格 .異常處理 , 本地化 , 國際化 , 數據驗證 , 類型轉換 , 攔截器 等等…所以我們要學習 .

DispatcherServlet

SpringMVC框架圍繞着DispatcherServlet(Servlet請求分發器)設計;

在這裏插入圖片描述
在這裏插入圖片描述

3.HelloSpringMVC

我們利用Maven創建一個web項目;

項目結構:
在這裏插入圖片描述

1.Maven及導包注意點

  • 資源過濾問題;
  • 導包不要漏;
<dependencies>
  <!--junit包單元測試-->
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
  </dependency>
  <!-- Spring MVC 及 Spring系列包 -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.3.24.RELEASE</version>
  </dependency>
  <!--jstl 和 jsp的包-->

  <!--Servlet核心-->
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
  </dependency>
  <!-- JSTL -->
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
  </dependency>
  
</dependencies>


<build>
    <!--解決資源導出問題-->
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>
</build>

註冊SpringMVC核心Servlet(web.xml文件)

  • 註冊DispatcherServlet
  • 關聯SpringMVC的配置文件
  • 啓動級別爲1
  • 映射路徑爲 / 【不要用/*,會404】
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="WebApp_ID" version="3.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:springmvc-servlet.xml</param-value>
    </init-param>
    <!--這個東西要和服務器一起啓動;
    load-on-startup,啓動級別,數字越小級別越高!-->
    <load-on-startup>1</load-on-startup>
  </servlet>


  <!--所有請求都會經過這個DispatcherServlet請求分發器-->
  <!--

  /和/*的區別:
  < url-pattern > / </ url-pattern > 不會匹配到.jsp, 只針對我們編寫的請求;
    即:.jsp不會進入spring的 DispatcherServlet類 。
  < url-pattern > /* </ url-pattern > 會匹配*.jsp,
    會出現返回jsp視圖時再次進入spring的DispatcherServlet 類,導致找不到對應的controller所以報404錯。
  -->
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>


  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
</web-app>

編寫SpringMVC的配置文件

  1. 讓IOC的註解生效
  2. 靜態資源過濾 :HTML . JS . CSS . 圖片 , 視頻 …
  3. MVC的註解驅動 :
  4. 配置視圖解析器

編寫Controller類

  • 需要給類加註解 :@Controller , 可以讓IOC容器管理 , 等價於Bean
  • 請求映射的路徑 :@RequestMapping (“路徑”),如果類上有就先寫類的,在寫方法的;
  • Model :模型傳遞參數
  • return “hello”; 它會去視圖解析中拼接前綴和後綴來找到對應的視圖
@Controller
@RequestMapping("/hello")
public class HelloWorldController {

    //請求映射("路徑")
    @RequestMapping("/hello")
    public String hi(Model model){
        model.addAttribute("msg","Hello,SpringMVC");
        System.out.println("進入HELLO");
        return "hello"; //WEB-INF/jsp/hello.jsp
    }

}

視圖層

  • 注意視圖的位置,要和視圖解析器對應 web-inf / jsp , 爲什麼需要在web-inf路徑下 , 因爲這個路徑下的東西用戶無法直接訪問 , 更加安全;
  • 可以通過EL表示取出Model中存放的值,或者對象;
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>SpringMVC</title>
</head>
<body>

${msg}

</body>
</html>

測試

啓動Tomcat進行測試,
運行結果
在這裏插入圖片描述
在這裏插入圖片描述

流程

  1. 建立web項目
  2. 導包
  3. 編寫web.xml
  4. 編寫springmvc的配置文件 【servletname】-servlet.xml
  5. 編寫控制類
  6. 編寫視圖層
  7. 測試
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章