문제

나는 다음과 같은 줄무늬 액션 빈을 가지고있다 :

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의 내용이 표시됩니다.

그러나 환영을 환영합니다 .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)

Web-Inf 디렉토리에 JSP 파일을 저장하려면 특별 구성을 수행해야합니까?

도움이 되었습니까?

해결책

내 이해는 다음과 같습니다 WelcomeActionBean 패키지가 아닌 ([웹, www, 줄무늬, 액션])에서 자동으로 처리합니다. NameBasedActionResolver (Javadoc을 읽으십시오) 실제로 매핑됩니다. /myapp/Welcome.action (오류 메시지에 명시된대로).

따라서 요청할 때 /Welcome.action, 기존은 없습니다 ActionBean 해당 URL과 Resolver 폴백에 묶여 있습니다 /welcome.jsp (다시, 참조 NameBasedActionResolver Javadoc). 그리고 당신이 당신의 JSP를 아래로 움직일 때 /WEB-INF/jsp, 글쎄, 당신은 행운이 부족하고 모든 것이 실패합니다.

이것을 해결하려면 :

  • "오른쪽"(현재 상태)에 액세스 /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