1. 程式人生 > >SpringMVC4環境搭建例項詳解(步步為贏)

SpringMVC4環境搭建例項詳解(步步為贏)

Spring WEB MVC框架提供了一個MVC(model-view-controller)模型-檢視-控制器的結構和元件,利用它可以開發更靈活、鬆耦合的web應用。MVC模式使得整個服務應用的各部分(控制邏輯、業務邏輯、UI介面展示)分離開來,使它們之間的耦合性更低。

  • Model
    模型層封裝了整個應用程式的資料物件並且將會持久化POJO

  • View
    檢視層負責渲染模型層的資料,一般最終使用HTML展示到使用者瀏覽器或移動裝置終端

  • Controller
    控制層負責處理使用者的請求、構建合適的模型資料並將其傳輸到檢視層進行渲染

SpringMVC核心-DispatcherServlet分發器

SpringMVC框架是設計用來處理所有的HTTP請求和響應的,它的核心是圍繞著一個分發器DispatcherServlet。在Spring Web MVC DispatcherServlet的請求處理流程如下圖所示:

這裡寫圖片描述

以下是對應一個HTTP請求時分發器的處理流程:
  • 1.接收到一個Http請求後,DispatcherServlet 告訴對映處理器HandlerMapping 去呼叫相應的Controller(控制器)。

  • 2.然後Controller控制器根據接收到的的請求呼叫相應的Service服務方法,基於請求所使用的GET或PUT等其它請求方式。Service方法將會根據業務邏輯設定模型資料並且返回一個檢視給DispatcherServlet分發器。

  • 3.DispatcherServlet 分發器將會請求檢視解析器ViewResolver去處理找到該請求對應的已經定義的檢視view

  • 4.一旦檢視確定了,DispatcherServlet 會將模型資料傳輸給該檢視view,最終渲染到使用者瀏覽裝置上。

上述提到的所有元件:對映處理器HandlerMapping, 控制器Controller 和檢視解析器ViewResolver都是WebApplicationContext 的組成部分。WebApplicationContext 擴充套件了ApplicationContext ,但是為web應用程式提供了更多的必要的特性。

SpringMVC需要的配置要求

為了將使用者的請求對映到分發器DispatcherServlet 去處理,需要在web.xml中配置URL對映。
以下是一個宣告和映射了Demo應用HelloWeb的分發器DispatcherServlet 的配置示例(就是servlet對映配置):

<web-app id="WebApp_ID" 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">

    <display-name>Spring MVC Application</display-name>

   <!--宣告一個servlet配置-->
   <servlet>
      <servlet-name>HelloWeb</servlet-name>
      <servlet-class>
         org.springframework.web.servlet.DispatcherServlet
      </servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>

   <!--配置servlet與處理請求的對映模式-->
   <servlet-mapping>
      <servlet-name>HelloWeb</servlet-name>
      <url-pattern>/</url-pattern>
   </servlet-mapping>

</web-app>

首先: web.xml檔案根據servlet規範放在WebContent/WEB-INF目錄下,使用Mavan風格的放在scr/main/webapp/WEB-INF目錄下。
一旦初始化HelloWeb的的DispatcherServlet,框架將會嘗試從WebContent/WEB-INF目錄下的[servlet-name]-servlet.xml配置檔案載入應用上下文application context。在這個Demo中,會去載入 HelloWeb-servlet.xml檔案。這是預設行為,我們也可以指定載入配置檔案的位置,這點後面會有例項示範。

然後: <\servlet-mapping>標籤指明什麼樣的URL才會被DispatcherServlet對映處理。這裡配置的是所有的HTTP請求都會被HelloWeb的DispatcherServlet對映處理

如果你不想使用預設的檔名[servlet-name]-servlet.xml和預設的context載入位置WebContent/WEB-INF(或者scr/main/webapp/WEB-INF),你也可以在web.xml中通過新增一個servlet監聽器ContextLoaderListener來自定義指定檔名和位置。示例配置如下:

<web-app...>

<!-------- DispatcherServlet的定義,上面的配置這裡略過了----->
....


<!--指定上下文配置檔案的位置,指定classpath下的spring-mvc-config.xml檔案
使用Maven風格,可以將該檔案放在src/main/resources目錄下
-->
<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath:spring-mvc-config.xml</param-value>
</context-param>
<!--增加監聽器-->
<listener>
   <listener-class>
      org.springframework.web.context.ContextLoaderListener
   </listener-class>
</listener>
</web-app>

接下來: 使用自定義servlet上下文配置後,我們來看看spring-mvc-config.xml檔案的配置資訊,該檔案放在src/main/resources目錄下,文末會展示Demo結構檢視:

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

    <context:component-scan base-package="org.byron4j" />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <mvc:resources mapping="/resources/**" location="/resources/" />

    <mvc:annotation-driven />

</beans>

這裡有幾點比較重要:

  • [servlet-name]-servlet.xml檔案(現在我們自定義為spring-mvc-config.xml) 會建立已經定義的bean, 會覆蓋其他位置已經定義的同名的全域性的bean,這點是血淚的教訓,參見mapper注入失敗問題解決

  • <context:component-scan...> 標籤用於啟用Spring MVC註解掃描功能,像@Controller、 @RequestMapping等

  • InternalResourceViewResolver 將使用下面定義的規則來解析檢視名稱。 按照我們配置的規則:一個名為”hello”的邏輯檢視的實現將會是/WEB-INF/jsp/目錄下的hello.jsp檔案來渲染。

接下來: 我們編寫一些實際使用的元件例如Controller, Model and View。

定義一個Controller

DispatcherServlet代表請求通過控制器來執行該請求的指定業務處理功能。@Controller 註解表明該類是一個控制器。@RequestMapping註解用於請求的URL對映到一個類或一個特定的處理方法

package org.byron4j.helloWeb;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Hello world!
 *
 */
@Controller
@RequestMapping("/hello")
public class HelloController{

   @RequestMapping(method = RequestMethod.GET)
   public String printHello(ModelMap model) {
      model.addAttribute("message", "Hello Spring MVC Framework!");
      return "hello";
   }

}

@Controller註解將一個類定義為Spring MVC 的控制器controller。 在這裡@RequestMapping的第一個使用位置是表明這個Controller類的所有方法都是處理/hello請求的。 第二個位置的用法@RequestMapping(method = RequestMethod.GET) 表明printHello()方法作為這個Controller類的預設服務方法去處理HTTP的GET請求。你可以依葫蘆畫瓢定義一個方法處理同名的的URL的POST請求,試試,你僅僅需要在新方法中將@RequestMapping(method = RequestMethod.GET)替換為@RequestMapping(method = RequestMethod.POST)即可。

你也可以將上面的Controller替換成下面的的這種寫法:

@Controller
public class HelloController{

   @RequestMapping(value = "/hello", method = RequestMethod.GET)
   public String printHello(ModelMap model) {
      model.addAttribute("message", "Hello Spring MVC Framework!");
      return "hello";
   }

}

功能是一樣的。
@RequestMapping的value屬性指明該方法僅僅對映處理的GET方式的請求/hello。 以下有幾點比較重要:

  • 你可以在Controller的處理方法中呼叫其他業務方法去處理業務邏輯。

  • 基於定義的業務邏輯,你需要在該方法中建立一個模型物件。你可以設定不同的模型屬性,這些屬性可以讓檢視訪問最終渲染給使用者。這個demo中建立了一個包含”message”屬性的模型物件。

  • 一個定義的服務方法可以返回一個包含渲染模型的檢視名字的字串。這個demo返回的”hello” 作為一個邏輯檢視的名字。

建立JSP檢視

SpringMVC支援多種型別的檢視顯示技術。包括 JSP, HTML, PDF, Excel worksheets, XML, Velocity 末班, XSLT, JSON, Atom 和RSS feeds, JasperReports, Thymeleaf等等。這裡我們使用jap檢視, 在/WEB-INF/hello/jsp目錄下建立一個hello.jsp:

<html>
   <head>
   <title>Hello Spring MVC</title>
   </head>
   <body>
   <h2>${message}</h2>
   </body>
</html>

這裡的${message} 是Controller中模型物件設定的屬性message的值。你還可以在你的檢視中展示另外的其他屬性。

demo最後自定義的web.xml:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">

    <display-name>Spring MVC Application</display-name>
    <welcome-file-list>
        <welcome-file>
            /index.jsp
        </welcome-file>
    </welcome-file-list>
   <!--宣告一個servlet配置-->
   <servlet>
      <servlet-name>dispatcherServlet</servlet-name>
      <servlet-class>
         org.springframework.web.servlet.DispatcherServlet
      </servlet-class>
      <!-- 自定義servlet檔名、檔案位置需要使用該引數配置 -->
      <init-param>
        <!-- 分發器攔截的上下文-contextConfigLocation|指定servlet context配置檔案的位置 -->
         <param-name>contextConfigLocation</param-name>
         <param-value>classpath:spring-mvc-config.xml</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
   </servlet>

   <!--配置servlet與處理請求的對映模式,會對所有*.jsp的字尾請求處理-->
   <servlet-mapping>
      <servlet-name>dispatcherServlet</servlet-name>
      <url-pattern>/</url-pattern>
   </servlet-mapping>


   <!--指定上下文配置檔案的位置,指定classpath下的spring-mvc-config.xml檔案
使用Maven風格,可以將該檔案放在src/main/resources目錄下
-->
<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath:spring-mvc-config.xml</param-value>
</context-param>
<!--增加監聽器-->
<listener>
   <listener-class>
      org.springframework.web.context.ContextLoaderListener
   </listener-class>
</listener>
</web-app>

demo專案的pom.xml:

<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>org.byron4j</groupId>
    <artifactId>helloWeb</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>helloWeb</name>
    <url>http://blog.csdn.net/zixiao217</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.version>4.2.5.RELEASE</spring.version>
        <log4j.version>1.2.17</log4j.version>
    </properties>

    <dependencies>

        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- Log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>


        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
        <finalName>helloWeb</finalName>
    </build>
</project>

以下是demo在eclipse的package explorer檢視:

這裡寫圖片描述

以下是demo在eclipse的navigator檢視:
這裡寫圖片描述
這裡寫圖片描述

若參考本文編寫第一個SpringMVC Demo跑不起來,可以留言提出意見。

相關推薦

SpringMVC4環境搭建例項(步步)

Spring WEB MVC框架提供了一個MVC(model-view-controller)模型-檢視-控制器的結構和元件,利用它可以開發更靈活、鬆耦合的web應用。MVC模式使得整個服務應用的各部分(控制邏輯、業務邏輯、UI介面展示)分離開來,使它們之間的耦

Hibernate框架環境搭建

obj 模型 junit demo 半成品 src 數據表 mys 種類 具體說hibernate框架的項目搭建之前,首先說一下什麽是框架。。。 框架可以理解成一個半成品的項目,它封裝了一些功能,我麽需要掌握的是如何駕馭這些功能,不需要操心它是怎麽實現的。其實他

react結合ts與mobx環境搭建步驟

  由於react ts mobx 版本上的更新,一些配置資訊也在隨時更新,使得有時候,在更新版本時,一些配置檔案出錯,讓我們措手不及,現將三者環境搭建配上,廢話不多說   思路:新建react 應用,利用彈射實現進行mobx支援配置,最後搭建typescript   裝包:使用的用yarn,相信為什麼使

事無鉅細 Hadoop2.6.4 環境搭建步驟

本文詳細記錄了OneCoder通過自己的Mac環境,在開發伺服器(CentOS 6.5)上搭建Hadoop的詳細過程。因為事無鉅細,所以可能會”跑題”。 ssh連線免密碼配置 由於配置過程中需要頻繁的進行ssh連線到開發伺服器執行命令以及通過

大資料環境搭建之Kafka完全分散式環境搭建步驟

文章目錄 環境準備 解壓安裝 配置檔案 服務啟動 1、啟動分散式叢集的zookeeper 2、啟動Kafka服務 偽分散式搭建完畢之後,只要稍作修改就

大資料環境搭建之Spark分散式環境搭建步驟

文章目錄 環境準備 安裝配置 下載 配置環境變數 修改conf目錄下檔案 複製程式到從結點 啟動Spark叢集 在bigdata01機器上啟動Spark

大資料環境搭建之HBase偽分散式環境搭建步驟

文章目錄 HBase簡介 環境準備 JDK1.8以上 HBase 1.2.6 安裝模式 安裝配置 解壓安裝包 配置檔案 hbase-env.

大資料環境搭建之Kafka偽分散式環境搭建步驟

文章目錄 Kafka簡介 環境準備 解壓安裝 配置檔案 服務啟動 Topic相關操作 控制檯生產者 控制檯消費者 Kafka簡介

Linux下基於Hadoop的大資料環境搭建步驟(Hadoop,Hive,Zookeeper,Kafka,Flume,Hbase,Spark等安裝與配置)

Linux下基於Hadoop的大資料環境搭建步驟詳解(Hadoop,Hive,Zookeeper,Kafka,Flume,Hbase,Spark等安裝與配置) 系統說明 搭建步驟詳述 一、節點基礎配置 二、H

Qt5.11.1_Opencv3.4.4 Windows環境搭建錯誤

最近在搞opencv計算機影象處理,要用Qt與Opencv聯合開發,搭建環境一路坎坷,搞了差不多快一天,但是最終還是成功搭建了。廢話不多說,給大家分享一下搭建的心得: 搭建的具體部分大家可以看 https://blog.csdn.net/sinat_362646

Visual Studio整合Qt環境搭建_與測試

1.利器≠戾氣 接了兩個專案,而這兩個專案說起來也很有意思。 一個是監護儀軟體開發,要求利用MFC進行開發,因為在此之前接近兩年時間一直進行MFC開發;來到清華後,碰到了好多的計算機程式設計大牛

vue開發環境搭建步驟

1.首先安裝node, npm環境(http://nodejs.cn/download/) node.js安裝配置步驟(https://www.runoob.com/nodejs/nodejs-install-setup.html) 安裝完成之後可以查詢到你安裝的node版本和npm版本,你電腦的環境變數

Linux 檢視系統硬體資訊(例項) ubuntu的測試環境

linux檢視系統的硬體資訊,並不像windows那麼直觀,這裡我羅列了檢視系統資訊的實用命令,並做了分類,例項解說。 cpu lscpu命令,檢視的是cpu的統計資訊. [email protected]:~$ lscpu Architecture: i686

Linux 查看系統硬件信息匯總 (部份實例Centoso例)

linux 查看系統硬件信息(實例詳解 linux 查看系統硬件信息匯總 1.cpu #lscpu命令,查看的是cpu的統計信息.Architecture: x86_64CPU op-mode(s): 32-bit, 64-bitByte Order:

Linux環境變量與應用

edi port exit 訪問 不能 但是 也有 文件 mman 在bash shell中,環境變量分為: >全局變量 >局部變量 全局變量,不僅對shell可見,對其子進程也可見 查看預設的全局環境變量: ghostwu@dev:~$ prin

用maven來創建scala和java項目代碼環境(圖文)(Intellij IDEA(Ultimate版本)、Intellij IDEA(Community版本)和Scala IDEA for Eclipse皆適用)(博主推薦)

搭建 ava XML .com 自動 ado ima 強烈 mapred 為什麽要寫這篇博客?   首先,對於spark項目,強烈建議搭建,用Intellij IDEA(Ultimate版本),如果你還有另所愛好嘗試Scala IDEA for Eclipse,有時間自己去

基於Github搭建SrpingCloudConfig

創建 pass end stat IE 小夥伴 des 版本問題 serve 最近在看SpringCloud,為了幫助自己學習和記憶,所以寫下這篇文章。 從SpringCloud官方文檔上看SpringCloudConfig其實為我們提供配置外部化的一個服務,可以理解成就是

Linux文件管理:OA菠菜平臺搭建命令

進行 要求 使用 enter鍵 操作 serve x文件 內容 一個 OA菠菜平臺搭建命令可以刪除一個目錄中的一個或多個文件或目錄,也可以將某個目錄及其下屬的所有文件及其子目錄均刪除掉。對於鏈接文件,只是刪除整個鏈接文件,而原有文件保持不變。企 娥:217 1793 408

Linux 環境變量

light scrip cal png lse round aps nbsp alt PATH: 環境變量,執行ls等非內置命令式,系統會查找對應的路徑是否有 export設置臨時的環境變量[root@localhost ~]# touch /tmp/hello [roo

tomcat Win10 配置環境變量

height 出錯 當前 安裝和配置 點擊 start wid nbsp localhost 在Win10系統總該如何配偶之tomcat 環境變量?今天win10之家給大家帶來了關於win10系統中配置tomcat環境的操作方法。在配置之前我們需要做以下幾點: 步驟:安裝和