JSPファイルをストライプでWeb-INFディレクトリに移動するエラー
-
20-09-2019 - |
質問
私は次のストライプを持っていますアクションビーン:
package myapp;
import net.sourceforge.stripes.action.*;
public class WelcomeActionBean extends MyAppActionBean {
@DefaultHandler
public Resolution view() {
return new ForwardResolution("/welcome.jsp");
}
}
/myapp/welcome.actionをブラウザにロードすると、welcome.jspの内容が表示されます。
ただし、welcome.jspに/web-inf/jsp/welcome.jspに移動し、その変化を反映するために前ゾルソリューションの引数を変更すると、つまり:
return new ForwardResolution("/WEB-INF/jsp/welcome.jsp");
/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)
JSPファイルをWeb-INFディレクトリに保存するために、特別な構成を実行する必要がありますか?
解決
私の理解は次のとおりです WelcomeActionBean
パッケージ([web、www、stripes、action])では、自動的に処理された NameBasedActionResolver
(javadocを読む)ので、実際にマッピングされます /myapp/Welcome.action
(エラーメッセージに記載されているように)。
だから、あなたが要求するとき /Welcome.action
, 、存在していません ActionBean
そのURLとリゾルバーのフォールバックにバインドされています /welcome.jsp
(繰り返しますが、を参照してください NameBasedActionResolver
Javadoc)。そして、JSPを下に移動するとき /WEB-INF/jsp
, 、まあ、あなたは運が足りなくなり、すべてが失敗します。
これを解決するために、
「右」(現在の状態で)URLバインディングIEにアクセスする
/myapp/Welcome.action
または、アクションビーンを拘束したい場合
/Welcome.action
慣習によって、によって処理されたパッケージに移動しますNameBasedActionResolver
, 、例: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"); } }
またはaを追加します
@UrlBinding
バインディングを明示的に構成するためのあなたの行動に: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"); } }
他のヒント
WEB-INF
特別なディレクトリであり、その内容はクライアントがアクセスできません。 (それは理にかなっています - あなたはクライアントがあなたをダウンロードできるようにしたくないでしょう web.xml
またはあなたの .class
ファイル。)
JSPファイルを外に移動する必要があります WEB-INF
.