Вопросы по обслуживанию статических файлов из сервлета - PullRequest
0 голосов
/ 28 мая 2010

Я очень новичок в сервлетах. Я хотел бы подать несколько статических файлов, немного 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, прочитать файл и записать его клиенту.

Если это не тот путь, или он не подходит, пожалуйста, предложите лучший способ. Я не совсем уверен, где разместить каталог static, потому что, если я пытаюсь напечатать new File("."), он дает мне каталог моей установки Eclipse. Есть ли способ узнать каталог проекта?

Ответы [ 3 ]

5 голосов
/ 28 мая 2010

Вы действительно можете просто позволить сервлетконтейнеру DefaultServlet справиться с этим.

Чтобы ответить на ваш актуальный вопрос, даже если он предназначен только для целей обучения, вы можете использовать ServletContext#getRealPath() для преобразования относительного веб-пути в файловую систему абсолютного локального диска.

String relativeWebPath = "/static/file.ext";
String absoluteFilePath = getServletContext().getRealPath(relativeWebPath);
File file = new File (absoluteFilePath);
// ...
2 голосов
/ 28 мая 2010

Если вы хотите обслуживать статические файлы, вы можете просто включить их в WAR. Все, что не обрабатывается сервлетом, по умолчанию будет выглядеть в корневом каталоге войны.

2 голосов
/ 28 мая 2010

Вам не нужно подавать статический контент через сервлет, контейнер сервлетов может обслуживать это прямо из вашего файла военных действий.

Единственный раз, когда вам понадобится сервлет для этого, - это если вы захотите использовать исходный элемент в качестве шаблона, которым вы хотели бы программно манипулировать, прежде чем возвращать его в браузер клиента.

...