第一步:導入所需要的包
從官網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>
</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.xml
。spring-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.html
和index.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框架更多的學習將在後續的博客中介紹。