文章目录
- SpringMVC核心架构的具体流程步骤
- 一、SpringMVC请求与响应
- 1、SpringMVC Handle原理与应用
- 1.1 概念
- 1.2 Spring MVC Handler的三种写法
- 2、SpringMVC 视图解析器
- 2.1 概念
- 2.2 配置视图解析器
- 二、SpringMVC异步请求
- 1、 Ajax基本配置
- 2、 异步与同步
- 优缺点:
- 如何设置异步或者同步
- 3、局部刷新
上篇: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回调方法中对页面部分控件进行局部修改,达到局部刷新的目的。