我在两个不同的容器(Tomcat和Jetty)上部署了一个webapp,但是它们用于提供静态内容的默认servlet具有处理我要使用的URL结构的不同方式(详细信息)。
因此,我希望在web应用程序中包含一个小型servlet,以提供其自己的静态内容(图像,CSS等)。Servlet应该具有以下属性:
这样的servlet在某处可用吗?我能找到的最接近的是servlet书中的示例4-10。
更新:我想使用的URL结构-如果你想知道的话-很简单:
<servlet-mapping> <servlet-name>main</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/static/*</url-pattern> </servlet-mapping>
因此,所有请求都应传递到主servlet,除非它们是static路径请求。问题在于,Tomcat的默认Servlet未考虑ServletPath(因此它在主文件夹中查找静态文件),而Jetty则将其考虑(因此在static文件夹中查找)。
servlet
Tomcat
Servlet
ServletPath
Jetty
static
StaticServlet。它支持If-Modified-Sincegzip编码,并且还应该能够提供war文件中的静态文件。这不是很困难的代码,但是也不是完全无关紧要的。
StaticServlet
If-Modified-Sincegzip
该代码可用:StaticServlet.java。随时发表评论。
StaticServlet.java
更新: Khurram询问有关ServletUtils中引用的类StaticServlet。这只是我用于项目的带有辅助方法的类。你唯一需要的方法是coalesce(与SQL函数相同COALESCE)。这是代码:
Khurram
ServletUtils
coalesce
public static <T> T coalesce(T...ts) { for(T t: ts) if(t != null) return t; return null; }