我们来看一下MVC的基本工作流程:
首先是客户端(通常是浏览器)发出一个请求。第一个接受这个请求的组件一般是一个前端控制器。它将不同的请求交给不同的后端控制器来处理,而在后端控制器里面又可以调用相应的模型对象来处理具体的业务逻辑,最后再返回一个特定的视图响应给客户端。
怎么理解MVC呢?我们举一个现实的例子,前段时间地震太可怕了,全国人民都在上下一心抗震救灾。我们敬爱的总理给武警司令下命令让他完成抗震救灾的艰巨任务,于是武警司令就根据各地情况派遣不同类型的特种兵到不同的地区去,然后特种兵使用大大小小的工具完成了任务,最后上交给司令一份统计图表,司令再上交给总理。我们就来分析一下,这符不符合MVC的设计模式。这里呢,总理就是客户端,武警司令就是前端控制器,特种兵就是后端控制器,特种兵所使用的工具就是模型,最后上交的统计图表就是视图。
现在大家应该可以理解MVC的设计思想了。拿我们比较熟悉的struts框架来说,前端控制器就是ActionServlet,后端控制器就是Action.请求的URL和后端控制器的映射关系在struts-config.xml上的<action-mappings>里面配置,模型对象就是我们平常写的DAO/DTO,返回的视图类型一般就是jsp了。
那么,在spring MVC中又是怎样的呢?,我们先按上面对号入座地说一下。第一个接受这个请求的前端控制器叫DispatcherServlet,后端控制器叫Controller。负责处理请求URL和后端控制器映射的叫HandMapping,它有多种类型,比较灵活,也是在一个xml文件上进行配置。负责业务逻辑处理的模型对象一般也是我们平常写的DAO/DTO组件。只是它最后的返回更灵活,Controller返回一个ModelAndView对象给DispatcherServlet,ModelAndView可以携带一个视图对象,也可以携带一个视图对象的逻辑名。如果携带的是一个视图对象的逻辑名,那DispatcherServlet需要一个ViewResolver来查找用于渲染回应的视图对象。最后,DispatcherServlet将请求分派给ModelAndView对象指定的视图对象。视图对象负责渲染返回给客户的回应。
我们学习知识,一样要注意运用类比迁移的方法。有人说,我学会了struts,但学不会springMVC。这是说不过去的。因为二者的思想完全一致。所以,我们只需要学习它们不一样的地方就可以啦。好,我们现在先跑一个最简单的例子,让大家对构建SpringMVC的基本步骤有个直观的认识。大家要边跑边跟struts做比较。
(1)建立动态web工程,导入spring的jar包。
(2)配置DispatcherServlet
DispatcherServlet是SpringMVC的核心,将下面Servlet的注册信息登记在web.xml中。一定要记住:Servlet跟伴侣一样,要结婚,先得注册登记!
<servlet>
<servlet-name>test</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
(3)编写Controller,做核心配置文件,并配置url和Controller的映射
package com.wepull.test;
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 HelloController implements Controller{
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
request.setAttribute("hello", "welcome to spring!");
return new ModelAndView("welcome");
}
}
我们知道Struts有个XML格式的核心配置文件,springMVC当然也有,在WEB-INF下新建一XML文件:test-servlet.xml.注意,这里的test取决于servlet的名字.当DispatcherServlet载入后,它将试图从这个文件中载入应用上下文。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!--缺省映射处理器,不需要明确声明,但声明后就非常清楚使用的是哪个映射处理器 --> <bean id="beanNameUrlMapping"
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
</bean>
<!-- 这里的name属性有两个职责,既定义Bean的名字,也定义需要这个控制器处理的URL样式 -->
<bean name="/hello.do"
class="com.wepull.test.HelloController">
</bean>
</beans>
上面可能有人奇怪,为什么不用id属性,而设置name属性。这里是因为URL中含有XML id属性非法字符——特别是斜杠(/);
(4)配置一个视图解析器将控制器与JSP结合起来。
将解析器的配置片段加到上面的test-servlet.xml中。
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
InternalResourceViewResolver在ModelAndView返回的视图名前加上prefix属性配置的前缀,再在最后加上suffix属性配置的后缀。由于HelloController返回的ModelAndView中视图名为welcome,所以InternalResourceViewResolver将在/WEB-INF/jsp/welcome.jsp处查找视图。
(5)编写呈现给用户的jsp文件。
/WEB-INF/jsp/welcome.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Hello World!</title>
</head>
<body>
<h2>
${hello}
</h2>
</body>
</html>
完成后启动服务器,在浏览器地址栏上输入http://locahost:8080/projectName/hello.do 就可以访问了。
对照一下,我们发现SpringMVC跟Struts大同小异。只是有两处映射,SpringMVC做的相对灵活。哪两处呢?
(1) url和动作(后端控制器)的映射。
springMVC里有个映射处理器(HandlerMapping)的概念。它实际上是一个处理器映射Bean,用来将一个控制器指定到一个URL上。Spring提供了三种有用的HandlerMapping的实现:
—— BeanNameUrlHandlerMapping
根据控制器的名字将控制器映射到URL
—— SimpleUrlHandlerMapping
用上下文配置文件中定义的属性集合将控制器映射到URL
—— CommonsPathMapHandlerMapping
使用控制器代码中的元数据将控制器映射到URL
(2) 逻辑视图名和视图对象的映射。
springMVC里还有个视图解析器(ViewResolver)的概念。它决定了ModelAndView对象的逻辑视图名如何解析成一个用于将结果渲染给用户的视图Bean..Spring有四种ViewResolver实现:
—— InternalResourceViewResolver
将逻辑视图名解析成一个用模板文件(如JSP和Velocity模板)渲染的视图对象
—— BeanNameViewResolver
将逻辑视图名解析成一个DispatcherServlet应用上下文中的视图Bean
—— ResourceBundleViewResolver
将逻辑视图名解析成一个ResourceBundler中的视图对象
—— XmlViewResolver
从一个XML文件中解析视图Bean,这个文件是从DispatcherServlet应用上下文中分离出来的。
分享到:
相关推荐
**二、SpringMVC入门** 1. **创建SpringMVC项目**: 使用Maven创建一个新的Maven项目,在`pom.xml`中添加SpringMVC相关的依赖,如`spring-webmvc`、`spring-context`、`jstl`等。 2. **配置SpringMVC**: 创建`web....
在这个"SpringMVC入门jar包"中,包含了一系列必要的库文件,它们是构建基于SpringMVC的应用的基础。 首先,SpringMVC的核心组件包括DispatcherServlet,它是SpringMVC的前端控制器,负责接收HTTP请求,并将其分发到...
刚接触springMvc时参考的教材,理论和操作兼顾,写的很好,对于springMvc的初学者帮助很大
本知识点将从SpringMVC的架构原理、MVC设计模式、Web开发的请求响应模型和Web端开发发展历程等方面详细阐述。 首先,Spring MVC是一个实现了Web MVC架构模式的框架。MVC模式将应用程序分为三个核心组件:模型(Model...
#### 三、SpringMVC入门程序 ##### 1. 目标 入门程序的主要目的是帮助开发者理解SpringMVC的核心组件及其工作流程,特别是前端控制器、处理器映射器、处理器适配器和视图解析器。 ##### 2. 实现方式 - **非注解...
尚硅谷SpringMVC入门到精通,涵盖数据绑定、异常处理以及与Spring的基本整合
创建SpringMVC入门项目** 1. **项目结构**:通常包括`src/main/java`(源代码)、`src/main/resources`(配置文件)和`src/main/webapp`(Web应用目录)。 2. **配置文件**: - `web.xml`:配置`...
这个入门例子是为初学者设计的,旨在帮助他们快速理解和上手Spring MVC。 首先,我们需要理解Spring MVC的基本组件: 1. **DispatcherServlet**:这是Spring MVC的核心组件,作为前端控制器接收所有的HTTP请求,并...
在IT行业中,Maven和SpringMVC是两个非常重要的组件,它们分别是项目管理和Web应用程序开发的核心...通过这个入门级的HelloWorld实例,我们可以快速理解这两个工具的基本用法,为进一步深入学习和实践打下坚实的基础。
在本入门级项目中,我们将深入理解 Spring MVC 的基本概念、配置以及如何创建一个简单的应用程序。 首先,让我们了解 Spring MVC 的核心组件: 1. **DispatcherServlet**:这是 Spring MVC 的前端控制器,负责接收...
这个"SpringMVC入门最简洁工程"是一个针对初学者精心设计的项目,它包含了必要的配置文件和最少的依赖包,以便快速理解和上手SpringMVC。 **1. MVC架构** 在Web开发中,MVC架构是一种常用的分层设计模式。Model...
SpringMVC专栏 002 SpringMVC入门项目搭建
本入门案例源码适用于Eclipse和MyEclipse,提供了完整的项目配置和运行环境,便于初学者快速理解和上手SpringMVC。 在SpringMVC中,核心概念包括DispatcherServlet、Controllers、Models、Views以及各种配置文件。...
在这个"springmvc入门程序"中,我们将探讨如何使用 Spring MVC 和 MyBatis 集成来构建一个简单的商品管理应用。 首先,Spring MVC 提供了DispatcherServlet,作为应用程序的前端控制器,它接收所有的 HTTP 请求,并...
在这个入门实例中,我们将深入理解SpringMVC的核心概念,以及如何通过`springmvc_demo_02`这个项目来创建一个简单的应用。 1. **SpringMVC架构** SpringMVC由几个关键组件组成:DispatcherServlet、Controller、...
**SpringMVC 入门小程序详解** SpringMVC是Spring框架的一个重要模块,它是一个用于构建Web应用程序的轻量级、模型-视图-控制器(MVC)框架。本入门程序旨在帮助初学者理解并掌握SpringMVC的基本概念和工作流程,...
**Spring MVC 入门实例详解** Spring MVC 是一个基于 Java 的模型-视图-控制器(MVC)架构,是 Spring 框架的一部分,用于构建Web应用程序。它提供了丰富的功能,如请求处理、数据绑定、异常处理等,使得开发者能够...
在“SpringMVC学习(一)——SpringMVC入门小程序”中,我们首先会接触到SpringMVC的基本概念。这通常包括以下几个核心组件: 1. **DispatcherServlet**:这是SpringMVC的前端控制器,负责接收HTTP请求,并根据配置...
SpringMVC入门参数绑定SSM整合 SpringMVC是一种基于MVC模式的Web应用程序框架,它是Spring框架的一个模块,用于开发Web项目。下面是SpringMVC入门参数绑定SSM整合的知识点总结: 一、SpringMVC概述 SpringMVC是...
SpringMvc入门工程源码是一个适合初学者了解和学习Spring MVC框架的项目。Spring MVC是Spring框架的一个模块,专门用于构建Web应用程序。它提供了一个模型-视图-控制器(MVC)架构,帮助开发者将业务逻辑、数据处理...