常规容器下SpringBootServletInitializer如何实现web.xml作用解析
-
public abstract class SpringBootServletInitializer implements WebApplicationInitializer{
-
..................
-
public void onStartup(ServletContext servletContext) throws ServletException {
-
this.logger = LogFactory.getLog(super.getClass());
-
WebApplicationContext rootAppContext = createRootApplicationContext(servletContext);
-
-
if (rootAppContext != null) {
-
servletContext.addListener(new ContextLoaderListener(rootAppContext) {
-
public void contextInitialized(ServletContextEvent event) {
-
}
-
});
-
} else
-
this.logger.debug(
-
"No ContextLoaderListener registered, as createRootApplicationContext() did not return an application context");
-
}
-
....................
-
}
- <code class="language-java"><span style="font-size:14px;">@HandlesTypes({ WebApplicationInitializer.class })
- public class SpringServletContainerInitializer implements <span style="background-color:rgb(255,255,255);">ServletContainerInitializer </span>{
- public void onStartup(Set<Class<?>> webAppInitializerClasses, ServletContext servletContext)
- throws ServletException {
- List initializers = new LinkedList();
- if (webAppInitializerClasses != null) {
- for (Class waiClass : webAppInitializerClasses) {
- if ((!(waiClass.isInterface())) && (!(Modifier.isAbstract(waiClass.getModifiers())))
- && (WebApplicationInitializer.class.isAssignableFrom(waiClass))) {
- try {
- initializers.add((WebApplicationInitializer) waiClass.newInstance());
- } catch (Throwable ex) {
- throw new ServletException("Failed to instantiate WebApplicationInitializer class", ex);
- }
- }
- }
- }
- if (initializers.isEmpty()) {
- servletContext.log("No Spring WebApplicationInitializer types detected on classpath");
- return;
- }
- servletContext.log(initializers.size() + " Spring WebApplicationInitializers detected on classpath");
- AnnotationAwareOrderComparator.sort(initializers);
- for (WebApplicationInitializer initializer : initializers)
- initializer.onStartup(servletContext);
- }
- }</span></code>
-
@HandlesTypes({ WebApplicationInitializer.class })
-
public class SpringServletContainerInitializer implements ServletContainerInitializer {
-
public void onStartup(Set<Class<?>> webAppInitializerClasses, ServletContext servletContext)
-
throws ServletException {
-
List initializers = new LinkedList();
-
-
if (webAppInitializerClasses != null) {
-
for (Class waiClass : webAppInitializerClasses) {
-
if ((!(waiClass.isInterface())) && (!(Modifier.isAbstract(waiClass.getModifiers())))
-
&& (WebApplicationInitializer.class.isAssignableFrom(waiClass))) {
-
try {
-
initializers.add((WebApplicationInitializer) waiClass.newInstance());
-
} catch (Throwable ex) {
-
throw new ServletException("Failed to instantiate WebApplicationInitializer class", ex);
-
}
-
}
-
}
-
}
-
-
if (initializers.isEmpty()) {
-
servletContext.log("No Spring WebApplicationInitializer types detected on classpath");
-
return;
-
}
-
-
servletContext.log(initializers.size() + " Spring WebApplicationInitializers detected on classpath");
-
AnnotationAwareOrderComparator.sort(initializers);
-
for (WebApplicationInitializer initializer : initializers)
-
initializer.onStartup(servletContext);
-
}
-
}
-
package com.shf.springboot.config;
-
-
import javax.servlet.ServletContext;
-
import javax.servlet.ServletException;
-
import org.slf4j.Logger;
-
import org.slf4j.LoggerFactory;
-
import org.springframework.core.annotation.Order;
-
import org.springframework.web.WebApplicationInitializer;
-
import com.shf.springboot.runner.MyStartupRunner1;
-
@Order(1)
-
public class MyWebApplicationInitializer implements WebApplicationInitializer {
-
private Logger logger=LoggerFactory.getLogger(MyStartupRunner1.class);
-
-
@Override
-
public void onStartup(ServletContext paramServletContext) throws ServletException {
-
logger.info("启动加载自定义的MyWebApplicationInitializer");
-
System.out.println("启动加载自定义的MyWebApplicationInitializer");
-
}
-
-
}
-
package com.shf.springboot.servlet;
-
-
import java.io.IOException;
-
import javax.servlet.ServletContext;
-
import javax.servlet.ServletException;
-
import javax.servlet.annotation.WebServlet;
-
import javax.servlet.http.HttpServlet;
-
import javax.servlet.http.HttpServletRequest;
-
import javax.servlet.http.HttpServletResponse;
-
import org.springframework.boot.web.servlet.ServletContextInitializer;
-
-
public class Servlet4 extends HttpServlet {
-
private static final long serialVersionUID = -4186518845701003231L;
-
-
@Override
-
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
-
System.out.println("Servlet4");
-
resp.setContentType("text/html");
-
resp.getWriter().write("Servlet4");
-
}
-
-
@Override
-
public void init() throws ServletException {
-
super.init();
-
System.out.println("Servlet4 loadOnStart");
-
}
-
-
}
-
package com.shf.springboot.config;
-
-
import java.util.Set;
-
import javax.servlet.ServletContainerInitializer;
-
import javax.servlet.ServletContext;
-
import javax.servlet.ServletException;
-
import javax.servlet.ServletRegistration;
-
import org.slf4j.Logger;
-
import org.slf4j.LoggerFactory;
-
-
public class MyServletContainerInitializer implements ServletContainerInitializer {
-
private Logger logger=LoggerFactory.getLogger(MyServletContainerInitializer.class);
-
-
@Override
-
public void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException {
-
logger.info("启动加载自定义的MyServletContainerInitializer");
-
System.out.println("启动加载自定义的MyServletContainerInitializer");
-
ServletRegistration.Dynamic testServlet=servletContext.addServlet("servlet4","com.shf.springboot.servlet.Servlet4");
-
testServlet.setLoadOnStartup(1);
-
testServlet.addMapping("/servlet4");
-
}
-
}
6.3、对新增的servlet设置其请求路径,同时打成WAR包部署至tomcat启动服务,但请求http://localhost:8080/SpringBoot1/servlet4却失败,此时发现需要了解servlet3对于ServletContainerInitializer
的加载机制是如何的,在官方有类似这样的描述“该接口的实现必须声明一个JAR资源放到程序中的META-INF/services下,并且记有该接口实现类的全路径,才会被运行时(server)的查找机制或是其它特定机制找到”。那么我们先参考spring-web-4.3.2.RELEASE.jar中
常规容器下SpringBootServletInitializer如何实现web.xml作用解析的更多相关文章
- 转 web项目中的web.xml元素解析
转 web项目中的web.xml元素解析 发表于1年前(2014-11-26 15:45) 阅读(497) | 评论(0) 16人收藏此文章, 我要收藏 赞0 上海源创会5月15日与你相约[玫瑰里 ...
- javaweb项目中关于配置文件web.xml的解析
一..启动tomcat,加载项目中的web.xml文件,创建servercontext上下文对象. 可以通过servercontext对象在应用中获取web.xml文件中的值. web应用加载的顺序与 ...
- 使用Eclipse创建Web项目时WEB-INF下找不到web.xml问题详解
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/yjrguxing/article/deta ...
- ssm web.xml配置解析
以下为web.xml的配置<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi=& ...
- ssm web.xml文件解析
转 以下为web.xml的配置<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:x ...
- javaweb学习总结十七(web应用组织结构、web.xml作用以及配置虚拟主机搭建网站)
一:web应用组织结构 1:web应用组成结构 2:安装web组成机构手动创建一个web应用程序目录 a:在webapps下创建目录web b:在web目录下创建html.jsp.css.js.WEB ...
- struts2中struts.xml和web.xml文件解析及工作原理
web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp ...
- JSF技术web.xml配置解析
对Java tutorial-examples中jsf hell1的web.xml配置文件的解析 <?xml version="1.0" encoding="UTF ...
- hello1 web项目中web.xml作用分析
该web.xml文件包含Facelets应用程序所需的几个元素.使用NetBeans IDE创建应用程序时,将自动创建以下所有内容. 指定项目阶段的上下文参数: <context-param&g ...
随机推荐
- 1、移动端 2、后台 3、 移动端,Web 端 4、 PC端
移动端: 1.公众号:停开心 住总物业 2.app: iso Android 停开心,住总停开心 后台:停开心智慧停车管理平台(所有的停车场) 移动端,Web端: 海投OA,公司OA PC端:收费软 ...
- js进阶 13-1 jquery动画中的显示隐藏函数有哪些
js进阶 13-1 jquery动画中的显示隐藏函数有哪些 一.总结 一句话总结:show(),hide(),toggle(),这三个. 1.jquery动画中显示隐藏效果函数有哪些? show()h ...
- AE地图查询
原文 AE地图查询 地图查询主要有两种查询:空间查询和属性查询 所用到知识点: 1 Cursor(游标)对象 本质上是一个指向数据的指针,本身不包含数据内容,提供一个连接到ROW对象或者要素对象(F ...
- LoaderManager使用具体解释(一)---没有Loader之前的世界
来源: http://www.androiddesignpatterns.com/2012/07/loaders-and-loadermanager-background.html 感谢作者Alex ...
- [array] leetCode-11. Container With Most Water-Medium
leetCode-11. Container With Most Water-Medium descrition Given n non-negative integers a1, a2, ..., ...
- css实现悬浮效果的阴影
要实现的效果图: 图片.png 实现的代码: -webkit-box-shadow:0px 3px 3px #c8c8c8 ; -moz-box-shadow:0px 3px 3px #c8c8c8 ...
- int to str
string int2str( int num){ if (num == 0 ) return " 0 " ; string str = "" ; int nu ...
- WIFI 状态栏显示的wifi信号强度与wifisetting列表不一致
[DESCRIPTION] 状态栏显示的wifi信号强度与wifisetting列表不一致(不同步) [ANALYSIS] 1.apk都是接收RSSI_CHANGED intent,并调用WifiMa ...
- Win10安装后必做的优化,解决磁盘100%占用
Win10安装后必做的优化,解决磁盘100%占用 01关闭家庭组 控制面板–管理工具–服务– HomeGroup Listener和HomeGroup Provider禁用. 02关闭磁盘碎片整理.自 ...
- [ES7] Handle Errors in Asynchronous Functions
This lesson shows how regular control flow statements such as try/catch blocks can be used to proper ...