I'm very new to servlets. I'd like to serve some static files, some css and some javascript. Here's what I got so far:
In 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>
I'm assuming in the StaticServlet
I'd have to work with request.getPathInfo
to see what was requested, get开发者_StackOverflow中文版 a mime type, read the file & write it to the client.
If this is not the way to go, or is not a viable way of doing things, please suggest a better way.
I'm not really sure where to place the static
directory, because if I try to print new File(".")
it gives me the directory of my Eclipse installation.
Is there a way to find out the project's directory?
You can indeed just let the servletcontainer's DefaultServlet
handle this.
To answer your actual question, even though it's just for learning purposes, you can use ServletContext#getRealPath()
to convert a relative web path to an absolute local disk file system.
String relativeWebPath = "/static/file.ext";
String absoluteFilePath = getServletContext().getRealPath(relativeWebPath);
File file = new File (absoluteFilePath);
// ...
You don't need to serve static content via a servlet, the servlet container can serve this directly from your war file.
The only time you would need a servlet to do this is if you would want to use the original item as a template which you would want to manipulate programmatically before returning it to the client browser.
If you want to serve static files, you can just include them in the WAR. Whatever isn't handled by a Servlet will look in the root directory of the war by default.
精彩评论