Вы можете определить сервлет в своем web.xml, как показано ниже, а затем использовать request.getRequestDispatcher("file").forward(request,response)
, по сути, что произойдет, так это то, что вы отправите свой запрос сервлету, сопоставление которого /file
, и этот сервлет укажет вам на ваш ресурс /html/file.html
. Обратите внимание, что несмотря на то, что имя элемента jsp-file
, вы можете указать HTML-код из него.
<servlet>
<servlet-name>FileServlet</servlet-name>
<jsp-file>/html/file.html</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>FileServlet</servlet-name>
<url-pattern>/file</url-pattern>
</servlet-mapping>
В качестве дополнения к тому, как шаблоны URL соответствуют сопоставлению сервлетов, представленному в файле web.xml, ниже приведены правила сопоставления сервлетов в файле web.xml (источники — спецификации сервлета и @BalusC answer):
<сильный>1. Сопоставление пути:
Если вы хотите создать сопоставление пути, начните сопоставление с /
и завершите его /*
. Например:
<servlet-mapping>
<servlet-name>FileServlet</servlet-name>
<url-pattern>/foo/bar/*</url-pattern> <!-- http://localhost:7001/MyTestingApp/foo/bar/index.html would map this servlet -->
</servlet-mapping>
<сильный>2. Сопоставление расширения:
Если вы хотите создать сопоставление расширения, используйте сопоставление сервлета *.
. Например:
<servlet-mapping>
<servlet-name>FileServlet</servlet-name>
<url-pattern>*.html</url-pattern> <!-- http://localhost:7001/MyTestingApp/index.html would map this servlet. Also, please note that this servlet mapping would also be selected even if the request is `http://localhost:7001/MyTestingApp/foo/index.html` unless you have another servlet mapping as `/foo/*`. -->
</servlet-mapping>
<сильный>3. Сопоставление сервлета по умолчанию:
Предположим, вы хотите определить, что если сопоставление не соответствует ни одному из сопоставлений сервлета, то оно должно быть сопоставлено с сервлетом по умолчанию, а затем иметь сопоставление сервлета как /
. Например:
<servlet-mapping>
<servlet-name>FileServlet</servlet-name>
<url-pattern>/</url-pattern> <!-- Suppose you have mapping defined as in above 2 example as well, and request comes for `http://localhost:7001/MyTestingApp/catalog/index.jsp` then it would mapped with servlet -->
</servlet-mapping>
<сильный>4. Точное соответствие:
Предположим, вы хотите определить сопоставление с точным соответствием, а затем не используйте подстановочный знак или что-то в этом роде и определите точное совпадение, например /catalog
. Например:
<servlet-mapping>
<servlet-name>FileServlet</servlet-name>
<url-pattern>/catalog</url-pattern> <!-- Only requests with http://localhost:7001/MyTestingApp/catalog will match this servlet -->
</servlet-mapping>
<сильный>5. Корневое сопоставление контекста приложения:
Пустая строка ""
— это специальный шаблон URL, который точно соответствует корню контекста приложения. то есть запросы вида http://localhost:7001/MyTestingApp/
.
<servlet-mapping>
<servlet-name>FileServlet</servlet-name>
<url-pattern></url-pattern> <!-- Only requests with http://localhost:7001/MyTestingApp/ will match this servlet Please note that if request is http://localhost:7001/MyTestingApp/abc then it will not match this mapping -->
</servlet-mapping>
<сильный>6. Сопоставить все сопоставления:
Если вы хотите сопоставить все запросы с одним сопоставлением или переопределить все другие сопоставления сервлетов, создайте сопоставление как /*
.
<servlet-mapping>
<servlet-name>FileServlet</servlet-name>
<url-pattern>/*</url-pattern> <!-- This will override all mappings including the default servlet mapping -->
</servlet-mapping>
Ниже приведена сводная диаграмма из спецификации JMS:
![введите здесь описание изображения](https://i.stack.imgur.com/55qgG.png)
person
hagrawal
schedule
16.06.2017