Geo
Geo

Reputation: 96957

Questions about serving static files from a servlet

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

Answers (3)

BalusC
BalusC

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

Edwin Buck
Edwin Buck

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

crowne
crowne

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

Related Questions