Ошибка перемещения файла JSP в каталог Web-Inf с помощью полос

StackOverflow https://stackoverflow.com/questions/2250376

Вопрос

У меня есть следующие полосы 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 в браузере, отображается содержимое Welceld.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?

Это было полезно?

Решение

Я понимаю следующее: ваш WelcomeActionBean не в пакете ([Web, www, stripes, action]) автоматически обрабатывается NameBasedActionResolver (Прочтите Javadoc), так что он фактически нанесен на карту с /myapp/Welcome.action (Как указано в сообщении об ошибке).

Итак, когда вы просите /Welcome.action, нет никакого существующего ActionBean связан с этим URL и отзадачиванием Resolver /welcome.jsp (снова посмотри NameBasedActionResolver Javadoc). И когда вы перемещаете свой JSP под /WEB-INF/jsp, Ну, у вас не хватает удачи, и все просто терпит неудачу.

Чтобы решить это, либо:

  • Доступ к «Право» (в текущем состоянии) привязка URL IE 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