用于提供静态内容的Servlet
我在两个不同的容器(Tomcat和Jetty)上部署webapp,但是它们用于提供静态内容的默认servlet具有处理我想要使用的URL结构的不同方式(详细信息)。
因此,我希望在webapp中包含一个小的servlet来提供自己的静态内容(图像,CSS等)。 该servlet应该具有以下属性:
If-Modified-Since
标题(即自定义getLastModified
方法) 这样的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-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>myAppServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
这基本上只是将所有内容文件通过扩展映射到默认的servlet,而其他所有内容都映射到“myAppServlet”。
它适用于Jetty和Tomcat。
在这种情况下,不需要完全自定义实现默认的servlet,您可以使用这个简单的servlet将请求包装到容器的实现中:
package com.example;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class DefaultWrapperServlet extends HttpServlet
{
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
RequestDispatcher rd = getServletContext().getNamedDispatcher("default");
HttpServletRequest wrapped = new HttpServletRequestWrapper(req) {
public String getServletPath() { return ""; }
};
rd.forward(wrapped, resp);
}
}
我使用FileServlet获得了很好的结果,因为它支持几乎所有的HTTP(etags,chunking等)。
链接地址: http://www.djcxy.com/p/46219.html上一篇: Servlet for serving static content
下一篇: How to retrieve and display images from a database in a JSP page?