简体   繁体   中英

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?

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM