- 前言
- 第一部分 核心实现
- 第 1 章 Spring 整体架构和环境搭建
- 第 2 章 容器的基本实现
- 第 3 章 默认标签的解析
- 第 4 章 自定义标签的解析
- 第 5 章 bean 的加载
- 第 6 章 容器的功能扩展
- 第 7 章 AOP
- 第二部分 企业应用
- 第 8 章 数据库连接 JDBC
- 第 9 章 整合 MyBatis
- 第 10 章 事务
- 第 11 章 SpringMVC
- 第 12 章 远程服务
- 第 13 章 Spring 消息
11.1 SpringMVC 快速体验
(1)配置 web.xml。
一个 Web 中可以没有 web.xml 文件,也就是说,web.xml 文件并不是 Web 工程必须的。web.xml 文件用来初始化配置信息:比如 Welcome 页面、servlet、servlet-mapping、filter、listener、启动加载级别等。但是,SpringMVC 的实现原理是通过 Servlet 拦截所有 URL 来达到控制的目的,所以 web.xml 的配置是必须的。
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" 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">
<display-name>Springmvc</display-name>
<!--使用 ContextLoaderListener 配置时,需要告诉它 Spring 配置文件的位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- SpringMVC 的前端控制器 -->
<!-- 当 DispatcherServlet 载入后,它将从一个 XML 文件中载入 Spring 的应用上下文,该 XML 文件的名
字取决于<servlet-name> -->
<!-- 这里 DispatcherServlet 将试图从一个叫做 Springmvc-servlet.xml 的文件中载入应用上下文,其
默认位于 WEB-INF 目录下 -->
<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>
</web-app>
Spring 的 MVC 之所以必须要配置 web.xml,其实最关键的是要配置两个地方。
contextConfigLocation:Spring 的核心就是配置文件,可以说配置文件是 Spring 中必不可少的东西,而这个参数就是使 Web 与 Spring 的配置文件相结合的一个关键配置。
DispatcherServlet:包含了 SpringMVC 的请求逻辑,Spring 使用此类拦截 Web 请求并进行相应的逻辑处理。
(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"
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">
<bean id="viewResolver" class="org.Springframework.web.servlet.view. Internal Resource
ViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
InternalResourceViewResolver 是一个辅助 Bean,会在 ModelAndView 返回的视图名前加上 prefix 指定的前缀,再在最后加上 suffix 指定的后缀,例如:由于 XXController 返回的 ModelAndView 中的视图名是 testview,故该视图解析器将在/WEB-INF/jsp/testview.jsp 处查找视图。
(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 请求,每个控制器都对应着一个逻辑处理。
public class UserController extends AbstractController {
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse
arg1) throws Exception {
List<User> userList = new ArrayList<User>();
User userA = new User();
User userB = new User();
userA.setUsername("张三");
userA.setAge(27);
userB.setUsername("李四");
userB.setAge(37);
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 language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<h2>This is SpringMVC demo page</h2>
<c:forEach items="${users}" var="user">
<c:out value="${user.username}"/><br/>
<c:out value="${user.age}"/><br/>
</c:forEach>
视图文件用于展现请求处理结果,通过对 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" xmlns:tx="http://www. Spring
framework. 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">
<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="test.controller.UserController" />
</beans>
因为 SpringMVC 是基于 Servlet 的实现,所以在 Web 启动的时候,服务器会首先尝试加载对应于 Servlet 的配置文件,而为了让项目更加模块化,通常我们将 Web 部分的配置都存放于此配置文件中。
至此,已经完成了 SpringMVC 的搭建,启动服务器,输入网址 http://localhost:8080/Springmvc/userlist.htm。
看到了服务器返回界面,如图 11-1 所示。
图 11-1 Spring MVC 快速体验
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论