我对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安装目录。
有没有办法找出项目的目录?
答案 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的根目录。