Spring的MVC框架主要由DispatcherServlet、处理器映射(HandlerMapping)、处理器(Controller)、视图解析器(ViewResolver)、视图(View)组成。DispatcherServlet是整个Spring MVC的核心。它负责接收HTTP请求组织协调Spring MVC的各个组成部分。其主要工作有以下三项:
1)截获符合特定格式的URL请求。
2)初始化DispatcherServlet上下文对应的WebApplicationContext,并将其与业务层、持久化层的WebApplicationContext建立关联。
3)初始化Spring MVC的各个组成组件,并装配到DispatcherServlet中。
1.工作流程
①当用户在浏览器中点击一个链接或者提交一个表单时,那么就会产生一个请求(request)。当请求离开浏览器时,它会携带用户请求的信息(比如说请求的URL信息,用户名,密码什么的)。
②请求的第一站到达的是Spring的DispatcherServlet,它是一个前端控制器,工作是将用户的请求委托给其他的组件(这里是交给Spring MVC的控制器)去处理。这里DispatcherServlet要决定将请求传给哪一个控制器(Controller)去处理,那么这时就需要处理器映射(Handler Mapping)了。处理器映射会看请求的URL信息,然后决定将请求交给哪一个控制器去处理。比如说有两个控制器ControllerA和ControllerB,分别处理后缀名为.html和.jsp送来的请求,那么当请求者的后缀名为.html时,那么DispatcherServlet就将请求交给ControllerA进行处理。
③当选择了一个合适的控制器后,DispatcherServlet就会将请求交给这个控制器去处理。在这个控制器上,用户的请求将会将用户提交的一些信息交由控制器处理并等待。然而设计的比较好的控制器本身对信息做很少的处理或者根本不做处理,而是将业务逻辑交给一个或多个服务器对象(Model)去处理。
④当控制器对用户请求所携带的信息进行处理(或交给模型层处理)后,经常会产生一些其他的需要返回给浏览器进行显示的数据。这些原始数据直接显示出来显然是不友好的,那么就需要视图(View)来对这些数据进行显示了。控制器的最后一件事就是将模型数据打包,并且指定产生输出的视图的特定名称,然后它将模型、视图名称以及request请求一起发送给DispatcherServlet。所以控制器并没有与视图进行耦合,因为传递给DispatcherServlet的视图名称并不是某一个指定的特殊的文件名称(如后缀名一定是JSP或其他什么名称),它只要是一个可以产生输出和展示结果的逻辑名称就可以了。
⑤DispatcherServlet会向一个视图解析器(ViewResolver)进行请求,视图解析器可以将逻辑视图名称映射到一个特定的视图显示文件上面。
⑥现在DispatcherServlet知道哪一个视图文件可以显示结果了。该视图将会利用模板数据产生输出,这些输出通过response对象返回给客户端进行显示。
2.Spring MVC的一个简单实现(视图是通过Velocity模板进行显示)
①配置DispatcherServlet(必须在web应用的web.xml里面进行配置):
<!-- 这里设置spring-mvc.xml的位置,spring-mvc.xml配置了Handler Mapping,Controller和ViewResolver等。-->
<servlet>
<servlet-name>springServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
②配置spring-mvc.xml:
<!-- 自动扫描且只扫描@Controller -->
<context:component-scan base-package="com.springmvc.test"/>
<!-- 将无法mapping到Controller的path交给default servlet handler处理 -->
<mvc:default-servlet-handler />
<!-- 如果视图的后缀名是jsp,则视图默认视图解析器可以如下配置 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
③控制器HelloController.java:
相关推荐
当发起请求时被前置的控制器拦截到请求, 根据请求参数生成代理请求, 找到对应的实际控制器, 控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器, 控制器使用模型与视图渲染视图结果,...
根据SpringMVC底层实现原理,手写SpringMVC框架,并进行简单的Controler层测试
通过案例完整呈现Tomcat的实现,系统总结Spring MVC九大组件的处理以及常用的技巧和实践 在大型网站和复杂系统的开发中,Java具有天然的优势,而在Java的Web框架中Spring MVC以其强大的功能以及简单且灵活的用法受到...
通过整合网上分散资源,集成Spring3.03,Hibernate3,连接池c3p0,实现helloword小例子,和简单的登录功能。框架解释清晰,分享出来,后期持续更新。
该资源包含了springMVC的实现原理,以及几个基本的springmvc项目,囊括了几乎所有springmvc知识点
内容概要:通过带着读者...阅读建议:此资源以开发个性化推荐的在线学习系统学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容一起来实践,并调试对应的代码。
全面介绍Spring MVC的架构、原理、核心概念和操作,通过案例完整呈现Tomcat的实现,系统总结Spring MVC九大组件的处理以及常用的技巧和实践 在大型网站和复杂系统的开发中,Java具有天然的优势,而在Java的Web...
主要介绍了SpringMVC拦截器实现单点登录,简单介绍了springmvc拦截器,单点登录实现原理等相关内容,具有一定参考价值,需要的朋友可以了解下。
springmvc详解,注释写的很详细。希望能对大家有帮助。呵呵。要明白的是原理。数据库方面我没连接,太简单。
全面介绍Spring MVC的架构、原理、核心概念和操作,通过案例完整呈现Tomcat的实现,系统总结Spring MVC九大组件的处理以及常用的技巧和实践 在大型网站和复杂系统的开发中,Java具有天然的优势,而在Java的Web框架中...
简单模拟Sping MVC,利用java注解等功能实现,方面人们对springmvc内部实现原理更加了解
从spring到springmvc再到springboot的逐步简化代码的过程,核心功能都没有改变,如::IOC、AOP、Bean生命周期、依赖的作用域、文件的上传和下载等内容实现。 适合人群:具备一定编程基础,掌握了spring全家桶或者...
Java中深复制和浅复制 OSI模型:七层模型介绍 wait方法和Sleep方法简单对比描述一下 comparable与comparator的区别 GC垃圾回收机机制?...cas单点登录的基础原理、实现 cas如何里连接本
技术栈概览:涵盖了Spring、SpringMVC、MyBatis等主流JavaWeb框架的使用,以及MySQL数据库的管理。 项目模块解析:按照实际项目结构,分模块介绍了后台管理、用户权限管理、数据报表生成等功能的具体实现。 代码与...
在讨论如何使用这套框架之前,咱们先从简单的原理说起 从我目前了解到的情况来看,采用的技术无非就以下几种 页面内嵌入一个iframe,通过修改iframe的src来让Webview拦截到来自网页的请求; 修改页面的location....
因为大小的限制,依赖的jar包没有上传,可使用maven来获取... * 为了帮助理解struts2,hibernate,spring等框架的原理,我们还简单实现了minimvc,miniorm,minidi。 * 本项目和springside,appfuse相比,更适合初学者。
和框架的其他功能一样,原理很简单,使用起来也很简单,大致看了下SpringMVC这一部分的源码,其实还是比较容易理解的。 我们项目中仅仅用到了preHandle这个方法,而未用其他的,框架提供了一个已经实现了拦截器...
从JPA规范讲起,到Spring对于JPA的用法以及与Hibernate集成实现。本课程的数据库采用MySQL,但也可以方便切换到其他数据库。最后通过一个实战内容,来帮助学员理解掌握。 第7章 全文搜索ElasticSearch 企业级应用...