Как предварительно оптимизировать маршруты в Java EE?

Столкнувшись с плохой документацией и руководствами в Интернете о том, как предварительно настроить маршруты в Java EE/Jakarta EE (версия 7 или 8). Я хочу спросить вас, люди, есть ли у вас какие-либо рекомендации.

В настоящее время я использую OCPsoft Rewrite, но их документация, руководства и сообщество выглядят очень легкими или тихими.

Что вы делаете для преобразования базовых маршрутов XHTML JSF в представления, подобные views/mypage.xhtml в какой-то красивый URL, как /path/to/mypage?

Или, может быть, многие люди в Java EE / Jakarta EE не заботятся о том, чтобы оптимизировать маршруты?

1 ответ

Решение

Фильтр перезаписи (PrettyFaces) является одним из наиболее часто используемых фильтров. На самом деле, это так часто, что мы кратко рассказываем об этом здесь, в курсе веб-приложений в Chalmers, несколько лет назад. Чтобы использовать его, вам сначала необходимо добавить следующие зависимости в ваш файл POM;

<dependency>
    <groupId>org.ocpsoft.rewrite</groupId>
    <artifactId>rewrite-servlet</artifactId>
    <version>3.4.2.Final</version>
</dependency>
<dependency>
    <groupId>org.ocpsoft.rewrite</groupId>
    <artifactId>rewrite-config-prettyfaces</artifactId>
    <version>3.4.2.Final</version>
</dependency>

PrettyFaces полностью использует аннотации времени выполнения JavaEE - поэтому она должна быть доступна для использования после ее добавления. Далее вы определяете конфигурацию - по умолчанию она будет искать pretty-config.xml файл внутри вашего WEB-INF/ каталог. Базовая установка может выглядеть примерно так;

<?xml version="1.0" encoding="UTF-8"?>
<pretty-config xmlns="http://ocpsoft.org/schema/rewrite-config-prettyfaces" 
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
               xsi:schemaLocation="http://ocpsoft.org/schema/rewrite-config-prettyfaces
               http://ocpsoft.org/xml/ns/prettyfaces/rewrite-config-prettyfaces.xsd">         
    <url-mapping id="home"> 
        <pattern value="/" /> 
        <view-id value="/index.xhtml" />
    </url-mapping> 
    <url-mapping id="view-authors">
        <pattern value="/authors" />
        <view-id value="/author/list.xhtml" />
    </url-mapping>
    <url-mapping id="delete-author">
        <pattern value="/authors/delete/#{id}"/> 
        <view-id value="/author/delete.xhtml?id=#{id}" />
    </url-mapping>
    <url-mapping id="edit-author">
        <pattern value="/authors/edit/#{id}"/> 
        <view-id value="/author/edit.xhtml?id=#{id}" />
    </url-mapping>    
</pretty-config>    

По сути вы можете прочитать выше, как сделать view-id доступны как указано в pattern, Чтобы прочитать значение идентификатора, вы указываете на своих страницах следующее (как обычно);

<f:metadata>
    <f:viewParam name="id" value="#{bean.id}" />
</f:metadata>

Некоторое время назад, PrettyFaces также поддерживает аннотации - позволяя вам пропустить файл `pretty-config.xml" и напрямую указать альтернативный шаблон URL поверх класса bean-компонента. Позволяет вам делать что-то подобное прямо в вашем bean-компоненте.;

@URLMapping(pattern = "/authors/edit/#{id}", viewId = "/author/edit.xhtml?id=#{id}")

Вы можете найти больше информации об этих аннотациях здесь; https://www.ocpsoft.org/prettyfaces/annotations-support-is-coming-to-prettyfaces-url-rewriting/

Хотя PrettyFaces позволяет вам контролировать полную структуру URL (включая параметры), если вам нужно только удалить расширение, вы можете использовать фильтр OmniFaces ExtensionlessURL ( http://showcase.omnifaces.org/facesviews/ExtensionlessURLs), который просто контролируется вот так;

<context-param>
    <param-name>org.omnifaces.FACES_VIEWS_SCAN_PATHS</param-name>
    <param-value>/*.xhtml</param-value>
</context-param>

Это сделает доступ к представлениям напрямую без расширения xhtml. Чтобы добавить OmniFaces в свой проект, просто укажите следующее в своем POM;

<dependency>
    <groupId>org.omnifaces</groupId>
    <artifactId>omnifaces</artifactId>
    <version>3.2</version>
</dependency>

Я также хотел бы упомянуть, что в данной области (среди реализаций) не так уж и редко встречаются случаи, когда приложения сами разрабатывают свое решение и осуществляют "предварительное тестирование" - это особенно часто встречается, когда приложениям необходимо "генерировать" свой собственный URL на основе какой-то случайный идентификатор. Это может быть сделано путем реализации пользовательского фильтра, который вызывает forward() по запросу диспетчера. Это, очевидно, позволяет вам пойти дальше и делать все, что вы хотите. Конечно, вы можете просто использовать PrettyFaces - но я думаю, что некоторые люди просто хотели бы сделать этот дополнительный шаг.

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

Другие вопросы по тегам