java - 如何配置没有文件扩展名的 JSF url 映射?

标签 java url jsf jakarta-ee url-rewriting

大多数教程建议使用类似于以下 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>

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

换句话说,我想要不依赖于服务器端实现的 URL。

最佳答案

您可以使用 Filter 来隐藏此扩展并使您的 URL SEO 友好。 Filter 的一个这样的实现是 PrettyFaces .

例如: 如果你需要 http://host:port/yourapp/login 来解析你的 login.xhtml 然后在漂亮的过滤器配置下面的方式

<url-mapping id="login">
    <pattern> /login </pattern>
    <view-id> /legacy/user/login.jsf </view-id>
</url-mapping>

看看two min video教程

关于java - 如何配置没有文件扩展名的 JSF url 映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5860004/

相关文章:

java - 未报告的异常 java.sql.SQLException;必须被捕获或宣布被抛出?

java - 使用 URL 对象读取 Web 内容中的资源

java - 静态方法对这种情况安全吗?

javascript - 过滤后传递值为 0 - Primefaces

jsf - 验证消息显示在页面底部 JSF - javax faces developmentstage 消息

java - 二维位置列表的良好哈希函数?

java - Kotlin 中的一切都是对象吗?

java - 正则表达式比较以/abc/开头的单词

ios - 无法在 URL + swift 中编码加号字符

url - Skype 是否有 href 属性,例如 "mailto:"或 "tel:"?