我有以下条纹ActionBean:

package myapp;

import net.sourceforge.stripes.action.*;

public class WelcomeActionBean extends MyAppActionBean {
    @DefaultHandler
    public Resolution view() {
        return new ForwardResolution("/welcome.jsp");
    }
}

当我在浏览器中加载 /myapp/welcome.action时,显示欢迎的内容。

但是,当我移动欢迎。

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,cripes,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");
        }
    }
    
  • 或添加一个 @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.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top