2012-08-25 81 views
10

Estoy desarrollando una aplicación web JSF 2. Para fines de prestigio me gustaría que cada URL termine con la extensión .jsf. Ahora termina con .xhtml. Si lo cambio directamente al .jsf en la barra de direcciones del navegador web, se muestra un error HTTP 500.Cómo usar la extensión .jsf en las URL?

¿Cómo puedo configurarlo en .jsf?

+0

Hoy en día es objeto de prestigio para acabar con ella con '.do'. –

+2

@RomanC ¿No fue lo popular en 2001? (Struts 1) Hoy en día, no usar una extensión podría ser más frío;) Para JSF puedes usar OmniFaces o PrettyFaces para eso. –

+0

Es tan popular que lo añaden a cada ISBN, por ejemplo http://shop.oreilly.com/product/9780596005726.do –

Respuesta

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> 
+0

No creo que sea correcto. Esta es la extensión del archivo real en el disco. OP probablemente quiera el sufijo URL, que usted cambia a través del url-pattern en el mapeo-servlet en web.xml (u omitiendo web.xml ya que * .jsf es el predeterminado en JSF 2.1). –

+0

Olvide el comentario anterior, el comentario fue para otra respuesta que dice que cambia default_suffix solamente. En este caso, el mapeo de servlets es suficiente, no es necesario cambiar default_suffix. –

+0

A continuación, responda su respuesta, que probablemente sea correcta en relación con otras fuentes. Perdón por la demora, estaba en Vacation, ¿podría pedir una ayuda más? Cuando lo uso y accedo a page.jsf (la página.xhtml existe en el lado del servidor) se arroja la excepción del puntero nulo, ¿dónde podría estar el problema? Hay web.xml: http://pastebin.com/3NqyYXSL y hay pila de impresión http://pastebin.com/g76TgabF – Tomas

17

El patrón de URL de páginas JSF se especifica por <servlet-mapping> del FacesServlet en web.xml. Como se ha mencionado que .xhtml funciona bien, que al parecer ha configurado de la siguiente manera:

<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> 

Es necesario cambiar la <url-pattern> en consecuencia para conseguir la extensión deseada URL virtual.

<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> 

Eso es todo lo que necesita cambiar para cumplir realmente los requisitos funcionales concretos.

Sin embargo,, esto pone un problema de seguridad abierto. El usuario final ahora puede ver el código fuente del archivo Facelets sin formato al cambiar la extensión en la URL de .jsf a .xhtml. Esto se puede evitar mediante la adición de la siguiente restricción de seguridad a 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> 
+0

¿podemos alternativamente aliviar este problema de seguridad al copiar nuestros archivos .xhtml a WEF-INF? – abbas

+2

@abbas: los archivos en '/ WEB-INF' no son de acceso público. Simplemente configure el mapeo JSF en '* .xhtml'. No es necesario molestarse con las URL virtuales. – BalusC

-1
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> 
+0

¿Por qué repites una respuesta ya dada? – BalusC

Cuestiones relacionadas