1. 程式人生 > >系列一、SpringMVC概念及測試案例

系列一、SpringMVC概念及測試案例

三層架構和MVC概念

一.、三層架構概念

咱們開發伺服器端程式,一般都基於兩種形式,一種C/S架構程式,一種B/S架構程式,使用Java語言基本上都是開發B/S架構的程式,B/S架構又分成了三層架構

表現層:WEB層,用來和客戶端進行資料互動的。表現層一般會採用MVC的設計模型,MVC是屬於表現層

業務層:處理公司具體的業務邏輯的

持久層:用來操作資料庫的

二.、MVC模型概念

MVC全名是Model View Controller 模型檢視控制器,每個部分各司其職

Model:資料模型,JavaBean的類,用來進行資料封裝。

View:指JSP、HTML用來展示資料給使用者

Controller:用來接收使用者的請求,整個流程的控制器。用來進行資料校驗等

SpringMVC的入門案例

一. SpringMVC的概述

1. 是一種基於Java實現的MVC設計模型的請求驅動型別的輕量級WEB框架
2. Spring MVC屬於SpringFrameWork的後續產品,已經融合在Spring Web Flow裡面。Spring 框架提供了構建 Web 應用程式的全功能 MVC 模組
3. 使用 Spring 可插入的 MVC 架構,從而在使用Spring進行WEB開發時,可以選擇使用Spring的SpringMVC框架或整合其他MVC開發框架,如Struts1(現在一般不用),Struts2等

Spring在三層架構中的位置

二. SpringMVC的優勢

1、清晰的角色劃分:
     前端控制器(DispatcherServlet)
     請求到處理器對映(HandlerMapping)
     處理器介面卡(HandlerAdapter)
     檢視解析器(ViewResolver)
     處理器或頁面控制器(Controller)
    驗證器( Validator)
    命令物件(Command 請求引數繫結到的物件就叫命令物件)
    表單物件(Form Object 提供給表單展示和提交到的物件就叫表單物件)。
2、分工明確,而且擴充套件點相當靈活,可以很容易擴充套件,雖然幾乎不需要。
3、由於命令物件就是一個 POJO,無需繼承框架特定 API,可以使用命令物件直接作為業務物件。
4、和 Spring 其他框架無縫整合,是其它 Web 框架所不具備的。
5、可適配,通過 HandlerAdapter 可以支援任意的類作為處理器。
6、可定製性,HandlerMapping、ViewResolver 等能夠非常簡單的定製。
7、功能強大的資料驗證、格式化、繫結機制。
8、利用 Spring 提供的 Mock 物件能夠非常簡單的進行 Web 層單元測試。
9、本地化、主題的解析的支援,使我們更容易進行國際化和主題的切換。
10、強大的 JSP 標籤庫,使 JSP 編寫更容易。
………………還有比如RESTful風格的支援、簡單的檔案上傳、約定大於配置的契約式程式設計支援、基於註解的零配置支援等等。

三、SpringMVC和Struts2框架的對比

共同點:
它們都是表現層框架,都是基於 MVC 模型編寫的。
它們的底層都離不開原始 ServletAPI。
它們處理請求的機制都是一個核心控制器。


區別:
Spring MVC 的入口是 Servlet, 而 Struts2 是 Filter
Spring MVC 是基於方法設計的,而 Struts2 是基於類,Struts2 每次執行都會建立一個動作類。所以 Spring MVC 會稍微比 Struts2 快些。
Spring MVC 使用更加簡潔,同時還支援 JSR303, 處理 ajax 的請求更方便(JSR303 是一套 JavaBean 引數校驗的標準,它定義了很多常用的校驗註解,我們可以直接將這些註解加在我們 JavaBean 的屬性上面,就可以在需要校驗的時候進行校驗了。)
Struts2 的 OGNL 表示式使頁面的開發效率相比 Spring MVC 更高些,但執行效率並沒有比 JSTL 提升,尤其是 struts2 的表單標籤,遠沒有 html 執行效率高。

四、SpringMVC的入門程式

第一、在pom檔案中匯入相關的依賴、這裡可以有一個其他知識點就是鎖定所有spring包的版本號

       <resources>
            <!-- mapper.xml檔案在java目錄下 -->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>
    <!--鎖定所有spring的版本-->
    <properties>
        <spring.version>5.0.2.RELEASE</spring.version>
        <!--編譯版本修改-->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

第二. 配置核心的控制器(配置DispatcherServlet)在web.xml配置檔案中核心控制器DispatcherServlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <!-- SpringMVC的核心控制器:表現層-->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 然後配置Servlet的初始化引數,讀取springmvc的配置檔案,建立spring容器 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!-- 首先是:servlet啟動時載入物件 -->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
        

第三步、編寫springmvc.xml的配置檔案

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 配置spring建立容器時要掃描的包 -->
    <context:component-scan base-package="com.cc"></context:component-scan>

    <!-- 配置檢視解析器:返回請求成功後的頁面 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--檔案所在的目錄-->
        <property name="prefix" value="pages/"></property>
        <!--檔案的字尾名-->
        <property name="suffix" value=".jsp"></property>
    </bean>
    <!--配置spring開啟註解mvc的支援-->
    <mvc:annotation-driven></mvc:annotation-driven>
</beans>

第四步、編寫index.jsp和HelloController控制器類

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>

</head>
<body>
        <h1>你好tomcat</h1>
        <a href="/hello">入門程式</a>
</body>
</html>
package com.cc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.xml.ws.RequestWrapper;

/**
 * 控制類,接收請求
 */
@Controller
public class HelloController {
    //請求對映,springmvc的註解,前臺請求訪問的地址
    @RequestMapping(path = "/hello")
    public  String sayHello(){
        System.out.println("hello springMVC");
        return "success";//根據返回的值跳轉頁面
    }
}

第五步、在WEB-INF目錄下建立pages資料夾,編寫success.jsp的成功頁面


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>success</title>
</head>
<body>
     <h2>跳轉成功</h2>
</body>
</html>

第六步、部署專案、然後在瀏覽器訪問

下面是入門程式的流程總結

下面是一更加具體的流程圖,這裡有的概念大家一定要弄清楚才行!!!前端控制器

相關推薦

系列SpringMVC概念測試案例

三層架構和MVC概念 一.、三層架構概念 咱們開發伺服器端程式,一般都基於兩種形式,一種C/S架構程式,一種B/S架構程式

kafka系列kafka安裝部署

一、環境準備 作業系統:Cent OS 7 Kafka版本:kafka_2.10 Kafka官網下載:請點選 JDK版本:1.8.0_171 zookeeper-3.4.10 二、kafka安裝配置 1、下載Kafka並解壓   下載:

springboot系列springboot產生背景介紹

一、為什麼用Springboot 長期以來 Java 的開發一直讓人所詬病: ·Java 專案開發複雜度極其高; · Java 專案的維護非常困難; · 在雲時代如何實現專案的快速部署以及快速啟動; · 即便使用了大量的開發框架,發現我們的開發也沒少多少; · 當所有的人認為 Spring 不在前

linux驅動由淺入深系列:usb子系統之三(usb系統中的裝置配置介面端點概念程式碼解釋)

一個usb裝置對應一個或多個配置 一個配置包含一個或多個usb介面 一個usb介面可能存在一種或多種設定 一個設定會使用零個或多個usb端點裝置 裝置就是一個usb物理裝置,一個usb裝置可以只包含一個簡單功能的device,也可以包含一個由hub連線的多個裝置,叫作複合裝

spring學習--基礎概念

轉化 代碼 工作 cit app 現在 引入 xslt 異常 http://www.iteye.com/topic/1123081 上面這個網站(iteye)是國內學習spring非常棒的網站之一。 一、IOC   IOC,即控制反轉,由IOC容器實現IOC功能,可以將類和

docker 部署 flask()配置環境測試

index www cnblogs 發現 images 註意事項 文章 進入 系統啟動 簡介: flask也是要部署的。不能老在我們的pycharm裏面跑測試服務器。 各種配置linux,我看就算了吧。我們用docker部署。 也就兩三行

Android異步框架RxJava 1.x系列() - 觀察者模式實現

from 預覽 目錄 ole 普通 清零 handler 使用 tps Android異步框架RxJava 1.x系列(一) - 觀察者模式及實現 前言 RxJava 是一款基於 Java VM 實現的響應式編程擴展庫 - 基於觀察者模式的異步和事件處理框架。RxJava

dubbo系列架構介紹調用過程解析

使用 wid mes info 註冊中心 response sources zh-cn 組裝 一、整體設計 圖例說明: 圖中左邊淡藍背景的為服務消費方使用的接口,右邊淡綠色背景的為服務提供方使用的接口,位於中軸線上的為雙方都用到的接口。 圖中從下至上分為十層,

調用鏈系列Zipkin搭建Spring-boot集承

使用 可擴展 守護進程 收集 通過 下載 start.s zip 偏差 一、背景介紹 1、Zipkin是什麽 Zipkin分布式跟蹤系統;它可以幫助收集時間數據,解決在microservice架構下的延遲問題;它管理這些數據的收集和查找;Zipkin的設計是基於谷歌的G

機器學習實戰(Machine Learning in Action)學習筆記————03.決策樹原理原始碼解析測試

機器學習實戰(Machine Learning in Action)學習筆記————03.決策樹原理、原始碼解析及測試關鍵字:決策樹、python、原始碼解析、測試作者:米倉山下時間:2018-10-24機器學習實戰(Machine Learning in Action,@author: Peter Harr

Springmvc入門程式

web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/

springmvc摘記(概括)

springmvc 1)什麼是springmvc:     是spring提供的web框架; 2)組成     DispatcherServlet前端處理器、處理器對映器、處理器控制器、檢視解析器、檢視  (3處理器+1解

軟體設計DDD概念落地時的一些零碎思考和記錄2

主要是專案中一些落地經驗和記錄 技術人員、開發人員 大部分程式設計師真的不善於溝通,經常會顯得很保守; 他們技術上的困惑、誤解乃至鬱悶都很難直接的表達清楚; 他們對自己的錯誤“印象”很深; 他們內心是希望提高、改進,出自各種目的,也包括為了輕鬆點或者“牛逼”點,這屬於優點; ORM已

(RaspberryPi)樹莓派系列 - 安裝系統

inter prior 自動連接 www. ctr 桌面 con user 計算 簡介 樹莓派(英語:Raspberry Pi),是一款基於Linux的單片機計算機。它由英國的樹莓派基金會所開發,目的是以低價硬件及自由軟件促進學校的基本計算機科學教育。 官網:https

資料型別運算子

一、變數 變數定義規則   1.變數名只能是數字,字母或下劃線的任意組合   2.變數名的第一個字元不能是數字   3.以下關鍵字不能宣告為變數名{'and','as','del','def','if','else','with','continue','break','exec','elif','e

SpringSpringMVC版本配置

  一、Spring版本   Spring的最新版本是Spring 5.x,Spring 4.x的最後版本是Spring 4.4.x,會維護到2020年(Spring的GitHub主頁對此有說明)。        二、SpringMVC   SpringMVC可以說是,應用了Spring的

Kafka概念入門

Kafka是分散式釋出-訂閱訊息系統。它最初由LinkedIn公司開發,之後成為Apache專案的一部分。Kafka是一個分散式的,可劃分的,冗餘備份的永續性的日誌服務。它主要用於處理活躍的流式資料。 在大資料系統中,常常會碰到一個問題,整個大資料是由各個子系統組成,資料需要在各個子系統中高效能

Java&Selenium自動化測試實現頁面元素頁面物件測試程式碼分離

一、摘要 本篇博文將介紹自動化測試實現頁面元素、頁面物件及測試程式碼分離在自動化框架中的實現 二、解析頁面元素定位資訊 首先,將頁面元素與實際的程式碼分離,首先我們將頁面元素定位資訊和定位表示式儲存在屬性檔案中,例如我們PaaS平臺提供Mysql服務的頁面,在工程中新建一個名為MysqlService.

【Redis】簡單介紹操作

一、什麼是Redis Redis 是一個高效能的開源的、C語言寫的Nosql(非關係型資料庫),資料儲存在記憶體中。 Redis 是以key-value形式儲存,和傳統的關係型資料庫不一樣。不一定遵循傳統資料庫的一些基本要求,比如說,不遵循sql標準,事務,表結構等等,非關係型資料庫嚴格

RabbitMQ系列RabbitMQ基礎概念和使用場景

RabbitMQ是基於AMQP協議的訊息中介軟體。AMQP中主要有兩個元件:Exchange 和 Queue (在 AMQP 1.0 裡還會有變動),如下圖所示,綠色的 X 就是 Exchange ,紅色的是 Queue ,這兩者都在 Server 端,又稱作 Broker