- 浏览: 7948701 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
http://blog.khotyn.com/blog/2014/01/21/turnoff-tomcat-tld-scan/
背景
Tomcat 作为 Servlet 规范的实现者,它在应用启动的时候会扫描 Jar 包里面的 .tld 文件,加载里面定义的标签库,但是,我们在开发的时候很多都不是采用 JSP 作为 Web 页面的模板的,很多都是使用 Velocity 之类的模板引擎,自然而然,为了加快应用的启动速度,我们可以把 Tomcat 里面的这个功能给关掉。
方法
看 Tomcat 的配置文档,关于 Context 的设置这一块,看到了 processTlds 这个属性可以设置,看下这个属性的说明:
Whether the context should process TLDs on startup. The default is true. The false setting is intended for special cases that know in advance TLDs are not part of the webapp.
只要在 Context 中把这个属性设置成 false,那么我们就可以关闭 Tomcat 的 TLD 扫描功能了,为了让所有的应用都可以关闭这个功能,我们可以将 Tomcat 目录下的 conf/context.xml 修改成如下这样:
<?xml version='1.0' encoding='utf-8'?>
<Context processTlds="false">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
坑
但是,在 Tomcat 6 中测试的时候,发现这个功能没有生效,无奈只能 Debug Tomcat 的源码,发现 StandardContext 的 init 方法下有如下代码:
if (processTlds) {
this.addLifecycleListener(new TldConfig());
}
super.init();
// Notify our interested LifecycleListeners
lifecycle.fireLifecycleEvent(INIT_EVENT, null);
这里需要说明的一点是,我们的默认的 context 配置是在 lifecycle.fireLifecycleEvent(INIT_EVENT, null); 这行代码中被处理的,而在这行代码之前,Tomcat 就已经使用了 processTlds,我们的配置完全没有生效。
Workaround
那么,这么解决呢?在 context 中,我们还可以配置一个 JarScanner,这个 JarScanner 会被用来扫描 Jar 包中的 tld 文件,我们可以在默认的 context.xml 中配置一个空的 JarScanner,像下面这样:
<?xml version='1.0' encoding='utf-8'?>
<Context processTlds="false">
<JarScanner className="com.alipay.sofa.runtime.test.patch.tomcat.NullJarScanner"/>
</Context>
NullJarScanner 的代码如下:
package com.alipay.sofa.runtime.test.patch.tomcat;
import org.apache.tomcat.JarScanner;
import org.apache.tomcat.JarScannerCallback;
import javax.servlet.ServletContext;
import java.util.Set;
/**
* @author khotyn 14-1-21 下午4:37
*/
public class NullJarScanner implements JarScanner {
@Override
public void scan(ServletContext context, ClassLoader classloader, JarScannerCallback callback, Set<String> jarsToSkip) {
// Do nothing at all.
}
}
需要注意的是,Tomcat 7 不会出现上述的问题,你只要在配置中把 processTlds 设置成 false 即可。
背景
Tomcat 作为 Servlet 规范的实现者,它在应用启动的时候会扫描 Jar 包里面的 .tld 文件,加载里面定义的标签库,但是,我们在开发的时候很多都不是采用 JSP 作为 Web 页面的模板的,很多都是使用 Velocity 之类的模板引擎,自然而然,为了加快应用的启动速度,我们可以把 Tomcat 里面的这个功能给关掉。
方法
看 Tomcat 的配置文档,关于 Context 的设置这一块,看到了 processTlds 这个属性可以设置,看下这个属性的说明:
Whether the context should process TLDs on startup. The default is true. The false setting is intended for special cases that know in advance TLDs are not part of the webapp.
只要在 Context 中把这个属性设置成 false,那么我们就可以关闭 Tomcat 的 TLD 扫描功能了,为了让所有的应用都可以关闭这个功能,我们可以将 Tomcat 目录下的 conf/context.xml 修改成如下这样:
<?xml version='1.0' encoding='utf-8'?>
<Context processTlds="false">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
坑
但是,在 Tomcat 6 中测试的时候,发现这个功能没有生效,无奈只能 Debug Tomcat 的源码,发现 StandardContext 的 init 方法下有如下代码:
if (processTlds) {
this.addLifecycleListener(new TldConfig());
}
super.init();
// Notify our interested LifecycleListeners
lifecycle.fireLifecycleEvent(INIT_EVENT, null);
这里需要说明的一点是,我们的默认的 context 配置是在 lifecycle.fireLifecycleEvent(INIT_EVENT, null); 这行代码中被处理的,而在这行代码之前,Tomcat 就已经使用了 processTlds,我们的配置完全没有生效。
Workaround
那么,这么解决呢?在 context 中,我们还可以配置一个 JarScanner,这个 JarScanner 会被用来扫描 Jar 包中的 tld 文件,我们可以在默认的 context.xml 中配置一个空的 JarScanner,像下面这样:
<?xml version='1.0' encoding='utf-8'?>
<Context processTlds="false">
<JarScanner className="com.alipay.sofa.runtime.test.patch.tomcat.NullJarScanner"/>
</Context>
NullJarScanner 的代码如下:
package com.alipay.sofa.runtime.test.patch.tomcat;
import org.apache.tomcat.JarScanner;
import org.apache.tomcat.JarScannerCallback;
import javax.servlet.ServletContext;
import java.util.Set;
/**
* @author khotyn 14-1-21 下午4:37
*/
public class NullJarScanner implements JarScanner {
@Override
public void scan(ServletContext context, ClassLoader classloader, JarScannerCallback callback, Set<String> jarsToSkip) {
// Do nothing at all.
}
}
需要注意的是,Tomcat 7 不会出现上述的问题,你只要在配置中把 processTlds 设置成 false 即可。
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1587方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2021前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3474info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2238import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 492https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 694public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 617https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 672https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 439https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5451 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3108微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 620https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1846什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 969本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1365原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 866public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 675在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 942-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 774一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1909介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
会扫描每个jar文件,检查其是否包含标签定义文件,及.tld后缀的文件,随着项目规模扩大,用到的jar包文件越来越多,检查每个jar文件会延缓服务器启动时间,比如Tomcat启动时如果检测到扫描了不含.tld文件的jar包,...
本篇文章将详细探讨“Tomcat系统管理功能登录界面”的相关知识点,以及如何安装和使用。 **一、Tomcat简介** Apache Tomcat,简称Tomcat,是一个开源的、免费的Web应用服务器,它实现了Java Servlet和JavaServer ...
在实际开发中,通常会将这些TLD文件放在Web应用的WEB-INF目录下的tags子目录中,以便JSP容器(如Tomcat)能够找到并解析它们。 在压缩包的文件名称列表中,只看到"**tld**",这可能意味着压缩包包含了多个TLD文件,...
TLD扫描仪 TLD扫描程序会扫描所有现有的顶级域,以查找给定域名。 转变 描述 -d <域> 指定域名,例如:“ google” -o <输出文件> 将结果写入 -i 使用您自己的自定义TLD列表-每行一个TLD,没有其他分隔...
JSTL标签所需要的tld文件,包括 c.tld、fmt.tld、fn.tld 三个 几乎所有的JSTL标签下载的zip中都只有一个c.tld,然后只讲解<C:>标签怎么用,其实<fmt:> <fn:>标签也非常好用和实用,找了好久才找到...
**JSTL 1.1 TLD 文件详解**... - 保持TLD文件的更新,以利用最新的功能和安全修复。 总之,JSTL 1.1的TLD文件是构建高效、可维护的Java Web应用的关键元素。理解并熟练掌握它们的使用,有助于提升开发效率和应用质量。
c-1_0.tld, c-1_0-rt.tld, c.tld, fmt-1_0.tld, fmt-1_0-rt.tld, fmt.tld, fn.tld, permittedTaglibs.tld, scriptfree.tld, sql-1_0.tld, sql-1_0-rt.tld, sql.tld, x-1_0.tld, x-1_0-rt.tld, x.tld
C++代码包中的“tld”文件夹很可能包含了实现这些功能的源代码文件,如`tracker.cpp`、`detector.cpp`、`learner.cpp`等。开发者可能还需要OpenCV库来处理图像和进行计算,因此,确保系统安装了OpenCV是运行这些代码...