SpringMVC作用域对象、Model对象、对ajax请求的处理、自定义视图解析器、拦截器、运行原理

30 篇文章 0 订阅
17 篇文章 0 订阅

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官方提供的,支持部分参数自定义。它会在接收到单元方法的返

回值后,给单元方法的返回值增加一个前缀和后缀常量,然后将拼接的返回值作为请求

转发的资源的路径。

使用:

  1. 在springmvc.xml文件中进行配置
    
  2. 在单元方法中按照指定的格式返回资源路径
    

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的运行原理

  • 9
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值