[轉載]使用IntelliJ IDEA開發SpringMVC網站(二)框架配置

stray發表於2019-01-19

摘要
講解如何配置SpringMVC框架xml,以及如何在Tomcat中執行
轉載請註明出處:Gaussic(一個致力於AI研究卻不得不兼顧專案的研究生)。

注:此文承接上一文:使用IntelliJ IDEA開發SpringMVC網站(一)開發環境

訪問GitHub下載最新原始碼:https://github.com/gaussic/Sp…

文章已針對IDEA 2016做了一定的更新,部分更新較為重要,請重新閱讀文章並下載最新原始碼。
另外:文中的附圖部分仍然為舊版本,請參照自身版本進行配置。

五、SpringMVC框架配置

進行完上面的配置,那就說明現在基本的開發環境已經搭建好了,現在要開始進行SpringMVC的網站開發。

1、web.xml配置

開啟srcmainwebappWEB-INF下的web.xml檔案,稍微更新一下web.xml的版本,可以支援更高階的一些語法,如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
 
    <display-name>SpringMVCDemo Web Application</display-name>
 
</web-app>

在<web-app>中加入一個servlet:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
 
    <display-name>SpringMVCDemo Web Application</display-name>
 
    <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

該servlet名為mvc-dispatcher(名稱可修改),用於攔截請求(url-pattern為 / ,說明攔截所有請求),並交由Spring MVC的後臺控制器來處理。這一項配置是必須的。

為了能夠處理中文的post請求,再配置一個encodingFilter,以避免post請求中文出現亂碼情況:

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <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>

至此,web.xml配置完畢。

2、xxx-servlet.xml配置

在配置完web.xml後,需在web.xml同級目錄下新建 mvc-dispatcher-servlet.xml(-servlet前面是在servlet裡面定義的servlet名):

mvc-dispatcher-servlet.xml檔案如下:

<?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.xsd">
 
</beans>

MVC框架有model、view、controller三部分組成。model一般為一些基本的Java Bean,view用於進行相應的頁面顯示,controller用於處理網站的請求。

在srcmainjava中新建一個用於儲存controller的package:

在controller包中新建java類MainController(名稱並不固定,可任意取),並修改如下:

package com.gaussic.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
 
/**
 * Created by dzkan on 2016/3/8.
 */
@Controller
public class MainController {
 
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String index() {
        return "index";
    }
}

(1)@Controller註解:採用註解的方式,可以明確地定義該類為處理請求的Controller類;

(2)@RequestMapping()註解:用於定義一個請求對映,value為請求的url,值為 / 說明,該請求首頁請求,method用以指定該請求型別,一般為get和post;

(3)return “index”:處理完該請求後返回的頁面,此請求返回 index.jsp頁面。

回到mvc-dispatcher-servlet.xml,進行相關配置。首先加入component-scan標籤,指明controller所在的包,並掃描其中的註解(最好不要複製,輸入時按IDEA會在beans xmlns中新增相關內容):

<?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"
       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">
 
    <!--指明 controller 所在包,並掃描其中的註解-->
    <context:component-scan base-package="com.gaussic.controller"/>
</beans>

再進行js、image、css等靜態資源訪問的相關配置,這樣,SpringMVC才能訪問網站內的靜態資源:

<!-- 靜態資源(js、image等)的訪問 -->
<mvc:default-servlet-handler/>

再開啟springmvc註解模式,由於我們利用註解方法來進行相關定義,可以省去很多的配置:

<!-- 開啟註解 -->
<mvc:annotation-driven/>

再進行檢視解析器的相關配置:

<!--ViewResolver 檢視解析器-->
<!--用於支援Servlet、JSP檢視解析-->
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
</bean>

關於controller如何找到檢視檔案,這裡需要詳細的說明。在 controller 的一個方法中,返回的字串定義了所需訪問的jsp的名字(如上面的index)。在jspViewResolver中,有兩個屬性,一個是prefix,定義了所需訪問的檔案路徑字首,另一是suffix,表示要訪問的檔案的字尾,這裡為 .jsp。那麼,如果返回字串是 xxx ,SpringMVC就會找到 /WEB-INF/pages/xxx.jsp 檔案。

完成以上配置後,mvc-dispatcher-servlet.xml檔案如下圖所示:

<?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.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
 
    <!--指明 controller 所在包,並掃描其中的註解-->
    <context:component-scan base-package="com.gaussic.controller"/>
 
    <!-- 靜態資源(js、image等)的訪問 -->
    <mvc:default-servlet-handler/>
 
    <!-- 開啟註解 -->
    <mvc:annotation-driven/>
 
    <!--ViewResolver 檢視解析器-->
    <!--用於支援Servlet、JSP檢視解析-->
    <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

我們刪除 webapp 目錄下的 index.jsp 檔案,在WEB-INF目錄下新建資料夾pages,再在pages目錄下新建 index.jsp,並修改為如下所示:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3個meta標籤*必須*放在最前面,任何其他內容都*必須*跟隨其後! -->
 <title>SpringMVC Demo 首頁</title>
 
    <!-- 新 Bootstrap 核心 CSS 檔案 -->
 <link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css">
 
    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn`t work if you view the page via file:// -->
    <!--[if lt IE 9]>
    <script src="//cdn.bootcss.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="//cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->
</head>
<body>
<h1>這裡是SpringMVC Demo首頁</h1>
 
<h3>出現此頁面,說明配置成功。</h3>
 
<!-- jQuery檔案。務必在bootstrap.min.js 之前引入 -->
<script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
 
<!-- 最新的 Bootstrap 核心 JavaScript 檔案 -->
<script src="//cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
</body>
</html>

這裡使用了Bootstrap的CDN加速服務,如果要使用本地的Bootstrap,請前往Bootstrap官網下載,並放在 webapp 目錄下,然後引入到 index.jsp 中,這裡不做詳細介紹。

現在,需要配置 Tomcat 來執行該專案。點選介面右上角的向下箭頭,選擇 Edit Configurations:

點選左上角的”+“號,選擇Tomcat Server,(如果沒有請選擇最下方的33 items more,找到Tomcat Server),再選擇Local:

進入如下介面:

點選 Application server 右邊的 Configure,匯入Tomcat 目錄(專案已更新到Tomcat8,請按照自身版本匯入):

在配置好tomcat的路徑後,如下圖所示,發現依然存在警告,且左方的Tomcat7圖示上有一個錯誤標記,說明還沒有配置完全:

我們還需要將專案部署到 Tomcat 伺服器中。點選 Deployment,再點選右邊的”+“號,新增一個Artifact:

選擇第二個:war exploded,點選OK,這樣,該專案就已經部署到了tomcat中:

再點選OK,整個Tomcat配置結束:

點選介面右上角的紅框中的綠色箭頭,就可以啟動 Tomcat 了,其控制檯輸出將在 IDEA 下方顯示

啟動後,瀏覽器將自動彈出專案首頁:

這樣,說明配置完成。這裡總結一下其相關機制:首先,瀏覽器訪問 localhost:8080,後臺controller攔截該請求,進行相應的處理(此處無),在跳轉到檢視 index.jsp進行顯示。此後,將會進行詳細的介紹。

相關文章