Error en mover el archivo JSP al directorio web-INF con rayas
-
20-09-2019 - |
Pregunta
Tengo las siguientes rayas ActionBean:
package myapp;
import net.sourceforge.stripes.action.*;
public class WelcomeActionBean extends MyAppActionBean {
@DefaultHandler
public Resolution view() {
return new ForwardResolution("/welcome.jsp");
}
}
Cuando cargo /myapp/welcome.action en un navegador, se muestran el contenido de Welcome.jsp.
Sin embargo, cuando muevo WELD.jsp a /webinf/jsp/welcome.jsp y cambio el argumento de reenvío para reflejar ese cambio, es decir:
return new ForwardResolution("/WEB-INF/jsp/welcome.jsp");
Recibo el siguiente error cuando carga /myapp/welcome.action:
net.sourceforge.stripes.exception.ActionBeanNotFoundException: Could not locate an ActionBean that is bound to the URL [/Welcome.action]. Commons reasons for this include mis-matched URLs and forgetting to implement ActionBean in your class. Registered ActionBeans are: {/controller/DefaultView.action=class net.sourceforge.stripes.controller.DefaultViewActionBean, /myapp/MyApp.action/=class myapp.MyAppActionBean, /myapp/Welcome.action/=class myapp.WelcomeActionBean, /controller/DefaultView.action/=class net.sourceforge.stripes.controller.DefaultViewActionBean, /myapp/MyApp.action=class myapp.MyAppActionBean, /myapp/Welcome.action=class myapp.WelcomeActionBean}
net.sourceforge.stripes.controller.AnnotatedClassActionResolver.getActionBean(AnnotatedClassActionResolver.java:341)
net.sourceforge.stripes.controller.NameBasedActionResolver.getActionBean(NameBasedActionResolver.java:264)
net.sourceforge.stripes.controller.AnnotatedClassActionResolver.getActionBean(AnnotatedClassActionResolver.java:293)
net.sourceforge.stripes.controller.DispatcherHelper$1.intercept(DispatcherHelper.java:106)
net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:158)
net.sourceforge.stripes.controller.BeforeAfterMethodInterceptor.intercept(BeforeAfterMethodInterceptor.java:113)
net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:155)
net.sourceforge.stripes.controller.ExecutionContext.wrap(ExecutionContext.java:74)
net.sourceforge.stripes.controller.DispatcherHelper.resolveActionBean(DispatcherHelper.java:102)
net.sourceforge.stripes.controller.DispatcherServlet.resolveActionBean(DispatcherServlet.java:238)
net.sourceforge.stripes.controller.DispatcherServlet.service(DispatcherServlet.java:141)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:247)
¿Es necesario realizar cualquier configuración especial para almacenar archivos JSP en el directorio web-INF?
Solución
Mi entendimiento es lo siguiente: tu WelcomeActionBean
en no en un paquete ([web, www, rayas, acción]) manejado automáticamente por el NameBasedActionResolver
(lea el javadoc) para que en realidad esté asignado a /myapp/Welcome.action
(Como se indica en el mensaje de error).
Entonces, cuando solicitas /Welcome.action
, no hay ninguna existencia ActionBean
atado a esa URL y al resolución de respaldos a /welcome.jsp
(De nuevo, ver el NameBasedActionResolver
Javadoc). Y cuando mueves tu JSP debajo /WEB-INF/jsp
, Bueno, te quedas sin suerte y todo simplemente falla.
Para resolver esto, ya sea:
Acceda a la URL "correcta" (en el estado actual) ANIA IE, es decir
/myapp/Welcome.action
O, si quieres que tu acción bean esté obligada a
/Welcome.action
Por las convenciones, muévalo en un paquete manejado por elNameBasedActionResolver
, p.ejaction
:package myapp.action; import net.sourceforge.stripes.action.*; public class WelcomeActionBean extends MyAppActionBean { @DefaultHandler public Resolution view() { return new ForwardResolution("/WEB-INF/jsp/welcome.jsp"); } }
O agregar un
@UrlBinding
a su acción para configurar el enlace explícitamente:package myapp; import net.sourceforge.stripes.action.*; @UrlBinding("/Welcome.action") public class WelcomeActionBean extends MyAppActionBean { @DefaultHandler public Resolution view() { return new ForwardResolution("/WEB-INF/jsp/welcome.jsp"); } }
Otros consejos
WEB-INF
es un directorio especial, y su contenido no es accesible para el cliente. (Tiene sentido: no desea que el cliente pueda descargar su web.xml
o tu .class
archivos.)
Debe mover los archivos JSP fuera de WEB-INF
.