Reputation: 96957
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 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?
Upvotes: 0
Views: 3867
Reputation: 1109635
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);
// ...
Upvotes: 5
Reputation: 70959
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.
Upvotes: 2
Reputation: 8534
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.
Upvotes: 2