Cómo quitar el sufijo de archivo / extensión (.jsp y .action) Utilizando el marco de las rayas?
Pregunta
Estoy buscando para utilizar la URL del bonito / limpia en mi aplicación web.
Me gustaría que el siguiente URL:
http://mydomain.com/myapp/calculator
.. para resolver a:
com.mydomain.myapp.action.CalculatorActionBean
He intentado sobrescribir el NameBasedActionResolver con:
public class CustomActionResolver extends NameBasedActionResolver {
public static final String DEFAULT_BINDING_SUFFIX = ".";
@Override
protected String getBindingSuffix() {
return DEFAULT_BINDING_SUFFIX;
}
@Override
protected List<String> getActionBeanSuffixes() {
List<String> suffixes = new ArrayList<String>(super.getActionBeanSuffixes());
suffixes.add(DEFAULT_BINDING_SUFFIX);
return suffixes;
}
}
Y añadir esto a web.xml
:
<servlet-mapping>
<servlet-name>StripesDispatcher</servlet-name>
<url-pattern>*.</url-pattern>
</servlet-mapping>
Lo que me llega a:
http://mydomain.com/myapp/Calculator.
Pero:
- Una perdida "" no es aún ni tampoco bastante limpio.
- El nombre de la clase está siendo capitalizada en la URL ..?
- Eso todavía me deja con
*.jsp
..? ¿Es incluso posible para deshacerse de ambos.action
y.jsp
?
Solución
Creo que busca la anotación @URLBinding. Mira @URLBinding en su bean.
@UrlBinding ( "/ calculadora")
Otros consejos
Yo estaba tratando de hacer lo mismo, y tenía la misma pregunta, aunque yo quería que mi URL para utilizar la barra de arrastre http://mydomain.com/myapp/calculator/
La respuesta es utilizar @UrlBinding y la DynamicMappingFilter
I modificado el ejemplo tener:
@UrlBinding("/calculator/")
public class CalculatorActionBean implements ActionBean {
.
.
.
return new ForwardResolution("/WEB-INF/view/calculator.jsp");
Luego añade la DMF a web.xml:
<filter>
<display-name>Stripes Dynamic Mapping Filter</display-name>
<filter-name>DynamicMappingFilter</filter-name>
<filter-class>net.sourceforge.stripes.controller.DynamicMappingFilter</filter-class>
<init-param>
<param-name>ActionResolver.Packages</param-name>
<param-value>com.example.stripes</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DynamicMappingFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
Ahora la URL limpia funciona como se esperaba, y estoy nunca redirigido a una URL * .action después de interactuar con el formulario.