Ошибка перемещения файла JSP в каталог Web-Inf с помощью полос
-
20-09-2019 - |
Вопрос
У меня есть следующие полосы 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
.