Servlet3.0与springmvc那些事

官方文档: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,然后启动测试

浏览器访问:

可以访问到工程,当然这些注解不是重点,原生的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的整合

原文地址:https://www.cnblogs.com/hongzm/p/10663748.html

时间: 2024-11-09 04:43:57

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

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

ServletContainerInitializer Shared libraries(共享库) / runtimes pluggability(运行时插件能力) 1.Servlet容器启动会扫描,当前应用里面每一个jar包的 ServletContainerInitializer的实现2.提供ServletContainerInitializer的实现类: 必须绑定在,META-INF/services/javax.servlet.ServletContainerInitializer 文件

Servlet3.0整合Springmvc(注解版)

在创建maven的web工程时候,如果报错缺少web.xml 则在pom添加如下配置 : <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.4</version> <configuration>

Servlet3.0的动态

动态的创建是为了简化配置文件的.对于我们创建的servlet,filter和listener后可以使用.这也是注解的另外一种替代方式. 动态的添加有两种,一种是基于ContextListener的,另外一种是基于servlet3.0新增接口的ServletContainerInitializer的 动态的主要类是Dynamic 代码: package com.hotusm.dynamic; import javax.servlet.FilterRegistration; import javax

spring boot基础之servlet3.0和spring4.x零配置相关文章

Servlet 3 + Spring MVC零配置:去除所有xml Spring4中的WebApplicationInitializer理解 servlet3注解替代web.xml 利用WebApplicationInitializer配置SpringMVC取代web.xml servlet3.0 ServletContainerInitializer初始化器 servlet 3.0笔记之servlet的动态注册 一个基于注解配置的Web项目的启动流程分析 SpringMVC4零配置 servl

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

Servlet3.0规范增加了对文件上传的原生支持,这里记录一下Spring MVC3通过Servlet3上传文件的实现. 配置文件: applicationContext.xml <!-- spring mvc3+servlet3上传文件需要配置 --><beanid="multipartResolver"class="org.springframework.web.multipart.support.StandardServletMultipartRes

在tomcat上全手工部署Servlet3.0

从头写java文件的方式,编译成CLASS文件,加强对SERVLET容器的理解. 稍后试试JAR和WAR包. 文件内容(跟以前用IDE的一样): HelloServlet.java: package cc.openhome; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet

使用Servlet3.0提供的API实现文件上传

在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不需要借助任何第三方上传组件,直接使用Servlet3.0提供的API就能够实现文件上传功能了. 一.使用Servlet3.0提供的API实现文件上传 1.1.编写上传页面 1 <%@ page language="java" pageEncoding="UTF-8"

log4j+slf4j迁移到log4j2+slf4j (Servlet3.0)

最近对系统中的旧项目实现log升级,选择了log4j2来代替log4j,作为最新一代的log实现,log4j2好在那里可以直接看log4j2性能章节. 这里写写如何从log4j升级到log4j2. 1. maven依赖的变化,对log4j的依赖变成了对log4j2的依赖,在实际使用过程中发现过旧的jboss logging会有问题,使用了3.3.0.Final支持log4j2的版本. <dependency> <groupId>org.apache.logging.log4j<

利用servlet3.0上传,纯原生上传,不依赖任何第三方包

tomcat7里面自带的servlet3.0.jar,支持很多新特性,例如,annotation配置servlet,上传,异步等等.... 如果你的tomcat版本低于7的话,单独在项目中引入servlet3.0.jar的话,有可能会出错,具体没研究过,可能是不兼容吧.所以要使用servlet3.0新特性的话,尽量使用tomcat7 不多说了,贴上代码 @WebServlet(name = "uploadServlet", urlPatterns = "/uploadServ