Java EE 學習(6):IDEA + maven + spring 搭建 web(2)- 配置 Spring

參考:https://my.oschina.net/gaussik/blog/513353css

注:此文承接上一文:Java EE 學習(5):IDEA + maven + spring 搭建 web(1)html

 記錄: 此節主要完成 springMVC 的配置,並進行了測試。html5

4. SpringMVC框架配置

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

(1) web.xml配置jquery

    打開 src\main\webapp\WEB-INF\ 下的 web.xml 文件,稍微更新一下 web.xml 的版本,能夠支持更高級的一些語法,以下:web

 默認狀況下生成的 web.xml 的配置以下:spring

<!DOCTYPE web-app PUBLIC             # DOCTYPE 指定 文檔類型; 接下來聲明瞭一個 <web-app> 元素,全部關於 Web 應用的配置元素都將加入到這個 <web-app> 元素中 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
</web-app>

這並是不咱們須要的,所以,稍微更新一下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>testWeb Web Application</display-name>     # 此處的 display-name 中的項目名要與本身的一致

</web-app>

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

<?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>testWeb Web Application</display-name>   # 此處的 display-name 中的項目名稱要與本身的一致

    <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>  # 定義 Servlet 的名字
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  # 指定實現這個 Servlet 的類
        <load-on-startup>1</load-on-startup>  # 指定當 Web 應用啓動時,裝載 Servlet 的次序。 當這個值爲 正數或0,Servlet 容器先加載數值小的 Servlet ,再依次加載其餘數值大的 Servlet. 若是這個值爲負數或者沒有設定,那麼 Servlet 容器將在 Web 客戶首次訪問這個 Servlet 時加載它。
    </servlet>

    <servlet-mapping> # <servlet-mapping> 元素用來 指定 <servlet-name> 和 <url-pattern> 映射。
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>  # <url-pattern> 是指訪問 Servlet 的相對 URL 路徑。  根據該屬性,訪問 mvc-dispatcher 的 URL 爲: http://localhost:8080/, mvc-dispatcher 接收到客戶請求後,再把請求轉發給相應的 .jsp 並生成頁面。  
    </servlet-mapping>
</web-app>

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

   爲了可以處理中文的post請求,再配置一個encodingFilter,以免post請求中文出現亂碼狀況:

<!--Spring 框架給咱們提供過濾器 CharacterEncodingFilter
  這個過濾器就是針對於每次瀏覽器請求進行過濾的,而後再其之上添加了父類沒有的功能即處理字符編碼。
  其中encoding用來設置編碼格式,forceEncoding 用來設置是否理會 request.getCharacterEncoding()方法,設置爲 true 則強制覆蓋以前的編碼格式。-->
<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 配置完畢。

<?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>

  <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-app>
完整的 web.xml

(2)xxx-servlet.xml配置

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

    新建該xml文件後,點擊右上角的Creat Spring facet,以下:

出現 Setup Frameworks 界面,點擊OK,這樣,IntelliJ IDEA就識別了 SpringMVC 的配置文件:

ok 後,出現以下:

    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用於處理網站的請求。

   在 src\main\java 中新建一個用於保存 controller 的 package (類型)

注意: 此處的包名 是 本身的包名.

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

package com.example.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.example.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.example.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的路徑後,以下圖所示,發現依然存在警告,且右邊的Tomcat8圖標上有一個錯誤標記,說明尚未配置徹底:

咱們還須要將項目部署到 Tomcat 服務器中。點擊 Deployment,再點擊右邊的」+「號,添加一個Artifact:

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

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

點擊界面右上角的紅框中的綠色箭頭,就能夠啓動 Tomcat 了,其控制檯輸出將在 IDEA 下方顯示

啓動後,瀏覽器將自動彈出項目首頁:

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

(另外一文,鏈接數據庫,見Java EE 學習(7):IDEA + maven + spring 搭建 web(3)- 配置數據庫)

相關文章
相關標籤/搜索