Как использовать расширение .jsf в URL-адресах?

Я разрабатываю веб-приложение JSF 2. Для престижных purpouses мне хотелось бы, чтобы каждый URL заканчивался расширением .jsf. Теперь он заканчивается на .xhtml. Если я изменил его непосредственно на .jsf в строке адреса веб-браузера, появится ошибка HTTP 500.

Как я могу установить его на .jsf?

Ответ 1

Шаблон URL-адресов страниц JSF указан <servlet-mapping> FacesServlet в web.xml. Поскольку вы упомянули, что .xhtml работает нормально, вы, по-видимому, настроили его следующим образом:

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>      
</servlet-mapping>

Вам нужно изменить <url-pattern>, чтобы получить желаемое расширение виртуального URL.

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>      
</servlet-mapping>

Это все, что вам нужно изменить для достижения конкретного функционального требования, действительно.

Однако, это создает проблему безопасности. Теперь конечный пользователь может увидеть исходный код исходного файла Facelets при изменении расширения в URL-адресе от .jsf до .xhtml. Это можно предотвратить, добавив следующее ограничение безопасности на web.xml:

<security-constraint>
    <display-name>Restrict access to Facelets source code.</display-name>
    <web-resource-collection>
        <web-resource-name>Facelets</web-resource-name>
        <url-pattern>*.xhtml</url-pattern>
    </web-resource-collection>
    <auth-constraint/>
</security-constraint>

Ответ 2

 <context-param>
  <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
  <param-value>.xhtml</param-value>
 </context-param>

<servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>*.jsf</url-pattern>
 </servlet-mapping>
 <servlet-mapping>

Ответ 3

you can add this code in your web.xml, and you can run your pages ends with xhtml, jsf or faces
 <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.faces</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
  </servlet-mapping>