spring MVC框架配置(詳細版)

第一步:導入所需要的包

從官網http://repo.spring.io/libs-release-local/org/springframework/spring/4.3.0.RELEASE/ 下載 spring-framework-4.3.0.RELEASE-dist.zip 壓縮包。

這裏寫圖片描述

解壓之後,找到libs文件夾下的.jar包:

這裏寫圖片描述

將libs文件夾下的.jar包複製到項目的“WebContent”–>“WEB-INF”–>“lib”目錄下。

這裏寫圖片描述

注意這裏面有一個 commons-logging-1.1.1.jar 包是在上述下載的libs目錄下所沒有的,需要另外導入。我已經將上述需要的.jar包打包好,各位讀者有需要也可以前往下載(http://download.csdn.net/detail/u014607184/9589548)。

第二步:配置web.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://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>springMVC</display-name>

  <servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <!-- 可以自定義servlet.xml配置文件的位置和名稱,默認爲WEB-INF目錄下,名稱爲[<servlet-name>]-servlet.xml,如spring-servlet.xml

    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-servlet.xml</param-value>&nbsp;
    </init-param>
    -->
       <load-on-startup>1</load-on-startup><!-- 自動啓動 -->
  </servlet>
  <!-- 設置服務器映射,表示哪些請求會送到該服務器去處理 -->
  <servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/</url-pattern><!-- 表示哪些URL會送到該服務器去處理 -->
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
     <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

</web-app>

註冊一個<servlet>,DispatcherServlet爲總的控制中心,所有請求首先會送到這裏,<servlet-mapping>設置哪些會送到總的控制中心去處理。上述的<url-pattern>/</url-pattern>設置了所有通過文檔的請求都會交由總的控制中心去處理。

第三步:配置spring-servlet.xml文件

每個請求到了總控制中心後根據需求,將會分配到相對應的控制器controller去處理,那麼請求是如何映射在對應的controller的。DispatcherServlet初始化時,會自動去查詢配置文件完成對象實例化,查詢位置默認爲WEB-INF目錄下,名稱爲[<servlet-name>]-servlet.xml,如上述文件中我們設置的spring-servlet.xmlspring-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-4.1.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">                    

    <!-- 設置映射方式 -->
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="index.html">testController</prop> <!-- 通過url來綁定controller -->
            </props>
        </property>
    </bean>

    <bean id="testController" class="test.springMVC.testController"></bean>

    <!-- scan the package and the sub package -->
    <context:component-scan base-package="test.SpringMVC" />

    <!-- don't handle the static resource -->
    <mvc:default-servlet-handler />

    <!-- if you use annotation you must configure following setting -->
    <mvc:annotation-driven />

    <!-- 視圖解析器 -->
    <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
        <!-- 前綴 -->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!-- 後綴 -->
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

當請求到達DispatcherServlet時,會根據Handler Mapping組件來決定每一個請求會分配表到哪一個controller去處理,上述程序中Handler Mapping設置是下面這部分:

這裏寫圖片描述

上述代碼中通過URL來進行映射,可以設置<prop>屬性,該屬性相當於鍵值對,key爲請求的URL,裏面的值爲對應的控制器id,如圖所示。也就是說,當請求的URL爲index.html時,會根據Handler Mapping的設置,將該請求分配到id爲testController控制器去處理。

當請求分配到了對應的controller處理完成後,controller會返回一個邏輯視圖名稱,對於這個邏輯視圖名,需要用到視圖解析器來解析,如下設置了利用URL來解析,設置了前綴和後綴屬性,這樣就可以根據controller返回的邏輯視圖名拼接成一個完整的URL。

這裏寫圖片描述

例如controller返回的邏輯視圖名是“index”,那麼加上前綴和後綴就,完整的URL視圖爲“/WEB-INF/jsp/index.jsp”。同樣的返回視圖名,如果我們設置的後綴屬性爲.html,那麼訪問的就是“/WEB-INF/jsp/index.html”文件。我們在“/WEB-INF/jsp/”目錄下新建兩個文檔index.htmlindex.jsp:

這裏寫圖片描述

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>html test</title>
</head>
<body>
<h1>這是html頁面</h1>
</body>
</html>

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
this is jsp page
</body>
</html>

這裏通過URL尋找view的時候,有些讀者可能會報錯:Handler processing failed; nested exception is java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config,這是因爲還缺少兩個跟jstl相關的jar包。這時可以去網站 http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/ 下載jakarta-taglibs-standard-1.1.2.zip這個包,解壓縮後將standard和jstl兩個包放入lib下即可,這個在我打包上傳的spring MVC所需jar包下載(http://download.csdn.net/detail/u014607184/9589548)。

第四步:配置控制器controller

創建controller主要的方式是直接實現Controller 接口或AbstractController抽象類。這裏我們直接實現Controller 接口,在項目的src目錄先創建一個test.springMVC包,在該包創建testController.java。testController.java文檔如下:

package test.springMVC;

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

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

public class testController implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, 
            HttpServletResponse response) throws Exception {
        System.out.println("controller is working");
        return new ModelAndView("index");
    }

}

上述代碼通過繼承Controller接口,創建了一個testController控制器,該控制器只有一個handleRequest方法,返回一個ModelAndView,返回的ModelAndView只是一個視圖邏輯名稱,該邏輯名需要通過ViewResolver和view來解析。

第五步:測試

最後就是將項目添加到服務器上,選擇服務器,右擊後選擇add and remove 選項,然後將項目移動服務器中。

這裏寫圖片描述

啓動服務器,在外部瀏覽器中通過http://localhost:8080/springMVC/index.html訪問,可以得到index.jsp顯示頁面

這裏寫圖片描述

另外在Eclipse控制檯能看到我們寫在testController控制器中打印出來的字符串,說明該請求觸發了testController控制器

這裏寫圖片描述

如果我們將spring-servlet.xml文件中關於視圖解析部分改成如下

這裏寫圖片描述

重啓服務器後,在外部瀏覽器通過相同的地址(http://localhost:8080/springMVC/index.html)去訪問,返回的就是index.html文檔顯示的結果

這裏寫圖片描述

至此,spring MVC框架的基本配置已經完成,並且經過測試可用。關於spring MVC框架更多的學習將在後續的博客中介紹。

發佈了55 篇原創文章 · 獲贊 311 · 訪問量 52萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章