3

私は次のStripesActionBeanを持っています:

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に移動し、その変更を反映するようにForwardResolution引数を変更すると、次のようになります。

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ディレクトリに保存するために特別な設定を行う必要がありますか?

4

2 に答える 2

5

私の理解は次のとおりです。WelcomeActionBeanパッケージ([web、www、stripes、action])ではな​​く、NameBasedActionResolver(javadocを読む)によって自動的に処理されるため、実際には/myapp/Welcome.action(エラーメッセージに記載されているように)にマップされます。

そのため、 をリクエストすると、その URL にバインドされた/Welcome.action既存のものはなくActionBean、リゾルバーはフォールバックします/welcome.jsp(再度、 NameBasedActionResolverjavadoc を参照してください)。そして、JSP を の下に移動する/WEB-INF/jspと、運がなくなり、すべてが失敗します。

これを解決するには、次のいずれかを行います。

  • 「正しい」(現在の状態で) URL バインディングにアクセスします。/myapp/Welcome.action

  • または、ActionBean を/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");
        }
    }
    
于 2010-02-12T09:14:31.433 に答える
-1

WEB-INFは特別なディレクトリであり、その内容にはクライアントがアクセスできません。(それは理にかなっています-クライアントがあなたweb.xmlやあなたの.classファイルをダウンロードできるようにしたくないでしょう。)

JSPファイルを。の外に移動する必要がありますWEB-INF

于 2010-02-12T08:27:23.973 に答える