一.SpringMVC
就是关于Web层面的MVC分层框架
是Spring FrameWork框架的延续
该框架为我们的Web开发提供了一整套的MVC模式
View: jsp 或html页面 -->客户端也可以是浏览器
Controller: class类,拥有@Controller ----->核心
Model: 就是Map集合 ,这里的数据默认会转化到request.setAttribute
原来的url
http://localhost:8080/TB/index?un=张三&pass=123456
RESTFUL:类型的url
http://localhost:8080/TB/index/张三/123456
二.SpringMVC基本使用
1.引用jar包
2. 创建配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--配置控制器对象 -->
<bean id="/h1" class="org.qf.controller.HelloController"></bean>
<!-- 扫描注解 -->
<context:component-scan base-package="org.qf.controller"></context:component-scan>
</beans>
3. 创建控制器对象
4. 在web.xml配置分发的DispatcherServlet并加载配置文件
5.运行
SpringMVC三大件 -->缺一不可
1.控制器: 我们需要重点掌握
2.xxxMVC.xml :配置Spring FrameWork的一些内容 :控制器需要在该配置中使用
3.DispatcherServlet :前端控制器(分发的servlet) :解析请求并转发给对应的View
3.SpringMVC配置详解
DispatcherServlet:
必须在web.xml中进行注册映射
这个必须优先启动,数值越小,优先级越高
需要配置:
<load-on-startup>1</load-on-startup>
默认会加载 :Spring FrameWork的配置文件,文件要求
文件: WEB-INF/servletname--->servlet.xml
(SpringMVC规定,一个DispatcherServlet就应该有一个配置文件)
如果改变配置文件路径:
需要使用`初始化参数
contextConfigLocation
这个值就是我们的配置文件路径
该Servlet的url-pattern取值说明:
1. /完整名称 :只能针对当前的url请求
2 /* :拦截所有 包含:图片(png\jpg等) css js html jsp servlet等 SpringMVC 不建议使用
3. /*.xxx -->*.do *.op *.action *.controller *.jpg -->拦截指定字符结尾的请求
4. / :拦截所有资源(除了jsp)-->springMVC推荐使用
<!--就是为了放行静态资源 -->
<mvc:default-servlet-handler/>
<mvc:resources location="" mapping=""></mvc:resources>
初始化过程:
1. 在启动Web项目时,容器(比如Tomcat)会读web.xml配置文件中的两个节点<listener>和<contex-param>。
2. 接着容器会创建一个ServletContext(上下文),应用范围内即整个WEB项目都能使用这个上下文。
3. 接着容器会将读取到<context-param>转化为键值对,并交给ServletContext。
4. 容器创建<listener></listener>中的类实例,即创建监听(备注:listener定义的类可以是自定义的类但必须需要继承ServletContextListener)。
5. 在监听的类中会有一个contextInitialized(ServletContextEvent event)初始化方法,在这个方法中可以通过event.getServletContext().getInitParameter("contextConfigLocation") 来得到context-param 设定的值。在这个类中还必须有一个contextDestroyed(ServletContextEvent event) 销毁方法.用于关闭应用前释放资源,比如说数据库连接的关闭。
6. 得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早。
ContextLoaderListener初始化的上下文加载的Bean是对于整个应用程序共享的,不管是使用什么表现层技术,一般如DAO层、Service层Bean;
DispatcherServlet初始化的上下文加载的Bean是只对Spring Web MVC有效的Bean,如Controller、HandlerMapping、HandlerAdapter等等,该初始化上下文应该只加载Web相关组件。
由上面的初始化过程可知容器对于web.xml的加载过程是context-param >> listener >> fileter >> servlet
三.Spring FrameWork的配置文件
也就是之前Spring的配置文件
通过IOC容器创建的对象
需要引用:mvc 和context还有bean
可以配置:
需要配置控制器对象
配置视图拦截器
数据解析器
1.控制器
根据创建控制器方式的不同,配置也不一样
2.SpringMVC创建的两种创建方式
实现Controller接口(基本不用)
需要在配置文件中,使用<bean id="url" class=""/>
必须实现唯一方法:
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
注解
@Controller:主要用在类上,标记这是一个控制器
内部的方法应该使用@RequestMapping
可以用来类或方法上,可以标记请求的url路径
必须在配置文件中使用
<context:component-scan base-package="org.qf.controller"></context:component-scan>
进行注解的扫描
四.解析DispatcherServlet
DispatcherServlet:类
继承
FrameworkServlet
继承
HttpServletBean
继承
HttpServlet
initStrategies(ApplicationContext context),完成初始化配置
完成以下的模块哈ude初始化:
initMultipartResolver(context);//文件上传模块的初始化
主要用来完成文件上传的
initLocaleResolver(context);//初始化本地化解析
国际化
initThemeResolver(context);//主题解析器
initHandlerMappings(context);处理器映射文件
一般用来处理Mapping
initHandlerAdapters(context);处理器适配器
initHandlerExceptionResolvers(context);处理器异常解析器
initRequestToViewNameTranslator(context);视图名称解析器
initViewResolvers(context);视图解析器
initFlashMapManager(context);flash刷新
DispatcherServlet内部的对象实例:
multipartResolve:默认没有,一个
localeResolver:默认有,一个
themeResolver:默认有,一个
handlerMapping:默认有,可以有多个
handlerAdapter:默认有,可以有多个
handlerExceptionResolver:默认有,可以有多个
viewNameTranslator:默认有,一个
viewResolvers:默认有,可以有多个
flashMapManager:默认有,一个
五.执行过程:
initStrategies:完成初始化
详情见图: