Spring MVC 學習總結(一)——MVC概要與環境配置

来源:http://www.cnblogs.com/best/archive/2016/07/11/5653916.html
-Advertisement-
Play Games

一、MVC概要 MVC是模型(Model)、視圖(View)、控制器(Controller)的簡寫,是一種軟體設計規範,用一種將業務邏輯、數據、顯示分離的方法組織代碼,MVC主要作用是降低了視圖與業務邏輯間的雙向偶合。MVC不是一種設計模式,MVC是一種架構模式。當然不同的MVC存在差異。 在web ...


一、MVC概要

MVC是模型(Model)、視圖(View)、控制器(Controller)的簡寫,是一種軟體設計規範,用一種將業務邏輯、數據、顯示分離的方法組織代碼,MVC主要作用是降低了視圖與業務邏輯間的雙向偶合。MVC不是一種設計模式,MVC是一種架構模式。當然不同的MVC存在差異。

在web早期的開發中,通常採用的都是Model1。Model1中,如圖所示主要分為兩層,視圖層和模型層。Model2把一個項目分成三部分,包括視圖、控制、模型。這樣不僅提高的代碼的復用率與項目的擴展性,且大大降低了項目的維護成本。Model 1模式的實現比較簡單,適用於快速開發小規模項目,Model1中JSP頁面身兼View和Controller兩種角色,將控制邏輯和表現邏輯混雜在一起,從而導致代碼的重用性非常低,增加了應用的擴展性和維護的難度。Model2消除了Model1的缺點。

Model1

Model2

常見的伺服器端MVC框架有:Struts、Spring MVC、ASP.NET MVC、Zend Framework、JSF;常見前端MVC框架:angularjs、reactjs、backbone;由MVC演化出了另外一些模式如:MVP、MVVM。

二、Spring MVC介紹

Spring MVC是Spring Framework的一部分,是基於Java實現MVC的輕量級Web框架。Spring MVC的特點:
1、輕量
2、高效
3、與Spring相容性好
4、功能強大
RESTful、數據驗證、格式化、綁定機制、本地化、主題等
5、簡潔靈活

Spring的web框架圍繞DispatcherServlet設計。 DispatcherServlet的作用是將請求分發到不同的處理器。從Spring 2.5開始,使用Java 5或者以上版本的用戶可以採用基於註解的controller聲明方式。官網上說Spring的web模塊提供了大量獨特的功能,包括:
清晰的角色劃分:控制器(controller)、驗證器(validator)、 命令對象(command object)、表單對象(form object)、模型對象(model object)、 Servlet分發器(DispatcherServlet)、 處理器映射(handler mapping)、視圖解析器(view resolver)等等。 每一個角色都可以由一個專門的對象來實現。

強大而直接的配置方式:將框架類和應用程式類都能作為JavaBean配置,支持跨多個context的引用,例如,在web控制器中對業務對象和驗證器(validator)的引用。

可適配、非侵入:可以根據不同的應用場景,選擇合適的控制器子類 (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容器。

三、第一個Spring MVC 項目:Hello World

3.1、通過Maven新建一個Web項目

在Eclipse中新建Maven項目,選擇“Create a simple project”,創建一個簡單項目,不選擇模板。

修改層面信息,更加詳細的內容請參考前面寫過的文章:

將webcontent中的所有內容複製到webapp目錄下,並刪除webContent目錄,刪除後的結果如下:

修改項目的部署信息,刪除測試文件夾,添加webapp為項目根目錄:

 如果不打算在pom.xml中添加對Server runtime的依賴,則這裡必須手動添加依賴,如下圖所示:

另外如果pom.xml報錯,修改任意位置保存。

3.2、添加依賴的jar包

1、修改pom.xml文件、添加jar包的依賴,主要有:Spring框架核心庫、Spring MVC、JSTL等,具體信息如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.zhangguo</groupId>
    <artifactId>SpringMVC01</artifactId>
    <version>0.0.1</version>
    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.version>4.3.0.RELEASE</spring.version>
    </properties>

    <dependencies>
        <!--Spring框架核心庫 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- Spring MVC -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- JSTL -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
</dependencies>
</project>

當依賴成功時,會載入的jar包如下:

3.3、修改web.xml註冊中心控制器DispatcherServlet

Spring MVC框架像許多其他MVC框架一樣, 請求驅動,圍繞一個中心Servlet分派請求及提供其他功能,DispatcherServlet是一個實際的Servlet (它繼承自HttpServlet 基類)。如下圖所示當發起請求時被前置的控制器攔截到請求,根據請求參數生成代理請求,找到請求對應的實際控制器,控制器處理請求,創建數據模型,訪問資料庫,將模型響應給中心控制器,控制器使用模型與視圖渲染視圖結果,將結果返回給中心控制器,再將結果返回給請求者。

修改web.xml文件註冊該Servlet,修改後的web.xml文件如下:

<?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類 -->
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 啟動順序,數字越小,啟動越早 -->
        <load-on-startup>1</load-on-startup>
        <init-param>
            <!--SpringMVC配置參數文件的位置 -->
            <param-name>contextConfigLocation</param-name>
            <!--預設名稱為ServletName-servlet.xml -->
            <param-value>classpath*:springmvc-servlet.xml</param-value>
        </init-param>
    </servlet>

    <!--所有請求都會被springmvc攔截 -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app> 

3.4、添加Spring MVC配置文件

在src/main/java源代碼目錄下添加springmvc-servlet.xml配置文件,配置的形式與Spring容器配置基本類似,為了支持基於註解的IOC,設置了自動掃描包的功能,具體配置信息如下:

<?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"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    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-4.3.xsd
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">

    <!-- 自動掃描包,實現支持註解的IOC -->
    <context:component-scan base-package="com.zhangguo.springmvc01" />

    <!-- Spring MVC不處理靜態資源 -->
    <mvc:default-servlet-handler />

    <!-- 支持mvc註解驅動 -->
    <mvc:annotation-driven />

    <!-- 視圖解析器 -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver"
        id="internalResourceViewResolver">
        <!-- 首碼 -->
        <property name="prefix" value="/WEB-INF/view/" />
        <!-- 尾碼 -->
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

 在視圖解析中我們把所有的視圖都存放在/WEB-INF/目錄下,這樣是為了視圖安全,因為這個目錄客戶端不能直接訪問。

 3.5、創建HelloWorld控制器

在src/main/java源代碼目錄下創建包com.zhangguo.springmvc01.controller,在包下創建一個普通的類:HelloWorld,具體代碼如下:

package com.zhangguo.springmvc01.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/Hello")
public class HelloWorld {
    @RequestMapping("/Sayhi")
    public String SayHi(Model model) {
        model.addAttribute("message", "Hello Spring MVC!");
        return "sayhi";
    }
}

 註解為@Controller是為了讓Spring IOC容器初始化時自動掃描到;@RequestMapping是為了映射請求路徑,這裡因為類與方法上都有映射所以訪問時應該是/Hello/Sayhi;方法中聲明Model類型的參數是為了把Action中的數據帶到視圖中;方法返回的結果是視圖的名稱sayhi。

3.6、創建視圖

在WEB-INF/view目錄中創建視圖,視圖將從Action中帶回的信息展示,具體內容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello Spring MVC!</title>
</head>
<body>
    <h2>${message}</h2>
</body>
</html>

3.7、測試運行

啟動Tomcat運行項目,請註意查看啟動信息,如果有異常應該先解決異常信息,運行成功後的結果如下所示:

3.8、示例下載

 點擊下載示例

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.安裝 版本說明:Win10+R3.2.5+JKD1.7+eclipse-jee-mars-R-win32-x86_64 2.R中調用Java 載入rJava包,運行library(rJava),註意:在一個會話中,包只需載入一次。如果需要,你可以自定義啟動環境以自動載入會頻繁使用的那些包,下麵是 ...
  • 有以下文本 要求匹配 註釋外的內容,匹配之後的內容: aaa bbb ddd eee hhh 可以利用/^xxx/../^xxx/結構來匹配 ,但是出現了以下的嵌套結構: aaa bbb #if defined(lxx_mmi_del) ccc #endif ddd eee #if defined( ...
  • 一、文件的編碼 分析: * 1. “& 0xff”的解釋: * 0xFF表示的是16進位(十進位是255),表示為二進位就是“11111111”。 * 那麼&符表示的是按位數進行與(同為1的時候返回1,否則返回0) * 2.位元組byte與int類型轉換: * Integer.toHexString( ...
  • 原文鏈接: "克裡斯的小屋——Python 實現的關鍵詞查找小工具" 引言 平時工作時,有時會遇到這樣的情景:在一個目錄及其子目錄下所有的文本文件中查找某個關鍵字、詞或者完整的句子。當然,如果是在 平臺上, 就能實現這樣的功能。不過最近學習了 相關的知識,自然是想做出一款帶有界面的小工具,可以跨平臺 ...
  • 互聯網的發展史上,安全性一直是開發者們相當重視的一個主題,為了實現數據傳輸安全,我們需要保證:數據來源(非偽造請求)、數據完整性(沒有被人修改過)、數據私密性(密文,無法直接讀取)等。 ...
  • 本文根據官方文檔全面講解了shinydashboard包的安裝與使用,希望有幫助! ...
  • 根據日誌,確實發生了FullGC,計算資源被耗光 ...
  • 1、拆分消息隊列 原本在登錄註冊的時候需要使用到簡訊發送,這個需要使用到消息隊列,當時只放入在項目中 現在的新需求在各個環節都有不同的消息推送,短息服務,以及日誌保存,這些索性單獨拎出來作為一個服務提供 (消息隊列採用RabbitMQ,各位看管有興趣可以參考之前發的文章,另外MQ也有ActiveMQ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...