Spring MVC 快速體驗的五個步驟: 1. 配置web.xml 2. 創建Spring配置文件applicationContext.xml 3. 創建model 4. 創建controller 5. 創建視圖文件userlist.jsp 6. 創建Servlet配置文件Spring-servlet.xml
1. 配置web.xml
一個web中可以沒有web.xml文件,也就是說,web.xml文件並不是Web工程必須的。web.xml文件用來初始化配置信息:比如Welcome頁面、servlet、servlet-mapping、filter、listener、啓動加載級別等。 下面來看看Spring MVC中web.xml文件的配置方法:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <!-- 使用ContextLoaderListener配置時,需要告訴它Spring配置文件的未知--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- SpringMVC的前端控制器 --> <!-- 當 DispatcherServlet 載入後,會從Spring-servlet.xml文件中加載Spring應用的上下文--> <!-- DispatcherServlet 主要用來加載包含Web組件的bean,如控制器、視圖解析器 以及 處理器映射--> <servlet> <servlet-name>Springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:Spring-servlet.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Springmvc</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping> <!--配置上下文載入器--> <!-- 上下文載入器載入除DispatcherServlet加載的其它應用中的bean。這些bean通常是驅動應用後端的中間層和數據層組件 --> <!-- 最常用的上下文載入器是一個Servlet監聽器,其名稱爲ContextLoaderListener--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
Spring的MVC之所以必須要配置web.xml,其實最關鍵的是要配置兩個地方。
- contextConfigLocation:Spring的核心就是配置文件,可以說配置文件是Spring中必不可少的東西,而這個參數就是使Web和Spring的配置文件相結合的一個關鍵配置。
- DispatcherServlet:包含了SpringMVC的請求邏輯,Spring使用此類攔截Web請求並進行相應的邏輯處理。DispatcherServlet 將試圖從一個叫做
<servlet-name>-servlet.xml
的文件中載入應用上下文,其默認位於WEB-INF目錄下。也可以通過contextConfigLocation來自定義位置。
2. 創建Spring配置文件applicationContext.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"> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
InternalResourceViewResolver是一個輔助Bean,會在ModelAndView返回的視圖名前加上prefix指定的前綴,再在最後加上suffix指定的後綴。
3. 創建model
模型對於SpringMVC來說必不可少,如果處理程序非常簡單,完全可以忽略。模型創建主要的目的就是承載數據,使數據傳輸更加方便。
public class User { private String username; private Integer age; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
4. 創建controller
控制器用於處理Web請求,每個控制器都對應着一個邏輯處理。
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; public class UserController extends AbstractController { protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { List<User> userList = new ArrayList<User>(); User userA = new User(); User userB = new User(); userA.setUsername("zhangsan"); userA.setAge(12); userB.setUsername("lisi"); userB.setAge(12); userList.add(userA); userList.add(userB); return new ModelAndView("userlist", "users", userList); } }
請求的最後返回了ModelAndView類型的實例。ModelAndView類在SpringMVC中佔有很重要的地位,控制器執行方法都必須返回一個ModelAndView,ModelAndView對象保存了視圖以及視圖顯示的模型數據,例如其中的參數如下。
- 第一個參數userlist:視圖組件的邏輯名稱。這裏視圖的邏輯名稱就是userlist,視圖解析器會使用該名稱查找實際的View對象。
- 第二個參數users:傳遞給視圖的,模型對象的名稱。
- 第三個參數userList:傳遞給視圖的,模型對象的值。
5. 創建視圖文件userlist.jsp。
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <html> <head> <title>This is SpringMVC demo pages</title> </head> <body> <c:forEach items="${users}" var="user"> <c:out value="${user.username}"></c:out> <br> <c:out value="${user.age}"></c:out> <br> </c:forEach> </body> </html>
視圖文件用於展現請求處理結果,通過對JSTL的支持,可以很方便的展現在控制器中放入ModelAndView中的處理結果數據。
6. 創建Servlet配置文件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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/userlist.htm">userController</prop> </props> </property> </bean> <!-- 這裏的 id="userController"對應的是<bean id="simpleUrlMapping">中的<prop>裏面的value--> <bean id="userController" class="UserController"/> </beans>
因爲SpringMVC是基於Servlet的實現,所以在Web啓動的時候,服務器會首先嚐試加載對應於Servlet的配置文件,而爲了讓項目更加模塊化,通常我們將Web部分的配置都存放於此配置文件中。 至此,已經完成了SpringMVC的搭建,啓動服務器,輸入網址 http://localhost:8080/SpringMVC/userlist.html。 可以看到服務器返回界面,如下圖所示。