有关从servlet提供静态文件的问题

时间:2010-05-28 15:53:55

标签: java servlets static

我对servlet很新。我想提供一些静态文件,一些CSS和一些JavaScript。这是我到目前为止所得到的:

在web.xml中:

<servlet>
    <description></description>
    <display-name>StaticServlet</display-name>
    <servlet-name>StaticServlet</servlet-name>
    <servlet-class>StaticServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>StaticServlet</servlet-name>
    <url-pattern>/static/*</url-pattern>
</servlet-mapping>

我假设在StaticServlet我必须与request.getPathInfo合作才能看到请求的内容,获取mime类型,阅读文件&amp;把它写给客户。

如果这不是可行的方法,或者不是一种可行的做事方式,请提出更好的方法。 我不确定将static目录放在何处,因为如果我尝试打印new File("."),它会给我Eclipse安装目录。 有没有办法找出项目的目录?

3 个答案:

答案 0 :(得分:5)

您确实可以让servletcontainer的DefaultServlet处理此问题。

要回答实际问题,即使它仅用于学习目的,您也可以使用ServletContext#getRealPath()将相对网络路径转换为绝对本地磁盘文件系统。

String relativeWebPath = "/static/file.ext";
String absoluteFilePath = getServletContext().getRealPath(relativeWebPath);
File file = new File (absoluteFilePath);
// ...

答案 1 :(得分:2)

您不需要通过servlet提供静态内容,servlet容器可以直接从war文件中提供。

您需要servlet才能执行此操作的唯一情况是,如果您希望将原始项目用作模板,您希望在将其返回到客户端浏览器之前以编程方式进行操作。

答案 2 :(得分:2)

如果要提供静态文件,可以将它们包含在WAR中。无论Servlet未处理什么,默认情况下都会查看war的根目录。