如何在没有文件扩展名的情况下配置JSF url映射?

Arn*_*iva 14 java url jsf url-rewriting java-ee

大多数教程提出了类似于以下web.xml的默认JSF配置:

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


<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>/faces/*</url-pattern>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

使用此配置,如果相应的URL以文件扩展名.jsf结尾(例如http://localhost/welcome.jsf),则只能通过Faces Servlet找到我的webapp中相应的*.xhtml文件.是否可以配置web.xml,以便使用相同的*.xhtml文件将不以.jsf结尾的URL处理为JSF页面?

换句话说,我想拥有不依赖于服务器端实现的URL.

Jig*_*shi 20

您可以使用过滤器来隐藏此扩展名并使您的URL SEO友好,其中一个Filter的实现是Pretty Filter.

例如:如果您需要http://host:port/yourapp/login使用您login.xhtml的漂亮过滤器解决配置以下方式

<url-mapping id="login">
    <pattern> /login </pattern>
    <view-id> /legacy/user/login.jsf </view-id>
</url-mapping>
Run Code Online (Sandbox Code Playgroud)

看看两分钟的视频教程