1. 程式人生 > >精煉 Spring MVC 教程 之「框架初體驗」

精煉 Spring MVC 教程 之「框架初體驗」

1 簡介

Spring MVC 屬於 SpringFrameWork 的後續產品,已經融合在 Spring Web Flow 裡面。Spring 框架提供了構建 Web 應用程式的全功能 MVC 模組,而 Spring MVC 就是其中最優秀的 MVC 框架。自從 Spring 2.5 版本釋出後,由於支援註解配置,易用性得到了大幅度的提高;Spring 3.0 更加完善,實現了對 Struts 2 的超越。從現階段來看,Spring MVC 是當前應用最多的 MVC 框架,而且在很多公司,通常會把 Spring MVC 和 Mybatis 整合起來使用。

2 框架原理

在 Spring MVC 框架中,一個請求從開始到響應,需要經歷的步驟為:從 Request(請求)開始,依次進入 DispatcherServlet(核心分發器) 、HandlerMapping(處理器對映)、Controller(控制器)、ModelAndView(模型和檢視)、ViewResolver(檢視解析器)、View(檢視)和 Response(響應),其中 DispatcherServlet、HandlerMapping 和 ViewResolver 只需要在 XML 檔案中配置即可,從而大大提高了開發的效率,特別是對於 HandlerMapping 框架為其提供了預設的配置。Spring MVC 框架的結構圖如下所示:

SpringMVC

3 搭建 Spring MVC 框架

首先,我們需要下載 Spring MVC 框架的各種依賴包,下載地址為「Spring MVC 框架的各種依賴包」;然後,建立 Java Web 專案,專案名可以隨意取,在這裡,我們不妨就取名為springmvc,構建專案結構圖如下:

projectStructure

接下來,在External Libraries中匯入 Spring MVC 框架的相關依賴包,具體 jar 包的匯入方法可以參考「詳述 IntelliJ IDEA 之 新增 jar 包」。至於需要匯入的 jar 包,在我們之前下載的「Spring MVC 框架的各種依賴包」中都可以找到,下面附上需要匯入的 jar 名稱:

spring-aop-3.2.2.jar			       		AOP
spring-aspects-3.2.2.jar					AOP
spring-beans-3.2.2.jar						核心包
spring-context-3.2.2.jar					擴充套件包
spring-context-support-3.2.2.jar			對擴充套件包支援
spring-core-3.2.2.jar						核心包
spring-expression-3.2.2.jar	spring			表示式
spring-web-3.2.2.jar						web b/s
spring-webmvc-3.2.2.jar						springmvc

com.springsource.org.aopalliance-1.0.0.jar					AOP
com.springsource.org.apache.commons.logging-1.1.1.jar		通用日誌

第 1 步:建立控制器 Controller(即 Java 類)

package com.hit.controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @Author Charies Gavin
 * @Date 2017/8/21,下午3:40
 * @Description 測試控制器
 */
public class TestController  extends AbstractController{

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request,
                                                 HttpServletResponse response) throws Exception {
        // 獲取 Controller 的名稱,即地址
        System.out.println(request.getRequestURI());

        // 邏輯名
        return new ModelAndView("index");
    }
}

第 2 步:配置web.xml檔案,主要是配置 DispatcherServlet,即核心分發器

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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">

    <!-- 配置 DispatcherServlet,對所有後綴為 action 的 url 進行過濾 -->
    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>
</web-app>

第 3 步:編輯 JSP 頁面,用於顯示,在這裡可以將該 JSP 頁面複製到 pages 目錄一份備用

<%--
  Created by IntelliJ IDEA.
  User: Charies Gavin
  Date: 2017/8/21
  Time: 下午3:32
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
   <title>Spring MVC</title>
  </head>

  <body>
    This is my Spring MVC!
  </body>
</html>

第 4 步:建立action-servlet.xml檔案,主要是宣告 Controller 和配置 ViewResolver,即控制器和檢視解析器

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       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-3.2.xsd">

    <!-- 宣告 Controller -->
    <bean name="/home.action" class="com.hit.controller.TestController" />

    <!-- 內部資源檢視解析器,字首 + 邏輯名 + 字尾 -->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

在完成以上操作之後,我們就已經初步搭建了 Spring MVC 框架。下面,在配置一下 web 伺服器就可以進行體驗啦!在這裡,我們用的 Web 伺服器是 tomcat,配置完的結果如下圖所示:

tomact

  • 標註1:自定義 tomcat 伺服器的名稱;
  • 標註2:配置 Web 伺服器預設啟動的瀏覽器;
  • 標註3:配置虛擬機器引數;
  • 標註4:配置 Java 執行環境;
  • 標註5:配置 HTTP 埠號;
  • 標註6:部署 tomcat 伺服器。

在此處,點選 標註6 所示的Deployment,部署 tomcat 伺服器:

deployment

  • 標註1:建議選擇exploded版本進行部署;
  • 標註2:配置應用上下文。

至此,Spring MVC 框架搭建成功,執行程式後,將在 Chrome 瀏覽器顯示如下內容:

index

4 擴充套件

在前面,我們已經成功搭建 Spring MVC 框架,並且執行成功。下面,我們嘗試著對專案進行修改,即修改action-servlet.xml配置檔案的位置和名稱,修改後的專案結構圖如下:

projectS

如上圖所示,我們調整action-servlet.xml的位置到src目錄下,並修改其名稱為springmvc-servlet.xml,接下來,我們直接重啟 tomcat 伺服器是可以重啟成功的,這意味著:

  • Spring MVC 不是隨著容器啟動而啟動,它是在第一次訪問時進行載入的。

雖然 tomcat 伺服器啟動成功,但在我們訪問http://localhost:8080/springmvc的時候就會報錯啦!因為 Java Web 專案預設的是到WEB-INF中尋找配置檔案,而我們又調整了配置檔案的位置,報錯也就是必然的啦!要想解決這個問題,需要我們在web.xml檔案中進行初始化引數的配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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">

    <!-- 配置 DispatcherServlet,對所有後綴為 action 的 url 進行過濾 -->
    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <!-- 修改 Spring MVC 配置檔案的位置和名稱 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>

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

這樣,當我們重新啟動 tomcat 伺服器,並訪問http://localhost:8080/springmvc的時候,就會訪問成功啦!

index

**溫馨提示:**在此專案中,由於使用的是 IntelliJ IDEA ,因此不用咱們自己建立lib包,直接將jar包導到External Libraries中即可。