spring mvc

介绍一下spring mvc

spring mvc 是 spring web mvc,spring 框架的一部分,一个 mvc 设计模型的表现层框架。

具体参考:4.2.9.RELEASE 版 spring mvc 官方文章

https://docs.spring.io/spring/docs/4.2.9.RELEASE/spring-framework-reference/htmlsingle/#mvc

以下摘自 https://blog.csdn.net/happy_meng/article/details/79089573

1、用户发送请求至前端控制器DispatcherServlet
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器查找Handler。
3、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
5、HandlerAdapter调用处理器Handler
6、Handler执行完成返回ModelAndView
7、HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器,ViewReslover根据逻辑视图名解析View
9、ViewReslover返回View
10、DispatcherServlet对View进行渲染视图(即将模型数据填充至request域)。
11、DispatcherServlet响应用户
DispatcherServlet前端控制器(springmvc框架提供) 
作用:接收请求,响应结果 
有了前端控制器减少各各组件之间的耦合性,前端控制器相关于中央调度器。

HandlerMapping 处理器映射器(springmvc框架提供) 
作用:根据url查找Handler,比如:根据xml配置、注解方式查找Handler

**HandlerAdapter处理器适配器(springmvc框架提供) 
作用:执行Handler 
不同类型的Handler有不同的HandlerAdapter,好处可以通过扩展HandlerAdapter支持更多类型的Handler

Handler处理器(由程序员开发) 
作用:业务处理 
实现开发中又称为controller即后端控制器 
Handler的开发按照HandlerAdapter的接口规则去开发。 
Handler处理后的结果是ModelAndView,是springmvc的底层对象,包括 Model和view两个部分。 
view中只包括一个逻辑视图名(为了方便开发起一个简单的视图名称)。

ViewReslover视图解析(springmvc框架提供) 
作用:根据逻辑视图名创建一个View对象(包括真实视图物理地址) 
针对不同类型的view有不同类型的ViewReslover,常用的有jsp视图解析器即jstlView

View视图(由程序员开发jsp页面) 
作用:将模型数据填充进来(将model数据填充到request域)显示给用户 
view是一个接口,实现类包括:jstlView、freemarkerView,pdfView…

spring mvc运行流程?

1、在 web 项目的 web.xml 文件配置 DispatcherServlet,启动 web 项目完成初始化动作
2、http 请求到 DispatcherServlet
3、根据 HttpServletRequest 查找 HandlerExecutionChain
4、根据 HandlerExecutionChain 获取 HandlerAdapter、执行 handler
5、Handler 执行完成返回 ModelAndView
6、DispatcherServlet 进行结合异常处理 ModelAndView
7、DispatcherServlet 进行视图渲染,将 Model 数据在 View 中填充
8、DispatcherServlet 返回结果

源码查看思路

  • web.xml 配置 DispatcherServlet 是入口
  • DispatcherServlet 继承 FrameworkServlet 继承 HttpServletBean 继承 HttpServlet,web项目启动时自动调用 HttpServletBean 的 init 方法完成初始化动作
  • 当 http 请求过来,是 HttpServlet 根据请求类型(get、post、delete…) 执行 doGet、doPost、doDelete 等方法,被FrameworkServlet重写,统一调用 FrameworkServlet.processRequest 方法处理请求
  • 在 FrameworkServlet.processRequest 方法中,调用了 DispatcherServlet.doService() 方法,顺着这个方法就可以理清楚 spring mvc 处理 http 请求的整体逻辑

spring mvc有哪些组件?

  • 前端控制器(DispatcherServlet)
  • 处理器映射器(HandlerMapping)
  • 处理器适配器(HandlerAdapter)
  • 拦截器(HandlerInterceptor)
  • 语言环境处理器(LocaleResolver)
  • 主题解析器(ThemeResolver)
  • 视图解析器(ViewResolver)
  • 文件上传处理器(MultipartResolver)
  • 异常处理器(HandlerExceptionResolver)
  • 数据转换(DataBinder)
  • 消息转换器(HttpMessageConverter)
  • 请求转视图翻译器(RequestToViewNameTranslator)
  • 页面跳转参数管理器(FlashMapManager)
  • 处理程序执行链(HandlerExecutionChain)

@RequestMapping的作用是什么?

@RequestMapping 是一个注解,用来标识 http 请求地址与 Controller 类的方法之间的映射。

可作用于类和方法上,方法匹配的完整是路径是 Controller 类上 @RequestMapping 注解的 value 值加上方法上的 @RequestMapping 注解的 value 值。

/**
 * 用于映射url到控制器类或一个特定的处理程序方法.
 */
//该注解只能用于方法或类型上
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
 
    /**
     * 指定映射的名称
     */
    String name() default "";
 
    /**
     * 指定请求的路径映射,别名为path
     */
    @AliasFor("path")
    String[] value() default {};
 
    /** 
	 * 别名为 value,使用 path 更加形象
     */
    @AliasFor("value")
    String[] path() default {};
 
    /**
     * 指定 http 请求的类型如GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE. 
     */
    RequestMethod[] method() default {};
 
    /**
     * 指定映射 http 请求的参数
     */
    String[]params() default {};
 
    /**
     * 指定处理的 http 请求头
     */
    String[] headers() default {};
 
    /**
     * 指定处理的请求提交内容类型(Content-Type)
     */
    String[] consumes() default {};
 
    /**
     * 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
     */
    String[] produces() default {};
}

指定 http 请求的类型使用

public enum RequestMethod {
 
	GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
 
}

@Autowired的作用是什么?

@Autowired 是一个注释,它可以对类成员变量、方法及构造函数进行标注,让 spring 完成 bean 自动装配的工作。
@Autowired 默认是按照类去匹配,配合 @Qualifier 指定按照名称去装配 bean。

常见用法

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
 
import blog.service.ArticleService;
import blog.service.TagService;
import blog.service.TypeService;
 
@Controller
public class TestController {
 
	//成员属性字段使用 @Autowired,无需字段的 set 方法
	@Autowired
	private TypeService typeService;
	
	
	//set 方法使用 @Autowired
	private ArticleService articleService;
	@Autowired
	public void setArticleService(ArticleService articleService) {
		this.articleService = articleService;
	}
 
	//构造方法使用 @Autowired
	private TagService tagService;
	@Autowired
	public TestController(TagService tagService) {
		this.tagService = tagService; 
	}
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值