1.作用域对象
pageContext对象:当前jsp页面有效
request对象:一次请求内
作用:解决了一次请求内的资源的数据共享问题
使用:return “forward:/req.jsp”;请求转发
session对象:一次会话有效
作用:解决了一个用户不同请求的数据共享问题
使用:return “redirect:/session.jsp”;
application(servletContext)对象
作用:解决了不同用户的数据共享问题
使用:return “redirect:/session.jsp”;
2.Model对象
作用:作为数据流转的载体,SpringMVC官方提供的一个对象。
使用:在单元方法上声明Model类型的形参即可。
特点:
请求转发:
model对象中存储的数据,相当于存储到了request对象中
我们在jsp中直接按照request对象作用域取值的方式来获取数据即可。
重定向:
在重定向中,会将第一次请求中model对象的数据作为第二次请求的
请求数据携带,第一次请求的model对象销毁。只能携带基本类型的数据。
@RequestMapping("testModel")
public String testModel(String uname, Integer age, Model model){
//处理请求
System.out.println("使用Model对象作为数据流转的载体");
//响应结果
//将数据存储到Model对象中
model.addAttribute("str","我是Model对象作为请求转发数据流转的载体");
//请求转发
return "forward:/model.jsp";
//重定向
return "redirect:/model.jsp";
}
//jsp页面这样获取值
${requestScope.str}
3.SpringMVC 对Ajax的请求处理
导入Jackson的依赖jar包
声明单元方法处理ajax请求,并在单元方法上新增注解@ResponseBody
4.SpringMVC的视图解析器
本质:
视图解析器就是SpringMVC官方封装好的,根据单元方法的返回值
完成对应的请求转发或者重定向的对象。由DisatcherServlet来调用
内容:
InternalResourceView:请求转发
RedirectView:重定向
ModelAndView:请求转发和重定向
5.SpringMVC的自定义视图解析器
实现:InternalResourceViewResolver,该解析器只支持请求转发
作用:
该解析器是SpringMVC官方提供的,支持部分参数自定义。它会在接收到单元方法的返
回值后,给单元方法的返回值增加一个前缀和后缀常量,然后将拼接的返回值作为请求
转发的资源的路径。
使用:
-
在springmvc.xml文件中进行配置
-
在单元方法中按照指定的格式返回资源路径
6.SpringMVC拦截器
原理图
执行时机:在DispatcherServlet之后,单元方法之前。
作用:对单元方法的请求进行过滤或者其他操作。
使用:
① 创建实现了指定接口的java类
② 在拦截器类中声明对应的功能代码
③ 在springMVC的配置文件中配置拦截器的bean及其拦截范围
基本实现:
①创建实现了HandlerInterceptor接口的java类,并复写方法
②在springmvc.xml文件中配置拦截器及其拦截范围。
方法使用:
preHandle方法:
作用:拦截单元方法的请求
调用者:DispatcherServlet
时机:在单元方法之前执行
返回值:true表示放行,false表示拦截
方法体:拦截逻辑代码,根据需求
形参:
@param request:此次请求的request对象
@param response:此次请求的response对象
@param handler:
实参:HandlerMethod的对象
传递者:DispatcherServlet
HandlerMethod:
该对象中存储了此次请求的单元方法的方法对象
作用:可以在 preHandle拦截方法中通过反射调用请求的单元方法
postHandle方法:
作用:对单元方法处理之后的资源进行修改等特殊操作
调用者:DispatcherServlet
时机:在单元方法执行之后执行,在单元方法跳转的页面资源前执行
方法体:
根据需求
形参:
@param request:此次请求的request对象
@param response:此次请求的response对象
@param handler:
实参:HandlerMethod的对象
传递者:DispatcherServlet
HandlerMethod:
该对象中存储了此次请求的单元方法的方法对象
作用:可以在 preHandle拦截方法中通过反射调用请求的单元方法
@param modelAndView:
作用:封装了此次请求的单元方法的返回值的对象,此次请求的单元方法执行后的视图解析器对象
使用:
可以获取此次单元方法的返回值信息,要跳转的资源及其跳转方式
可以获取此次请求的单元方法在Model对象中存储的流转数据
可以在postHandle方法中对单元方法要跳转的资源进行重置或者对Model对象中流转的数据进行修改
afterCompletion方法:
作用:
处理在放行后,单元方法以及postHandle以及资源等中的异常信息。
调用者:DispatcherServlet
时机:
前提请求被放行,放行之后不管在此次请求的任意位置出现异常,该方法都会被执行
方法体:
根据需求对请求过程中的异常信息进行处理
形参:
@param request:此次请求的request对象
@param response:此次请求的response对象
@param handler:
实参:HandlerMethod的对象
传递者:DispatcherServlet
HandlerMethod:
该对象中存储了此次请求的单元方法的方法对象
作用:可以在 preHandle拦截方法中通过反射调用请求的单元方法
@param ex 接收请求处理过程中的异常信息
在springmvc中配置拦截器
<!--
配置拦截器
作用:
让声明的拦截器类生效完成单元方法请求的拦截
使用:
在springmvc.xml文件中使用<mvc:interceptors>标签声明拦截的配置信息
在<mvc:interceptors>标签下使用子标签完成拦截器的配置
全局拦截
在<mvc:interceptors>直接声明bean标签配置拦截器的bean,拦截所有的单元方法请求。
局部拦截
在<mvc:interceptors>标签下使用子标签<mvc:interceptor>来声明局部拦截
在<mvc:interceptor>标签下使用子标签配置拦截返回以及拦截器的bean
<mvc:mapping path="/demo"/> 要拦截的范围,可以声明多个
<bean id="mm" class="com.bjsxt.inter.MyInter"></bean> 拦截器
-->
<mvc:interceptors>
<bean id="dd" class="com.bjsxt.inter.MyInter2"></bean><!--声明全局拦截,会拦截所有的单元方法的请求-->
<mvc:interceptor>
<mvc:mapping path="/demo"/><!--声明拦截器的拦截范围,要拦截的单元方法的别名,注意需要带/-->
<mvc:mapping path="/demo2"/><!--声明拦截器的拦截范围,要拦截的单元方法的别名,注意需要带/-->
<mvc:mapping path="/demo/**"/><!--拦截以demo为开头路径的单元方法-->
<mvc:mapping path="/a*"/><!--拦截以a开头的单元方法-->
<bean id="mm" class="com.bjsxt.inter.MyInter"></bean><!--声明拦截器的bean对象-->
</mvc:interceptor>
</mvc:interceptors>
7.SpringMVC的运行原理
核心组件:
① DispatchServlet
Servlet分发器,整个SpringMVC框架入口.
②HandlerMapping
寻找URL所请求的HandlerMethod,找@RequestMapping()
使用实现类DefaultAnnotationHandlerMapping实际工作.
③HandlerAdapter
实际调用HandlerMethod的组件.
使用实现类AnnotationMethodHandlerAdapter
④ ViewResovler视图解析器
作用解析HandlerMethod返回值.把逻辑视图转换为需要调用的物理视图.
自定义时:InternalResourceViewResolver
文字说明:
当用户发起请求后,执行DiapacherServlet,如果是JSP直接调用jsp页面.如果不是
JSP,DiapacherServlet调用HandlerMapping判断请求URL是否合法,如果URL不存在
报错,如果URL存在使用HandlerAdapter调用具体的HandlerMethod,当
HandlerMethod执行完成后会返回ModelAndView,会被ViewResovler解析,调用具体
的物理视图.最终响应给客户端浏览器.
具体图:
8.SpringMVC来处理浏览器发起的请求
① SpringMVC的基本使用流程
i. 导入jar包
ii. 配置SpringMVC的配置文件
iii. 配置web.xml文件
iv. 创建控制器类并声明单元方法
② SpringMVC的单元方法获取请求
i. 使用形参名和键名一致获取
ii. 使用@RequestParam注解
iii. 使用实体类对象
iv. 使用restful格式
③ SpringMVC的单元方法的响应方式
i. 请求转发
ii. 重定向
iii. 直接响应
④ SpringMVC中的Ajax请求处理
前台发起ajax的逻辑代码不变,后台单元方法直接返回响应数据,单元方法上使用注解@ResponseBody使用jackson的jar包
⑤ SpringMVC的自定义视图解析器
作用:可以让我们通过在单元方法的返回值中直接
返回资源的名称,即可请求转发WEB-INf下的资源。
注意: forward关键字的声明时机
静态资源的放行的配置
⑥ SpringMVC的上传和下载
异步的上传。
⑦ SpringMVC的拦截器
⑧ SpringMVC的运行原理