轉自:http://blog.csdn.net/jadyer/article/details/7574635
首先是Web.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <!-- 使用ContextLoaderListener配置時,需要告訴它Spring配置文件的位置 -->
- <!-- 如果沒有指定,上下文載入器會在/WEB-INF/applicationContext.xml中找Spring配置文件 -->
- <!-- 我們可以通過在Servlet上下文中設置contextConfigLocation參數,來爲上下文載入器指定一個或多個Spring配置文件 -->
- <!-- 注意:contextConfigLocation參數是一個用逗號分隔的路徑列表,其路徑是相對於Web系統的根路徑的 -->
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/springmvc-servlet.xml, classpath:applicationContext-*.xml</param-value>
- </context-param>
- <!-- SpringMVC的前端控制器 -->
- <!-- 當DispatcherServlet載入後,它將從一個XML文件中載入Spring的應用上下文,該XML文件的名字取決於<servlet-name> -->
- <!-- 這裏DispatcherServlet將試圖從一個叫做springmvc-servlet.xml的文件中載入應用上下文,其默認位於WEB-INF目錄下 -->
- <!-- 所以ContextLoaderListener參數值也可寫成<param-value>classpath:applicationContext-*.xml</param-value> -->
- <servlet>
- <servlet-name>springmvc</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>springmvc</servlet-name>
- <url-pattern>*.htm</url-pattern>
- </servlet-mapping>
- <!-- 配置上下文載入器 -->
- <!-- 上下文載入器載入除DispatcherServlet載入的配置文件之外的其它上下文配置文件 -->
- <!-- 最常用的上下文載入器是一個Servlet監聽器,其名稱爲ContextLoaderListener -->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 使用ContextLoaderListener配置時,需要告訴它Spring配置文件的位置 -->
<!-- 如果沒有指定,上下文載入器會在/WEB-INF/applicationContext.xml中找Spring配置文件 -->
<!-- 我們可以通過在Servlet上下文中設置contextConfigLocation參數,來爲上下文載入器指定一個或多個Spring配置文件 -->
<!-- 注意:contextConfigLocation參數是一個用逗號分隔的路徑列表,其路徑是相對於Web系統的根路徑的 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-servlet.xml, classpath:applicationContext-*.xml</param-value>
</context-param>
<!-- SpringMVC的前端控制器 -->
<!-- 當DispatcherServlet載入後,它將從一個XML文件中載入Spring的應用上下文,該XML文件的名字取決於<servlet-name> -->
<!-- 這裏DispatcherServlet將試圖從一個叫做springmvc-servlet.xml的文件中載入應用上下文,其默認位於WEB-INF目錄下 -->
<!-- 所以ContextLoaderListener參數值也可寫成<param-value>classpath:applicationContext-*.xml</param-value> -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
<!-- 配置上下文載入器 -->
<!-- 上下文載入器載入除DispatcherServlet載入的配置文件之外的其它上下文配置文件 -->
<!-- 最常用的上下文載入器是一個Servlet監聽器,其名稱爲ContextLoaderListener -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
接下來是SpringMVC的配置文件springmvc-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:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
- <!-- 【配置映射處理器】 -->
- <!-- SpringMVC自帶的映射處理器均實現了Spring的Ordered接口,這意味着我們可以在應用系統中聲明多個處理器映射 -->
- <!-- 並且可以設置它們的優先級,這主要體現在order屬性上,其值越小,則對應的該映射處理器的優先級越高 -->
- <!-- 本例中,SimpleUrlHandlerMapping的order值比BeanNameUrlHandlerMapping的小 -->
- <!-- 這意味着DispatcherServlet在映射URL的時候,首先會諮詢SimpleUrlHandlerMapping -->
- <!-- 只有在SimpleUrlHandlerMapping無法返回結果時,才諮詢BeanNameUrlHandlerMapping -->
- <bean id="beanNameUrlMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
- <property name="order" value="1"/>
- </bean>
- <bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
- <property name="order" value="0"/>
- <property name="mappings">
- <props>
- <prop key="/userlist22.htm">userController</prop>
- <prop key="/userlist33.htm">userController</prop>
- </props>
- </property>
- </bean>
- <!-- 這裏的id="userController"對應的是<bean id="simpleUrlMapping">中的<prop>裏面的value -->
- <bean id="userController" class="com.jadyer.controller.UserController"/>
- <!-- DispatcherServlet使用的默認處理器映射是BeanNameUrlHandlerMapping,它使用URL樣式的名字 -->
- <bean name="/userlist11.htm" class="com.jadyer.controller.UserController"/>
- </beans>
<?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:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- 【配置映射處理器】 -->
<!-- SpringMVC自帶的映射處理器均實現了Spring的Ordered接口,這意味着我們可以在應用系統中聲明多個處理器映射 -->
<!-- 並且可以設置它們的優先級,這主要體現在order屬性上,其值越小,則對應的該映射處理器的優先級越高 -->
<!-- 本例中,SimpleUrlHandlerMapping的order值比BeanNameUrlHandlerMapping的小 -->
<!-- 這意味着DispatcherServlet在映射URL的時候,首先會諮詢SimpleUrlHandlerMapping -->
<!-- 只有在SimpleUrlHandlerMapping無法返回結果時,才諮詢BeanNameUrlHandlerMapping -->
<bean id="beanNameUrlMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
<property name="order" value="1"/>
</bean>
<bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="order" value="0"/>
<property name="mappings">
<props>
<prop key="/userlist22.htm">userController</prop>
<prop key="/userlist33.htm">userController</prop>
</props>
</property>
</bean>
<!-- 這裏的id="userController"對應的是<bean id="simpleUrlMapping">中的<prop>裏面的value -->
<bean id="userController" class="com.jadyer.controller.UserController"/>
<!-- DispatcherServlet使用的默認處理器映射是BeanNameUrlHandlerMapping,它使用URL樣式的名字 -->
<bean name="/userlist11.htm" class="com.jadyer.controller.UserController"/>
</beans>
然後是我們常見的Spring配置文件applicationContext-view.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:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
- <!-- 【配置視圖解析器】 -->
- <!-- InternalResourceViewResolver會在ModelAndView返回的視圖名前加上prefix指定的前綴,再在最後加上suffix指定的後綴 -->
- <!-- 由於UserController返回的ModelAndView中的視圖名是userlist,故該視圖解析器將在/WEB-INF/jsp/userlist.jsp處查找視圖 -->
- <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="prefix" value="/WEB-INF/jsp/"/>
- <property name="suffix" value=".jsp"/>
- </bean>
- </beans>
<?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:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- 【配置視圖解析器】 -->
<!-- InternalResourceViewResolver會在ModelAndView返回的視圖名前加上prefix指定的前綴,再在最後加上suffix指定的後綴 -->
<!-- 由於UserController返回的ModelAndView中的視圖名是userlist,故該視圖解析器將在/WEB-INF/jsp/userlist.jsp處查找視圖 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
接下來是首頁index.jsp
- <%@ page language="java" pageEncoding="UTF-8"%>
- <a href="<%=request.getContextPath()%>/userlist11.htm">Visit "/userlist11.htm" to my SpringMVC demo page</a>
- <br/>
- <br/>
- <a href="<%=request.getContextPath()%>/userlist22.htm">Visit "/userlist22.htm" to my SpringMVC demo page</a>
- <br/>
- <br/>
- <a href="<%=request.getContextPath()%>/userlist33.htm">Visit "/userlist33.htm" to my SpringMVC demo page</a>
<%@ page language="java" pageEncoding="UTF-8"%>
<a href="<%=request.getContextPath()%>/userlist11.htm">Visit "/userlist11.htm" to my SpringMVC demo page</a>
<br/>
<br/>
<a href="<%=request.getContextPath()%>/userlist22.htm">Visit "/userlist22.htm" to my SpringMVC demo page</a>
<br/>
<br/>
<a href="<%=request.getContextPath()%>/userlist33.htm">Visit "/userlist33.htm" to my SpringMVC demo page</a>
下面是響應請求結果的userlist.jsp
- <%@ page language="java" pageEncoding="UTF-8"%>
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
- <h2>Welcome to my SpringMVC demo page</h2>
- <c:forEach items="${users}" var="user">
- <c:out value="${user.username}"/><br/>
- <c:out value="${user.password}"/><br/>
- <c:out value="${user.address}"/><br/>
- <c:out value="${user.age}"/><br/>
- </c:forEach>
- <!--
- 以下是,處理對"/userlist.htm"的請求的整個工作步驟
- 1、DispatcherServlet接受對"/userlist.htm"樣式的URL請求
- 2、DispatcherServlet詢問BeanNameUrlHandlerMapping
- 詢問Bean的名字是"/userlist.htm"的控制器,並且找到了UserController的Bean
- 3、DispatcherServlet分發給UserController來處理這個請求
- 4、UserController返回一個ModelAndView對象,它帶有一個邏輯視圖名"userlist",以及保存在"users"屬性中的值
- 5、DispatcherServlet詢問它的視圖解析器(配置爲InternalResourceViewResolver)
- 查找邏輯名爲userlist的視圖,InternalResourceViewResolver返回/WEB-INF/jsp/userlist.jsp路徑
- 6、DispatcherServlet將請求導向/WEB-INF/jsp/userlist.jsp頁面
- -->
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<h2>Welcome to my SpringMVC demo page</h2>
<c:forEach items="${users}" var="user">
<c:out value="${user.username}"/><br/>
<c:out value="${user.password}"/><br/>
<c:out value="${user.address}"/><br/>
<c:out value="${user.age}"/><br/>
</c:forEach>
<!--
以下是,處理對"/userlist.htm"的請求的整個工作步驟
1、DispatcherServlet接受對"/userlist.htm"樣式的URL請求
2、DispatcherServlet詢問BeanNameUrlHandlerMapping
詢問Bean的名字是"/userlist.htm"的控制器,並且找到了UserController的Bean
3、DispatcherServlet分發給UserController來處理這個請求
4、UserController返回一個ModelAndView對象,它帶有一個邏輯視圖名"userlist",以及保存在"users"屬性中的值
5、DispatcherServlet詢問它的視圖解析器(配置爲InternalResourceViewResolver)
查找邏輯名爲userlist的視圖,InternalResourceViewResolver返回/WEB-INF/jsp/userlist.jsp路徑
6、DispatcherServlet將請求導向/WEB-INF/jsp/userlist.jsp頁面
-->
這是用到的User.java
- package com.jadyer.model;
- /**
- * User
- * @author 宏宇
- * @editor Jan 27, 2012 11:41:15 AM
- */
- public class User {
- private String username;
- private String password;
- private String address;
- private Integer age;
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- public Integer getAge() {
- return age;
- }
- public void setAge(Integer age) {
- this.age = age;
- }
- }
package com.jadyer.model;
/**
* User
* @author 宏宇
* @editor Jan 27, 2012 11:41:15 AM
*/
public class User {
private String username;
private String password;
private String address;
private Integer age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
最後是SpringMVC的核心控制器UserController.java
- package com.jadyer.controller;
- import java.util.ArrayList;
- import java.util.List;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.web.servlet.ModelAndView;
- import org.springframework.web.servlet.mvc.AbstractController;
- import com.jadyer.model.User;
- /**
- * UserController
- * @author 宏宇
- * @editor Jan 27, 2012 11:57:33 AM
- */
- public class UserController extends AbstractController {
- @Override
- protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
- List<User> userList = new ArrayList<User>();
- User user11 = new User();
- User user22 = new User();
- user11.setUsername("張起靈");
- user11.setPassword("02200059");
- user11.setAddress("陰山古樓");
- user11.setAge(27);
- user22.setUsername("吳三省");
- user22.setPassword("95000220");
- user22.setAddress("蛇沼鬼城");
- user22.setAge(37);
- userList.add(user11);
- userList.add(user22);
- //ModelAndView類在SpringMVC中是一個很重要的概念
- //控制器執行方法都必須返回一個ModelAndView,ModelAndView對象保存了視圖以及視圖顯示的模型數據
- //第一個參數:視圖組件的邏輯名稱。這裏視圖的邏輯名稱是userlist,視圖解析器會使用該名稱查找實際的View對象
- //第二個參數:傳遞給視圖的,模型對象的名稱
- //第三個參數:傳遞給視圖的,模型對象的值
- return new ModelAndView("userlist", "users", userList);
- }
- }