springMVC简介
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts2(一般老项目使用)等。是目前最流行的MVC框架之一,并且随着Spring3.0的发布,全面超越了struts2,成为最优秀的MVC框架
MVC全名是Model View Controller,是模型(Model)、视图(View)、控制器(Controller)的缩写,一种设计创建程序表现层的模式,且MVC各司其职
- M(模型):通常指的即是我们的数据模型,作用一般情况下用于数据封装
- V(视图):通常指的是我们的jsp或者html,作用于数据的展示,通常依赖数据模型创建
- C(控制器):应用程序中处理数据交互的部分,作用一般就是处理程序的逻辑
springMVC的简单配置
1、项目启动时读取web.xml文件
当我启动一个javaWeb程序的时候,会首先读取web.xml配置文件,在这个配置文件中,有监听器拦截器之类的东西,springMVC的启动也是依赖于监听器的。监听器就是一个程序的入口,我们在web.xml中写了spring的监听器,那么springMVC就会随javaWeb程序启动。
这时一个监听器启动的配置方式
但是如果只是springMVC其实也可以不配置监听器,而是其他的方式配置也可以(二者差距不大因为这样都能启动)
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>Archetype Created Web Application</display-name>
<welcome-file-list>
<welcome-file>/WEB-INF/jsp/test1.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
2、加载springMVC配置
在上面的代码里,我们可以看到,
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
这句话就是告诉它,这个项目启动的时候,要加载我的springmvc.xml这个文件,且1,在一开始的时候,就要加载
<?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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 开启注解扫描 -->
<context:component-scan base-package="com.qcby.aile"/>
<!-- 开启springMvc框架注解的支持 -->
<mvc:annotation-driven/>
<!-- 试图解析对象 -->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
在上面的注释启动注解扫描的一行,告诉我们要去哪一个类文件路径下去扫描我们的@Controller注解,认购通过反射的机制取寻找我们的那个类,获取之后,需要保存下来,在springMVC中,有一个HandlerMapping(处理器映射器),这个HandlerMapping的数据结构就是map,具有key和value,其中的key存储的就是我们@RequestMapping()中的路径,也就是我们的访问路径,value存储的是类信息和方法信息,所以当我们按照访问路径访问的时候就会自动找到这个类下的这个方法执行其中的逻辑
springMVC的用户访问流程
发起一个Resquest请求/hello
1、用户访问前端控制器(DispatcherServlet)
客户端发送一个请求Request,加入我们的前端控制器,这是一个指挥中心,它接收到我们的这个请求,假设这个请求是/hello
2、请求查找处理器映射器(HanderMapping)
前端控制器接收到我们的请求后,统一的发往处理器映射器,然后它知道我们的请求是/hello,于是它在类中找到@Controller注解下面的带有@RequestMapping("/hello")的方法,但是处理器映射器它不做操作,只是负责给我们找我们需要的方法,即映射
3、处理器适配器(HandlerAdapter)
此是到了我们的方法了,无论我们是上面请求,都会通过映射器来到我们的设配器,适配器去执行我们的方法即我们的@RequestMapping("/hello")对应的方法,执行完后,会返回一个ModelAndView
4、返回ModelAndView
然后返回的视图解析器会再次来到我们的前端控制器(DispatcherServlet),还是起分发的作用,只是这次不再是去外面的处理器映射器而是去外面的视图解析器(VIewResolver)
5、视图解析器(VIewResolver)
返回的页面ModelAndView通过视图解析器来解析,根据我们的返回结果需要跳转到xxx.jsp或者xxx.html页面
6、Response响应
通过视图解析器的解析,前端控制器以及找到需要跳转到哪一个页面了,如果将试图渲染、将模型数据填充到Response中,组后返回到外面的前端页面,即我们的Response响应