Spring mvc 概述
1.Spring MVC框架围绕DispatcherServlet这个核心展开,DispatcherServlet是 SpringMVC的总导演以及总策划,他负责截获请求并将其分派给相应的处理器进行处理。Spring MVC 框架包括注解驱动注释器、请求及响应的信息处理、试图解释、本地化解析、上传文件解析、异常处理以及变得标签绑定等内容。
2.Spring MVC 是基于Model2实现的技术框架。Model2是经典的MVC(Model,view,control)模型在web应用中的变体,这个改变主要源于HTTP 协议的无状态性。Model2的目的和MVC 一样。也是利用处理器分离模型、视图和控制,达到不同技术层级间松散层耦合的效果。提高系统灵活性、复用性、可维护性。
3.由于Spring MVC 是基于Model2 实现的框架。所以它底层的机制也是MVC,通过下图描述Spring MVC的整体架构。
从上图可以看出springMVC 从接受请求到返回响应,Spring MVC 框架的众多组件通力配合、各司其职,有条不紊的完成分内的工作。在整个框架中,DispatcherServlet 处于核心的位置,它负责协调和组织不同组件以完成请求处理并返回响应的工作。和大多数web MVC 框架一样,Spring MVC 通过一个前端Servlet接收所有的请求,并将具体工作委托给其他组件进行处理,DispatcherServlet 就是Spring MVC 的前端Servlet。下面我们对 SpringMVC处理请求的整体过程做一下高空俯瞰。
- 1首先客户端发送HTTP请求,web应用服务器接收到这个请求,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web 容器将该请求转交给DispatcherServlet处理。
- 2 DispatcherServlet接收到这个请求后,将根据请求的信息(包括URL,HTTP方法、请求报文头,请求参数、Cookie等)以HandlerMapping 的配置找到处理请求的处理器(Handler)。可将HandlerMapping 看成路由器控制器,将Handler看成目标主机。
- 3 当 DispatcherServlet 根据HandlerMapping 得到对应当前请求的Handler后,通过HandlerAdapter对Handler进行封装,再以统一的适配器接口调用 Handler。HandlerAdapter 是Spring MVC 的框架接口,顾名思义,HandlerAdapter 是一个适配器,它用统一的接口对各种handler方法进行调用。
- 4 处理器完成业务逻辑的处理后将返回一个ModelAndView给DispatcherServlet,ModelAndView 包含了视图逻辑名和模型数据信息。
- 5 ModelAndView 中包含的是“逻辑视图名”而非真正的视图对象,DispatcherServlet借由 ViewResolver完成逻辑视图名到真实视图对象的解析工作。
- 6 当得到真实的视图对象 View 后, DispatcherServlet就使用这个View 对象对ModelAndView中的模型数据进行视图渲染。
- 7 最终客户端得当的响应信息,可能是一个普通的HTML页面,也可能是一个XML或JSON 串,甚至是一张图片或一个PDF文档等不同的媒体形式。
4.配置 DispatcherServlet 对象并进行初始化,可以在web.xml 进行如下配置信息进行初始化:
也可以参考一下配置进行SpringMVC + ibatis 环境创建。
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="web" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:com/wangmeng/**/server/META-INF/spring.xml,/WEB-INF/spring.xml</param-value>
</context-param>
<!-- 过滤器配置-->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>framework</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<description>Spring MVC 配置文件</description>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:com/wangmeng/**/server/META-INF/*-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- Welcome file lists -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
5.SpringMVC Servlet 配置文件(XXX-servlet.xml)
以下是XXX-servlet.xml 配置信息,对应web.xml 中的<init-param></init-param>配置信息。
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!-- 对web包中的所有类进行扫描,已完成Bean创建和自动依赖注入的功能 -->
<context:component-scan base-package="com.wangmeng.dpap"/>
<!-- 相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,
配置一些messageconverter。即解决了@Controller注解的使用前提配置
-->
<mvc:annotation-driven />
<!-- 这里拦截器还有一种配置方法【针对路径进行配置】 推荐使用这个,方便直观-->
<!-- <mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/springmvctest/*"/>
<bean class="com.wangmeng.dpap.framework.springmvc.interceptor.ModuleInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors> -->
<!-- 全局配置 -->
<mvc:interceptors>
<bean class="com.wangmeng.dpap.framework.springmvc.interceptor.ModuleInterceptor"></bean>
<!-- <bean class="com.deppon.dpap.framework.springmvc.interceptor.JSONInterceptor"></bean> -->
</mvc:interceptors>
<!-- jsp页面解析器,当Controller返回XXX字符串时,先通过拦截器,然后该类就会在/WEB-INF/pages/目录下,查找XXX.jsp文件-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
6.Spring.xml 配置文件 即在 web.xml 中配置<context-param></context-param> 初始化
<?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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@192.168.67.190:1521:dpap" />
<property name="username" value="bpapuser" />
<property name="password" value="bpapuser" />
</bean>
<!-- 数据连接管理 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 事务注解支持-->
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- myBatis文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="/WEB-INF/ibatis.xml" />
<property name="mapperLocations"
value="classpath*:com/deppon/**/META-INF/ibatis/springmvc*.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
<context:component-scan base-package="com.wangmeng" />
</beans>
相关推荐
### SpringMVC请求流程源码分析 #### 一、SpringMVC使用与配置 ##### 1. 工程创建 为了构建一个支持SpringMVC框架的项目,首先需要创建一个Maven工程。在这个过程中,我们需要完成以下几个步骤: - **创建项目...
在本文中,我们将深入探讨如何搭建一个基于Spring4、SpringMVC和Mybatis的项目,以及如何进行测试。这个项目组合通常被称为“SSM”框架,是Java Web开发中的主流选择,提供了强大的依赖注入、MVC架构和持久层管理...
但作为初学者,理解并完成上述基本环境搭建和简单请求处理,就已经迈出了Spring MVC学习的第一步。随着经验的积累,可以逐渐深入学习Spring MVC的更多功能和最佳实践,提高开发效率和代码质量。
下面将详细介绍这三个框架以及如何搭建SSH整合环境。 首先,Spring是一个全方位的Java企业级应用开发框架,它提供了依赖注入(Dependency Injection,DI)、面向切面编程(Aspect-Oriented Programming,AOP)、...
以上就是使用Spring、SpringMVC和Mybatis框架搭建项目的基本流程和主要知识点。在实际开发中,还需要考虑安全性、性能优化、异常处理等多方面的问题。理解并掌握这些框架的原理和使用方式,能够帮助开发者高效地构建...
Spring Boot则是一个简化Spring应用初始搭建以及开发过程的框架,它集成了许多默认配置,使得开发者无需过多的配置就能快速启动项目。 本文将指导您如何一步步地搭建一个基于SpringMVC的项目,然后将其转换为Spring...
本教程将帮助你理解如何搭建一个Spring MVC的开发环境,并通过源码分析深入理解其工作原理。 首先,我们需要安装和配置Java Development Kit (JDK)。确保你的系统已经安装了JDK 8或更高版本,因为Spring MVC通常与...
首先,Maven是一个项目管理和综合工具,它通过一个配置文件(pom.xml)管理项目的依赖关系,构建流程,以及打包和部署等任务。使用Maven,你可以轻松地导入和管理所需的库,避免了手动下载和配置的繁琐过程。Maven的...
SpringMVC通过DispatcherServlet作为前端控制器,接收请求,分发到各个处理器(Handler),并最终将结果返回给客户端。 Hibernate是一个强大的ORM(Object-Relational Mapping)框架,它简化了数据库操作,通过映射...
它简化了从前端控制器到业务逻辑再到视图的请求处理流程。在这个工程中,SpringMVC负责接收HTTP请求,调用相应的服务层方法,然后返回响应数据。 3. **Mybatis**:Mybatis是一个持久层框架,它支持定制化SQL、存储...
6. **Controller层**:Controller层接收SpringMVC分发的请求,调用Service层的方法,最后返回ModelAndView。 在MyEclipse中,你可以创建一个新的动态Web项目,导入SpringMVC和Hibernate的相关库,按照上述步骤进行...
首先,我们需要了解 Spring MVC 的核心组件和工作流程: 1. **DispatcherServlet**:它是整个 Spring MVC 框架的入口点,负责接收 HTTP 请求,然后根据请求信息找到对应的 Handler(控制器)进行处理。 2. **@...
在实际搭建过程中,首先需要配置Maven的环境,然后创建项目目录结构,并在pom.xml文件中定义项目依赖。接着,设置Spring的配置文件,包括bean的定义和数据源配置。之后,搭建SpringMVC的配置,包括视图解析器、拦截...
总结来说,Spring+SpringMVC+Mybatis+Maven的组合为初学者提供了一个强大且易上手的开发环境。它能够帮助新手快速掌握Java Web开发的基本流程,同时提供了扩展性和灵活性,便于应对复杂的应用场景。在实践中不断学习...
本篇将详细介绍如何利用Maven来搭建整合SpringMVC、Hibernate和JPA的开发环境。 首先,我们来看SpringMVC,它是Spring框架的一部分,专门用于处理Web请求。SpringMVC通过模型-视图-控制器(MVC)架构模式,使得业务...
- 配置SpringMVC的`web.xml`,设置DispatcherServlet,以及配置SpringMVC的配置文件如`servlet-context.xml`,声明视图解析器、拦截器等。 - 配置MyBatis的`mybatis-config.xml`,包括数据源、事务管理器等,并...
以上就是使用JavaConfig配置方式搭建的SpringMVC入门项目的基本流程。通过这种方式,我们可以更直观地理解和管理项目的配置,使得代码更加模块化,也更容易进行单元测试。在SpringMVCDemo项目中,你可以看到具体的...
在SpringMVC中,你可以定义控制器(Controller)来处理请求,模型(Model)来存储数据,以及视图(View)来展示结果。 `MyBatis` 是一个持久层框架,它简化了数据库操作,将SQL语句与Java代码分离,提供了动态SQL和...
在这个"springmvc框架搭建,已测试"的项目中,我们可以探索SpringMVC的搭建过程以及其核心组件和工作原理。 1. **SpringMVC的组成** - **DispatcherServlet**:作为前端控制器,它是SpringMVC的入口点,负责接收...
SpringMVC通过DispatcherServlet作为入口,负责接收请求并分发到相应的处理器。它支持多种视图技术,如JSP、FreeMarker、Thymeleaf等,并提供了数据绑定、模型验证、本地化等功能。使用注解如@Controller、@...