官方文档:https://docs.spring.io/spring/docs/5.0.2.RELEASE/spring-framework-reference/web.html#mvc-servlet-context-hierarchy

以前开发web工程:servlet、filter、listener都需要在web.xml进行注册,包括springmvc的前端控制器DispatcherServlet也需要在web.xml进行注册,现在用【注解】方式快速搭建一个web应用:

1、servlet3.0需要tomcat7.0以上版本进行支持

2、创建动态web工程(Dynamic Web Project),领略以下原生版servlet:

步骤如下:

2.1)创建工程

  

2.2)新建jsp页面

2.3)新增一个请求地址

2.4)新增一个原生servlet来处理order请求

发布到tomcat,然后启动测试

浏览器访问jsp或者直接访问:

可以访问到工程,当然这些注解不是重点,原生的servlet开发很少人用。。

阅读servlet 3.0 API文档

4、Shared libraries(共享库)and runtimes pluggability(运行时插件)的原理,在后面的框架整合里。用的比较多

ServletContainerInitializer初始化web容器:

在web容器启动时为提供给第三方组件机会做一些初始化,例如注册servlet或者filter等,servlet规范(JSR356)中通过ServletContainerInitializer实现此功能。

从上图可以知道,每个框架要使用ServletContainerInitializer就必须:

在对应的jar包的META-INF/services目录下创建一个名为javax.servlet.ServletContainerInitializer的文件,文件内容指定具体的ServletContainerInitializer实现类,那么,当web容器启动时就会运行这个初始化器做一些组件内的初始化工作。

步骤如下:

4.1)创建META-INF/services目录

4.2)创建javax.servlet.ServletContainerInitializer文件

如下

4.3)新建HongServletContainerInitializer实现ServletContainerInitializer

创建感兴趣的类型及其子类

4.4)编辑javax.servlet.ServletContainerInitializer文件内容

4.5)一般伴随着ServletContainerInitializer一起使用的还有HandlesTypes注解,通过HandlesTypes可以将感兴趣的一些类注入到ServletContainerInitializer的onStartup方法作为参数传入

4.6)启动tomcat测试,看打印日志,不难发现,都拿到了,可以根据需要来反射创建对象

这其实就是基于运行时插件的机制,启动并运行这个ServletContainerInitializer,在整合springmvc的时候会用到

4.7)接下来看下ServletContext arg1,使用ServletContext注册web组件(其实就是Servlet,Filter,Listener三大组件),

对于我们自己前面写的HongServlet,我们可以使用@WebServlet注解来加入HOngServlet组件,

但若是我们要导入第三方阿里的连接池或filter,以前的web.xml方式就可通过配置加载就可以了,但现在我们使用ServletContext注入进来;

创建三个组件:

1)新建OrderFilter过滤器

2)新建OrderListener.java监听类

3)新建OrderServlet类

4)使用ServletContext来注册上面新建的三个组件

注意:在运行的过程中,是不可以注册组件, 和IOC道理一样,出于安全考虑

运行tomcat

5)利用以上机制来整合springmvc;创建一个新的maven工程,springmvc注解版

       

5.1)创建完工程后,pom.xml会报错,老铁们,怎么办???不要慌,哈哈看下面吧

做个设置即可

再右键工程名,update更新一下maven配置就不会有错

5.2)加入依赖jar包

5.3)导入依赖包后,查看maven的一个spring-web.jar包

打开ServletContainerInitializer这个文件

5.4)打开SpringServletContainerInitializer源码类

5.5)打开WebApplicationInitializer源码看看组件及实现(ctrl+t)

子类AbstractContextLoaderInitializer作用:

子类AbstractDispatcherServletInitializer的作用:从名字来看可知是DispatcherServlet初始化

子类AbstractAnnotationConfigDispatcherServletInitializer:注解方式配置的dispatcherServlet初始化器

root根容器与servlet容器的区别在哪呢?父子容器

很明显,servlet的容器用来处理@Controller,视图解析,和web相关组件

而root根容器主要针对服务层,和数据源DAO层及事务控制相关处理(图源自spring官网)

https://docs.spring.io/spring/docs/5.0.2.RELEASE/spring-framework-reference/web.html#mvc-servlet-context-hierarchy

接下来我们根据这些来配置操作一下

6.与springmvc的整合流程。

操作步骤

新建HongWebInitializer继承AbstractAnnotationConfigDispatcherServletInitializer类

新建两个配置类HongRootConfig和HongAppConfig,形成父子容器的效果

新建控制类

服务类

注意:JamesWebAppInitializer还需要指定配置类(配置文件)位置,修改以下返回

重启tomcat,进行测试

这就使用注解的方式(配置类)来完成配置springmvc的整合

Servlet3.0与springmvc那些事的更多相关文章

  1. Spring注解驱动开发(七)-----servlet3.0、springmvc

    ServletContainerInitializer Shared libraries(共享库) / runtimes pluggability(运行时插件能力) 1.Servlet容器启动会扫描, ...

  2. Servlet3.0整合Springmvc(注解版)

    在创建maven的web工程时候,如果报错缺少web.xml 则在pom添加如下配置 : <build> <plugins> <plugin> <groupI ...

  3. SpringMVC快速使用——基于XML配置和Servlet3.0

    SpringMVC快速使用--基于XML配置和Servlet3.0 1.官方文档 https://docs.spring.io/spring-framework/docs/5.2.8.RELEASE/ ...

  4. springmvc学习指南 之---第27篇 spring如何实现servlet3.0无web.xml 配置servlet对象的

    writedby 张艳涛 基于web.xml配置,有人说麻烦,tomcat给按照servlet3.0,实现了基于注解@WebServlet,有人说springmvc的springmvc.xml配置麻烦 ...

  5. Servlet3.0的动态

    动态的创建是为了简化配置文件的.对于我们创建的servlet,filter和listener后可以使用.这也是注解的另外一种替代方式. 动态的添加有两种,一种是基于ContextListener的,另 ...

  6. Spring MVC3.2 通过Servlet3.0实现文件上传

    Servlet3.0规范增加了对文件上传的原生支持,这里记录一下Spring MVC3通过Servlet3上传文件的实现. 配置文件: applicationContext.xml <!-- s ...

  7. Servlet3.0异步请求

    在Servlet3.0之前,Servlet采用Thread-Per-Request的方式处理请求 即每次Http请求都有一个线程从头到尾负责处理 如果一个请求需要进行IO操作,比如访问数据库.调用第三 ...

  8. DispatcherServlet和ContextLoaderListener,还有spring+servlet3.0 无web.xml启动问题

    上篇提到: 关于spring +springmvc中两个spring应用上下文(DispatcherServlet和ContextLoaderListener)的问题,挺让人迷糊的. 他们都是加载Be ...

  9. 浅尝Spring注解开发_Servlet3.0与SpringMVC

    浅尝Spring注解开发_Servlet 3.0 与 SpringMVC 浅尝Spring注解开发,基于Spring 4.3.12 Servlet3.0新增了注解支持.异步处理,可以省去web.xml ...

随机推荐

  1. oracle04 约束,索引

    约束(constraint)一.定义 为表的列添加一些约束,以满足用户的需求.在之后的DML(select,insert,update) 数据时,若不满足约束条件,则语句不能执行 注:可以为约束起别名 ...

  2. LG2292 L语言

    题意 给出\(n\)个单词,再给出\(m\)段无符号的文章,询问每段文章能最长匹配的前缀. 思路 设\(f[i]\)为前缀\([1,i]\)能否被匹配,对于一个可以匹配完的节点\(i\),若有\([i ...

  3. VMware运行gazebo,关于vmw_ioctl_command error Invalid argument错误

    运行rviz 时报  VMware: vmw_ioctl_command error 无效的参数.  这个错误. 或者 运行gazebo,关于vmw_ioctl_command error Inval ...

  4. 在visual studio code 中配置python以及解决中文乱码问题

    安装好 visual stuido code (下面简称 “ VSC ”)后,要想使用它运行调试 python 代码还需要做一些工作以解决下列问题: 搭建 python 环境 print 打印中文出现 ...

  5. python基础之 迭代器回顾,生成器,推导式

    1.迭代器回顾 可迭代对象:Iterable 可以直接作用于for循环的对象统称为可迭代对象:Iterable.因为可迭代对象里面存在可迭代协议,所以才会被迭代 可迭代对象包括: 列表(list) 元 ...

  6. DAX/PowerBI系列 - 建模视图可以多个分页

    PowerBI 十一月的更新终于有了一个解决密集恐惧症患者的方法,建模视图每个tab专注于一个领域,更加简洁. ps: Microstrategy早就有了.

  7. IMU 标定 | 工业界和学术界有什么不同?

    点击"计算机视觉life"关注,置顶更快接收消息! 由于格式问题最好在公众号上观看<IMU 标定-工业界和学术界有什么不同?> 本文主要介绍了IMU基本结构原理和误差的 ...

  8. 细说@Html.ActionLink()的用法(转)

    细说@Html.ActionLink()的用法   一.@Html.ActionLink()概述 在MVC的Rasor视图引擎中,微软采用一种全新的方式来表示从前的超链接方式,它代替了从前的繁杂的超链 ...

  9. 全志A33驱动GT911触摸屏

    0x00 环境说明: 所使用的开发板为锐尔威视的插针版A33_Vstar 触摸屏驱动IC为GT911 接线参照开发板的TP线路 0x01 修改系统配置文件: 笔者所使用的A33开发板的系统配置文件路径 ...

  10. php爬虫入门

    本篇文章介绍PHP抓取网页内容技术,利用PHP cURL扩展获取网页内容,还可以抓取网页头部,设置cookie,处理302跳转. 一.cURL安装 采用源码安装PHP时,需要在configure时添加 ...