「 TOMCAT 」 十月 22, 2023

隐藏 Tomcat 版本信息

文章字数 7.2k 阅读约需 7 mins.

访问 Tomcat 发布的应用中不存在的页面或 URL 中包含特殊字符时,会看到下面这样的界面:

http://localhost:8080/not-exist

http://localhost:8080...

查看全文

「 SERVLET 」 十二月 27, 2020

Override same class

文章字数 7.5k 阅读约需 7 mins.

实际 Java Web 项目中经常会遇到这样的场景:希望对依赖的某个三方库中的行为进行覆盖式的定制(修改三方库中的某些行为),但并不希望发布定制的版本至私服。

通常在使用 WAR 包发布应用时,可将定制的类编译成 class 文件,放入 WEB-INF/classes 路径中,即可覆盖放置在 WEB-INF/lib 路径下的三方库中同名类,达到定制的目的。

那么为什么可以这样?

在两个相同的 class 必须都存在于 JAR 包中时,又怎么实现这种需求呢?

Servlet 规范

在 Java(TM...

查看全文

「 TOMCAT 」 八月 02, 2020

Tomcat 是怎么找到用来处理请求的 Servlet 的?

文章字数 14k 阅读约需 12 mins.

在 Servlet 注册到了哪? 中,我们找到了配置的 Servlet 被包装成了一个 StandardWrapper,以注册的 Servlet name 为 key 放入了其父容器(Context)一个 HashMap 里。那么当 Tomcat 收到一个请求的时候,是怎么找到对应的 Servlet 以对请求进行处理的呢?

先放一张图:

总的来说,这个过程分为两部分:

  1. 读取所有 Servlet 的配置,放入 Mapper 中;
  2. 将请求匹配到具体的 Servlet 上。

注:本文以 Tomcat...

查看全文

「 SPRING 」 四月 30, 2020

Servlet 注册到了哪?

文章字数 4.1k 阅读约需 4 mins.

按 还在给每个请求加前缀避免模块间接口冲突呢? 中内容,我们可以通过 ServletRegistrationBean 注册多个 DispatcherServlet,那么 Servlet 被注册到哪了呢?

简单的回答:Servlet 容器。

没毛病!但马达马达大内!注册到了 Servlet 容器里的哪?存在什么结构里?

让我们以 Tomcat 容器为例,刨根问底。

在 ServletRegistrationBean 中,有一个 addRegistration 方法,将具体的 Servlet 添加到...

查看全文

「 JAVA 」 十月 14, 2015

调试跟进 tomcat 源码

文章字数 2.3k 阅读约需 2 mins.

调试 web 应用时,有时需要跟进 tomcat 的源码。下载 tomcat 源码并编译运行是一种方式,不过太麻烦,有没有简单点的办法呢?

给项目加上 tomcat 的 jar 包作为运行时依赖,并附加源码,就可以在调试的时候跟进 tomcat 的源码了。

以 Gradle 和 tomcat 7.0.63 为例,只需在 build.gradle 的 dependencies 中加入如下代码即可:

depencencies {
    def tomcatVer = '7.0.63'
    runtime...
查看全文
0%