Errore durante lo spostamento del file JSP nella directory WEB-INF con strisce
-
20-09-2019 - |
Domanda
Ho il seguente Stripes ActionBean:
package myapp;
import net.sourceforge.stripes.action.*;
public class WelcomeActionBean extends MyAppActionBean {
@DefaultHandler
public Resolution view() {
return new ForwardResolution("/welcome.jsp");
}
}
Quando carico /myapp/Welcome.action in un browser, il contenuto di welcome.jsp vengono visualizzati.
Tuttavia, quando mi muovo welcome.jsp a /WEB-INF/jsp/welcome.jsp e modificare l'argomento ForwardResolution per riflettere questo cambiamento, cioè:.
return new ForwardResolution("/WEB-INF/jsp/welcome.jsp");
ottengo il seguente errore quando carico /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)
E 'necessario effettuare alcuna configurazione speciale, al fine di memorizzare i file JSP nella directory WEB-INF?
Soluzione
La mia comprensione è la seguente: la vostra WelcomeActionBean
in non in un pacchetto ([web, WWW, strisce, azione]) automagically gestita dal NameBasedActionResolver
(leggere il javadoc) in modo che sia effettivamente mappato /myapp/Welcome.action
(come indicato nel messaggio di errore).
Quindi, quando si richiede /Welcome.action
, non c'è alcun ActionBean
esistente legata a quella URL e le ricadute resolver per /welcome.jsp
(ancora una volta, vedere la NameBasedActionResolver
javadoc). E quando si sposta il JSP sotto /WEB-INF/jsp
, bene, sei a corto di fortuna e tutto appena viene a mancare.
Per risolvere questo problema, sia:
-
L'accesso alla "destra" (allo stato attuale) URL vincolante cioè
/myapp/Welcome.action
-
In alternativa, se si desidera che l'ActionBean per essere associato a
/Welcome.action
dalle convenzioni, spostarlo in un pacchetto gestito dalNameBasedActionResolver
, ad esempio,action
: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 aggiungere un
@UrlBinding
alla tua azione per configurare il legame esplicitamente: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"); } }
Altri suggerimenti
WEB-INF
è una directory speciale, e il suo contenuto non sono accessibili al cliente. (Ha senso -. Non si vorrebbe il cliente sia in grado di scaricare il web.xml
oi file .class
)
È necessario spostare i file JSP al di fuori della WEB-INF
.