URL-шаблон web.xml

Может ли кто-нибудь дать мне информацию о правилах настройки шаблона URL, и если я использую / в качестве своей индексной страницы, а также мне нужно использовать request.getRequestDispatcher("/html/file.html").forward(request,response).

Файл file.html находится в папке html, которая находится в папке war, папка html находится в той же папке, что и WEB-INF.

Может ли кто-нибудь дать мне предложение? Спасибо


person Prakash    schedule 16.06.2017    source источник
comment
Вам необходимо получить копию Спецификация сервлета Java 3.1 и прочитайте его. Особенно главы 10 и 12.   -  person Steve C    schedule 16.06.2017


Ответы (1)


Вы можете определить сервлет в своем 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:

введите здесь описание изображения

person hagrawal    schedule 16.06.2017