SpringMVC执行流程机器配置

在这里插入图片描述
SpringMVC:
Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web 框架,即使用了MVC架构模式的思想,将web 层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。
在这里插入图片描述
在 Web世界里,具体步骤如下:
1、Web浏览器(如IE)发起请求,如访问http://www,baidu.com
2、Web服务器(如Tomcat)接收请求,处理请求(比如注册,则将把用户保存一下),最后产生响应(一般为html)。
3、web服务器处理完成后,返回内容给web客户端(一般就是我们的浏览器),客户端对接收的内容进行处理(如web浏览器将会对接收到的html内容进行渲染以展示给客户)。
因此,在 Web世界里:
都是Web客户端发起请求,Web服务器接收、处理并产生响应。
一般 Web服务器是不能主动通知Web 客户端更新内容。虽然现在有些技术如服务器推(Comet)、还有现在的HTML5,websocket可以实现Web服务器主动通知Web客户端。

模型和视图之间是不能直接连通的,只能通过控制器连接视图
在这里插入图片描述

首先让我们了解下MVC(Model-View-Controller)三元组的概念:
Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据) 和 服务层(行为)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。
View(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。
Controller(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。也就是说控制器做了个调度员的工作,。
从上图我们还看到,在标准的MVC中模型能主动推数据给视图进行更新,但在Web开发中模型是无法主动推给视图(无法主动更新用户界面),因为在Web开发是请求-响应模型。
在这里插入图片描述
Spring Web MVC处理请求的流程
在这里插入图片描述

*处理器映射器=====>返回执行链*
在这里插入图片描述

执行过程:
第一步:发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求HandlerMapping查找 Handler
可以根据xml配置、注解进行查找
第三步:处理器映射器HandlerMapping根据请求url查找处理器,找到后向前端控制器返回Handler
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器去执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
ModelAndView是springmvc框架的一个底层对象,包括 Model和view
第八步:前端控制器请求视图解析器去进行视图解析
根据逻辑视图名解析成真正的视图(jsp)
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染
视图渲染将模型数据(在ModelAndView对象中)填充到request域
第十一步:前端控制器向用户响应结果
组件:
1、前端控制器DispatcherServlet(不需要程序员开发)
作用接收请求,响应结果,相当于转发器,中央处理器。
有了DispatcherServlet减少了其它组件之间的耦合度。

2、处理器映射器HandlerMapping(不需要程序员开发)
作用:根据请求的url查找Handler

3、处理器适配器HandlerAdapter(不需要程序员开发)
作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler

4、处理器Handler(需要程序员开发)
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler

5、视图解析器View resolver(不需要程序员开发)
作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)

6、视图View(需要程序员开发jsp)
View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)

在这里插入图片描述
web.xml配置
在这里插入图片描述
5)在springMVC的配置文件中配置处理器映射器,处理器适配器,视图解析器
在这里插入图片描述
配置视图解析器
绝对路径和相对路径视图解析器

在这里插入图片描述

在这里插入图片描述

物理视图
在这里插入图片描述
6)开发处理器
在这里插入图片描述
在这里插入图片描述
第二种处理器映射器写法

HandlerMapping处理器映射器
	HandlerMapping 负责根据request请求找到对应的Handler处理器及Interceptor拦截器,将它们封装在HandlerExecutionChain 对象中给前端控制器返回。
1.**BeanNameUrlHandlerMapping**
	BeanNameUrl处理器映射器,根据请求的url与spring容器中定义的bean的name进行匹配,从而从spring容器中找到bean实例。
	<bean		class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> 
2. **SimpleUrlHandlerMapping**
	simpleUrlHandlerMapping是BeanNameUrlHandlerMapping的增强版本,它可以将url和处理器bean的id进行统一映射配置。
<!—简单url映射 -->
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/items1.action">controller的bean id</prop>
				<prop key="/items2.action">controller的bean id</prop>
			</props>
		</property>
	</bean>

HandlerAdapter处理器适配器
HandlerAdapter会根据适配器接口对后端控制器进行包装(适配),包装后即可对处理器进行执行,通过扩展处理器适配器可以执行多种类型的处理器,这里使用了适配器设计模式。
1.SimpleControllerHandlerAdapter
SimpleControllerHandlerAdapter简单控制器处理器适配器,所有实现了org.springframework.web.servlet.mvc.Controller 接口的Bean通过此适配器进行适配、执行。
在springmvc.xml文件配置如下:

<bean		class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> 

2. HttpRequestHandlerAdapter
HttpRequestHandlerAdapter,http请求处理器适配器,所有实现了org.springframework.web.HttpRequestHandler 接口的Bean通过此适配器进行适配、执行。

package org.csmf.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.HttpRequestHandler;

public class HelloWorldController2 implements HttpRequestHandler {

	@Override
	public void handleRequest(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//填充数据
		request.setAttribute("hello", "helloWorld");
		//视图
		request.getRequestDispatcher("WEB-INF/jsp/hello.jsp").forward(request, response);
		
	}
}

从上边可以看出此适配器器的handleRequest方法没有返回ModelAndView,可通过response修改定义响应内容,比如返回json数据:

response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("json串");

基于注解处理器映射器,处理器适配器的springMVC开发

1)在SpringMVC.xml配置文件中,配置注解处理器映射器,处理器适配器
在这里插入图片描述
2)编写处理器,就是一个普通类,很灵活 这个类可以包含n个处理请求的方法

处理器: hander :把这个类每一个处理请求的方法,称为处理器

这个类称为 :控制器
在这里插入图片描述
方法参数可以自动进行类型转换
在这里插入图片描述
给方法(处理器)绑定url
在这里插入图片描述
在这里插入图片描述
给这个类(控制器)加上注解@Controller
在这里插入图片描述
在springMVC.xml配置扫描注解


```java
<!-- 对于注解的Handler可以单个配置
	实际开发中建议使用组件扫描
	 -->
	<!-- <bean class="org.csmf.controller.HelloWorldController3" /> -->
	<!-- 可以扫描controller、service、...
	这里让扫描controller,指定controller的包
	 -->
	<context:component-scan base-package="org.csmf.controller"></context:component-scan>

**扫描包的时候要注意:spring容器扫描和springMVC容器扫描都会扫描到web的bean,但是我们只用springMVC扫描的web的bean,所以spring扫描包时只扫描Mapper和Service的bean**

**spring扫描包:**
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201209165428199.png)
**springMVC扫描的web的bean:**
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201209165707502.png)

![在这里插入图片描述](https://img-blog.csdnimg.cn/2020120916473976.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjIwOTE3NA==,size_16,color_FFFFFF,t_70)



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值