如何在URL中使用.jsf扩展名?

Tom*_*mas 10 jsf url-pattern jsf-2 servlet-mapping

我正在开发一个JSF 2 Web应用程序.对于声望的purpouses我希望每个URL以.jsf扩展名结尾.现在结束了.xhtml.如果我将其直接更改为.jsfWeb浏览器地址栏,则会显示HTTP 500错误.

我该怎么设置它.jsf

Bal*_*usC 17

由指定的JSF页面的URL模式<servlet-mapping>中的FacesServletweb.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>
Run Code Online (Sandbox Code Playgroud)

您需要相应地更改<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>
Run Code Online (Sandbox Code Playgroud)

为了达到具体的功能要求,这就是你需要改变的全部.

但是,这会带来安全问题.终端用户现在可以看到原始的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>
Run Code Online (Sandbox Code Playgroud)

  • @abbas:`/ WEB-INF`中的文件无法公开访问.只需将JSF映射设置为`*.xhtml`即可.无需为虚拟URL烦恼. (2认同)

Moh*_*ain 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>
Run Code Online (Sandbox Code Playgroud)