SpringMVC教程/实例(一):java SpringMVC之入门配置篇
Spring框架提供了构建Web应用程序的全功能MVC模块。使用Spring可插入的MVC架构,可以选择是使用内置的SpringWeb框架还是Struts这样的Web框架。通过策略接口,Spring框架是高度可配置的,而且包含多种视图技术,例如JavaServerPages(JSP)技术、Velocity、Tiles、iText和POI。SpringMVC框架并不知道使用的视图,所以不会强迫您只使用JSP技术。SpringMVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
直接上例子吧,这是一个WebProject
首先是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> <!-- 这里*.htm并不代特定的文件,而是页面发送的请求,格式以.htm结尾,类似于*.action或*.do--> <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>
然后是我们常见的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>
接下来是首页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>
下面是响应请求结果的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; } }
最后是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); } }
相关推荐
JudeJoo 2020-08-21
meleto 2020-08-15
小鱿鱼 2020-06-26
qingjiuquan 2020-06-07
zhangdy0 2020-05-31
HappyHeng 2020-05-16
whbing 2020-04-11
小鱿鱼 2020-03-20
mendeliangyang 2020-02-20
方志朋 2020-02-14
牧场SZShepherd 2020-02-01
MicroBoy 2020-01-23
牧场SZShepherd 2020-01-12
melonjj 2020-01-05
melonjj 2020-01-05
whbing 2020-01-19
boneix 2020-10-21