1. 程式人生 > >Spring MVC之基於xml配置的web應用構建

Spring MVC之基於xml配置的web應用構建

開發十年,就只剩下這套架構體系了! >>>   

更多spring博文參考: http://spring.hhui.top/

直接用SpringBoot構建web應用可以說非常非常簡單了,在使用SpringBoot構建後端服務之前,一直用的是Spring + SpringMVC基於xml的配置方式來玩的,所以在正式進入SpringBoot Web篇之前,有必要看一下不用SpringBoot應該怎麼玩的,也因此方便凸顯SpringBoot的優越性

<!-- more -->

I. Web 構建

1. 專案依賴

我們選擇使用傳統的SpringMVC + Tomcat/Jetty 執行war包方式來執行任務,建立一個maven專案之後,先新增上基本的依賴

<artifactId>201-mvc-xml</artifactId>
<!-- 注意這一行,我們指定war包 -->
<packaging>war</packaging>

<properties>
    <spring.version>5.1.5.RELEASE</spring.version>
</properties>

<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</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>
</dependencies>

2. 專案結構

對於web專案,和我們傳統的不一樣的地方在於,會多一個 webapp 目錄,在這個目錄的 WEB-INF 資料夾下,會存有幾個必要的配置檔案

專案結構

圖中的三個目錄,都屬於比較重要的

  • java : 存放原始碼
  • resources: 專案資原始檔存放地
  • webapp: web的配置檔案,資原始檔預設存放地

3. 配置檔案說明

java和resources這兩個目錄沒啥好說的,主要來看一下webapp下面的三個xml配置檔案

a. web.xml

在我們使用xml配置的生態體系中,這個配置檔案至關重要;本節說到SpringMVC構建的應用,是在Servlet的生態上玩耍的;而web.xml這個配置檔案,比如我們常見的Servlet定義,filter定義等等,都在這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/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://java.sun.com/xml/ns/j2ee/web-app_3_1.xsd" version="3.1">

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>

    <!-- 解決亂碼的問題 -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <async-supported>true</async-supported>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>

    <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

上面的配置中,定義了 DispatcherServlet的名字為 mvc-dispatcher,根據規範,會有一個叫做 mvc-dispatcher-servlet.xml的配置檔案,其中的配置將應用於DispatcherServlet的上下文

b. mvc-dispatcher-servlet.xml

這個檔案主要可以用來定義Servlet相關的配置資訊,比如檢視解析,資源路徑指定等;一個最簡單的配置如下

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:beans="http://www.springframework.org/schema/mvc"
       xmlns="http://www.springframework.org/schema/beans"
       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 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">


    <!--指定掃描的包路徑,自動註冊包含指定註解的物件到Spring容器,幷包含了 context:annotation-config 的作用-->
    <context:component-scan base-package="com.git.hui.spring"/>
</beans>

web.xml中,context:component-scan非常非常重要,用來指定自動掃描並註冊bean到容器的包路徑,上面這一行配置,簡單來講可以認為做了下面幾件事情

  • 掃描包 com.git.hui.spring 下所有的類,如果類上有 @Component, @Service, @Repository, @Contorller, @RestContorller, @Configuration等註解,會例項化為bean物件,並註冊到Spring容器中
  • 其次就是實現DI的功能,實現bean的依賴注入

接下來看一下,如果不加上面這一行,也想實現對應的效果改怎樣配置呢?

<!-- 這個使用來啟用註冊的Bean,簡單來講就是使Ioc工作起來 -->
<context:annotation-config/>

<bean name="printServer" class="com.git.hui.spring.PrintServer"/>
<bean name="helloRest" class="com.git.hui.spring.HelloRest"/>

原始碼後面會給出,首先是主動定義兩個bean,其中 helloRest 為Controller, printServer 為一個Service,並被注入到helloRest中

如果只定義了兩個bean,而不加上<context:annotation-config/>,則HelloRest中的printService會是null,演示如下圖

異常示意圖

此外,如果用了舊的Spring版本,直接用前面的配置,可能依然無法訪問web服務,這個時候有必要加一下下面的註解; 對於使用aop,希望使用cglib代理的,需要如下配置

<!-- 支援mvc註解-->
<mvc:annotation-driven/>

<!-- 使用cglib實現切面代理 -->
<aop:aspectj-autoproxy proxy-target-class="true"/>

額外說明:現在基本上不怎麼用xml配置了,有更簡單的註解方式,上面的配置內容瞭解即可

c. applicationContext.xml

前面的截圖中,還有個配置檔案,這個是幹嘛的呢?

DispatchServlet載入包含在web元件中的bean(如mapper,Controller,ViewResolver);我們應用中,還有些其他的Spring Bean(比如其他rpc訪問的服務bean代理,db驅動元件等)則更多的是放在這個配置檔案中定義

當然這個裡面最簡單的配置內容就是啥都沒有,比如我們的demo工程

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

4. 例項程式碼

配置完了之後,我們簡單的定義一個reset服務用來測試,比如一個簡單dean物件和一個簡單的Controller

簡單的bean物件

@Component
public class PrintServer {

    public void print() {
        System.out.println(System.currentTimeMillis());
    }

}

Controller如下

@RestController
public class HelloRest {

    @Autowired
    private PrintServer printServer;

    @ResponseBody
    @GetMapping("hello")
    public String sayHello(HttpServletRequest request) {
        printServer.print();
        return "hello, " + request.getParameter("name");
    }
}

5. 測試

上面我們的web應用就搭建完畢了,然後就是把它部署起來,看下能不能愉快的玩耍了;我們有兩個方法

方法一:tomcat方式

  • 打包 mvn clean package -DskipTests=true ,然後target目錄下會生成一個war包
  • 將war包放在tomcat的webapps目錄下,然後啟動tomcat進行訪問即可

方法二:jetty方式

前面一種方式,有很多公司的服務是這麼玩的,將服務達成war包丟到tomcat中,然後服務上線;然而在本地開發測試時,這樣有點麻煩(當然可以通過idea配置tomcat除錯法,個人感覺,依然麻煩)

我們使用jetty來玩耍就很簡單了,首先在pom中新增配置,引入jetty外掛

<build>
    <finalName>web-mvc</finalName>
    <plugins>
        <plugin>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>9.4.12.RC2</version>
            <configuration>
                <httpConnector>
                    <port>8080</port>
                </httpConnector>
            </configuration>
        </plugin>
    </plugins>
</build>

然後啟動方式可以使用命令: mvn jetty:run, 也可以使用idea,如下,直接雙擊執行或者右鍵選擇debug模式啟動

啟動說明

然後我們愉快的啟動測試過程如下

web測試

到此,一個基於 Spring + SpringMVC + Jetty + xml配置的web應用就搭建起來了;下一篇我們將講一下,純java註解方式,拋棄xml配置又可以怎樣搭建一個web應用

II. 其他

- 系列博文

web系列:

mvc應用搭建篇:

0. 專案

1. 一灰灰Blog

一灰灰的個人部落格,記錄所有學習和工作中的博文,歡迎大家前去逛逛

2. 宣告

盡信書則不如,以上內容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激

3. 掃描關注

一灰灰blog

QrCode

知識星球

相關推薦

Spring MVC基於xml配置web應用構建

開發十年,就只剩下這套架構體系了! >>>   

Spring MVC基於java config無xml配置web應用構建

開發十年,就只剩下這套架構體系了! >>>   

Spring boot + Mybatis(基於xml配置方式) WEB專案

一.工具(idea) 二.建立專案 最後finish; 3.配置與編寫demo     目錄: 3.1 springBoot配置檔案:application.yml;也可使用properties檔案 spring: #資料來源配置 datas

Spring(八)基於Java配置

onf 需要 rgs ava poi .com class 解釋 mes 基於 Java 的配置 到目前為止,你已經看到如何使用 XML 配置文件來配置 Spring bean。如果你熟悉使用 XML 配置,那麽我會說,不需要再學習如何進行基於 Java 的配置是,因為你要

Spring(七)基於註解配置

關於 int ESS schema 控制 div except strong ont 基於註解的配置 從 Spring 2.5 開始就可以使用註解來配置依賴註入。而不是采用 XML 來描述一個 bean 連線,你可以使用相關類,方法或字段聲明的註解,將 bean 配置移動到

cors跨域請求問題 關於spring -springmvc -mybatis .基於xml配置方式

1:場景還原     今天要寫一個方法, 需求是  在購物車服務上,  呼叫一個個人中心的方法 ,用到了 跨域請求.      我就在個人中心的 上面寫了個方法, 並在springMVC.xml中,配置了    &

SSM框架專案搭建系列(六)—Spring AOP基於XML的宣告式AspectJ

AOP通過“橫切”技術,剖解開封裝的物件內部,並將那些影響了多個類的公共行為封裝到一個可重用模組,將其命名為Aspect,即切面。 切面就是將那些與業務無關(例如:許可權認證、日誌、事務處理),確為業務模組所共同呼叫的邏輯或責任封裝起來,便於減少系統的重複程式

Spring Boot 整合 EazyUI 打造 Web 應用

Spring Boot 之整合 EazyUI 打造 Web 應用 EazyUI 是一個簡單的使用者介面元件的集合。由於 EazyUI 已經封裝好大部分 UI 基本功能,能幫使用者減少大量的 js 和 css 程式碼。所以,EazyUI 非常適合用於開發簡單的系統或原型系統。 本文示例使用技術點:

Spring MVC中,基於XML配置基於註解的依賴注入例項

一、首先是基於XML配置的依賴注入例項   在本例項中,Spring MVC並非主要講解內容,其檔案正規化不再重複,而有關依賴注入檔案包括:介面類car.java,實現了car介面的Taxi,java和Train.java。在User類中,有一個Car物件屬性。即此Car即

Spring AOP---基於ProxyFactory的類編碼方式和XML配置方式實現AOP

前一篇文章Spring AOP之—基於JDK動態代理和CGLib動態代理的AOP實現 介紹了AOP的底層實現,基於JDK動態代理和CGLib動態代理。手工編碼的方式很繁瑣,本文介紹通過ProxyFactory和配置的方式實現AOP,方便快捷。 一、Sp

Spring MVC +Mybatis + Maven 配置pom.xml配置

pom.xml配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoca

Spring基於註解的快取配置--web應用例項

現在介紹一下如何在基於註解springMVC的web應用中使用註解快取,其實很簡單,就是將springMVC配置檔案與快取註解檔案一起宣告到context中就OK了。 下面我就來構建一個基於spring註解小型的web應用,這裡我使用EHCache來作為快取方案。

springpom.xml配置

java del ng- onf leaf pro location tro fin 軟件152 譚智馗 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache

使用Spring框架入門一:基於XML配置的IOC/DI的使用

測試結果 plugins rac prepare lombok ray instance private mls 一、Spring框架   1、方法一:逐項導入基礎依賴包:     spring-core、spring-beans、spring-context、s

Spring 基於xml配置方式的AOP(8)

復制 calc owin img add ann frame proc message 1、ArithmeticCalculator.java 1 package com.proc; 2 3 public interface ArithmeticCalculator

java的江湖——對基於java的web應用開發整體認識

話說在上個世紀九十年代的中期,Internet開始商業化,他所帶來的便利性使人們趨之若鶩,人們尤其是一些大的企業都想用這個東西給自己的工作、生活以及學習帶來便利,但是這個時候計算機的軟硬體環境差異很大,經常會發現你在A環境中開發的軟體系統並不能在B環境中執行,在這樣的大背景下,java攜

spring事務管理,基於xml配置完成事務回滾;spring中資料庫表中欄位名和pojo中屬性名不一致時候,實現RowMapper介面手動封裝

宣告使用JDK8,spring5.0.7, 測試說明: service 層 宣告介面進行轉賬,從A轉賬B ,然後對AB 進行更新操作,在事務中對find方法開啟 只讀許可權,無法進行更新操作,造成事務回滾進行測試事務; 主要測試方法:* void tra

Spring Boot(20)---開發Web應用JSP篇

Spring Boot(20)---開發Web應用之JSP篇   前言 上一篇介紹了Spring Boot中使用Thymeleaf模板引擎,今天來介紹一下如何使用SpringBoot官方不推薦的jsp,雖然難度有點大,但是玩起來還是蠻有意思的。 正文 先來看看整體的框架

Spring Boot(19)---開發Web應用Thymeleaf篇

Spring Boot(19)---開發Web應用之Thymeleaf篇   前言 Web開發是我們平時開發中至關重要的,這裡就來介紹一下Spring Boot對Web開發的支援。 正文 Spring Boot提供了spring-boot-starter-web為Web

spring aop的基於xml以及註解的配置

AOP概述 springAOP:面向切面程式設計。是面向物件程式設計的一種有效補充。面向物件程式設計的三大要素是繼承、多型和封裝。即在類設計時,要求讓不同的類設計不同的方法。但是這種模式下,也會產生一些弊端。比如增加了程式碼的重複性。比如我們想在類中增加日誌的記錄,如果讓每個類都做日