SpringMVC请求、响应与异步请求


上篇:SpringMVC的配置及概念

SpringMVC核心架构的具体流程步骤

  • 首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行 处理,作为统一访问点,进行全局的流程控制;
  • DispatcherServlet——>HandlerMapping, HandlerMapping 将会把请求映射为 HandlerExecutionChain 对象(包含一 个Handler 处理器(页面控制器)对象、多个HandlerInterceptor 拦截器)对象,通过这种策略模式,很容易添加新 的映射策略;
  • DispatcherServlet——>HandlerAdapter,HandlerAdapter 将会把处理器包装为适配器,从而支持多种类型的处理器, 即适配器设计模式的应用,从而很容易支持很多类型的处理器;
  • HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter 将会根据适配的结果调用真正的处理器的功能处 理方法,完成功能处理;并返回一个ModelAndView 对象(包含模型数据、逻辑视图名);
  • ModelAndView 的逻辑视图名——> ViewResolver,ViewResolver 将把逻辑视图名解析为具体的View,通过这种策 略模式,很容易更换其他视图技术;
  • View——>渲染,View 会根据传进来的Model 模型数据进行渲染,此处的Model 实际是一个Map 数据结构,因此 很容易支持其他视图技术;
  • 返回控制权给DispatcherServlet,由DispatcherServlet 返回响应给用户,到此一个流程结束。

在这里插入图片描述

一、SpringMVC请求与响应

依赖

  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>
  </dependencies>

1、SpringMVC Handle原理与应用

1.1 概念

  • Handler是一个Controller的对象和请求方式的组合的一个Object对象

  • HandleExcutionChains是HandleMapping返回的一个处理执行链,它是对Handle的二次封装,将拦截器关联到一起。然后,在DispatcherServlert中完成了拦截器链对handler的过滤。

  • DispatcherServlet要将一个请求交给哪个特定的Controller,它需要咨询一个Bean——这个Bean的名字为“HandlerMapping”。HandlerMapping是把一个URL指定到一个Controller上,(就像应用系统的web.xml文件使用将URL映射到servlet)。

Handler 中文意思叫操作者,它的主要作用是用于处理映射。
Controller 中文意思叫控制器,一般来说Controller就是一种Handler,但是并非所有Handler的都是Controller。通常我们Controller当中采用的映射处理策略是/或者是方法对应的HTTP客户端请求,这是基于请求的URL地址与HTTP方法来完成的,这种采用的就是我们上面概念提到的HandlerMapping的Bean来进行处理。

1.2 Spring MVC Handler的三种写法

  • 1、Spring开发模式
  @RequestMapping("映射路径")

  public ModelAndView hello(){

    ModelAndView mv = new   ModelAndView();

    mv.addObject("msg","hello   world!");

    mv.setViewName("index.jsp");

    return mv;

  }
  • 2.原生Servlet开发方式
 @RequestMapping("映射路径")

  public void   xx(HttpServletRequest request,HttpServletResponse response) throws   ServletException, IOException{

    request.setAttribute("msg",   "操作成功");

    request.getRequestDispatcher("/index.jsp").forward(request,   response);

  }
  • 3.返回视图
 public String yy(Model model){

    model.addAttribute("msg",   "success");

    return   "forward:/index.jsp";//forward写不写都是转发,redirect代表重定向.

  }

}

① addObject(String attributeName, Object attributeValue)方法中的两个参数分别表示,第一个参数表示设置模型对象的名字,类似于我们声明变量的变量名一样,便于我们后期在页面获取模型对象,如果添加两次重名的模型对象,后者会覆盖前者的值。第二个参数表示具体模型对象的值,它可以是任何一种类型。
② addAll0bjects(Map modelMap)也是添加我们模型数据的方法,只不过它的参数是一个Map类型的集合
③ setView(String viewName)方法,参数填写一个视图的名称,如果我们没有配置视图解析器的话,默认是从WebApp/WebContent路径下面去寻找页面,如找不到页面则会出现404的错误。

2、SpringMVC 视图解析器

2.1 概念

视图解析器的作用是将逻辑视图转为物理视图,所有的视图解析器都必须实现ViewResolver接口。

SpringMVC为逻辑视图名的解析提供了不同的策略,可以在Spring WEB上下文中配置一种或多种解析策略,并指定他们之间的先后顺序。每一种映射策略对应一个具体的视图解析器实现类。程序员可以选择一种视图解析器或混用多种视图解析器。可以通过order属性指定解析器的优先顺序,order越小优先级越高,SpringMVC会按视图解析器顺序的优先顺序对逻辑视图名进行解析,直到解析成功并返回视图对象,否则抛出ServletException异常。

2.2 配置视图解析器

<bean    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property   name="prefix" value="/WEB-INF/jsp/"></property>
        <property   name="suffix" value=".jsp"></property>
 </bean>
  • prefix:表示前缀,简而言之就是返回视图的时候,会在返回路径的前面加上前缀

  • suffix:表示后缀,与前缀同理,会在返回路径的后面加上后缀

关于重定向,一般情况下,控制器方法返回字符串类型的值会被当成逻辑视图名处理,但如果返回的字符串中带forward:或redirect:前缀时,SpringMVC会对它们进行特殊处理:将forward: 和redirect: 当成指示符,其后的字符串作为URL 来处理。

二、SpringMVC异步请求

1、 Ajax基本配置

Ajax本章节我们采用的JQuery给我们封装好的Ajax方法,所以第一步我们需要导入JQuery的库。在我们视图页面(JSP、HTML等)导入我们的JQuery的库。


<!-- 本地JQuery库   -->

<script   src="jquery-1.10.2.min.js" ></script>

<!-- 网络引入 -->

<script   src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">


2、 异步与同步

  • 同步:发送一个请求,等待返回,然后再发送下一个请求

  • 异步:发送一个请求,不等待返回,随时可以再发送下一个请求

优缺点:

  • 同步:可以避免出现死锁,读脏数据的发生,一般共享某一资源的时候用,如果每个人都有修改权限,同时修改一个文件,有可能使一个人读取另一个人已经删除的内容,就会出错,同步就会按顺序来修改。

  • 异步:可以提高效率了,现在cpu都是双核,四核,异步处理的话可以同时做多项工作,当然必须保证是可以并发处理的。

如何设置异步或者同步

在我们JQuery的Ajax方法中,我们只需要设置一个属性就可以设置同步或者异步了。默认JQuery中Ajax是使用的是异步处理(即sync:true)。如需改成同步状态,需要在Ajax方法中放入sync:false。即可变成同步状态。

3、局部刷新

局部刷新是指无需重新加载整个网页的情况下,通过ajax的回调函数更新部分网页的技术。在JQuery中Ajax方法中可以在回调的success 或者error回调方法中对页面部分控件进行局部修改,达到局部刷新的目的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangkay88

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值