Попытка достичь ресурса на http://localhost:8080/enterprise/session/new/ приводит к ошибке HTTP 404 (не найдена).Попытки достичь того же ресурса на http://localhost:8080/enterprise/session/new работают, как и ожидалось.
Ресурс сеанса:
@GET
@Path("/new")
@Produces(MediaType.TEXT_HTML)
public Viewable newSession() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("method","secEnterprise");
// create authentication form
return new Viewable("/session/new", map);
}
Представление находится по адресу WEB-INF \ views \ session \ new.jsp
Я подозреваю, что часть проблемы связана сраздел web.xml:
<filter>
<filter-name>jersey</filter-name>
<filter-class>com.sun.jersey.spi.container.servlet.ServletContainer</filter-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.businessobjects.resources</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name>
<!-- is this capturing the '/' and redirecting it to a non-existent view (.JSP)? -->
<param-value>/((WEB-INF/views))/.*</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.property.JSPTemplatesBasePath</param-name>
<param-value>/WEB-INF/views/</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.feature.Redirect</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.feature.FilterForwardOn404</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jersey</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Я не уверен, что это связано, но форма представления POSTs для / session / session, а не просто для / session:
<!-- new.jsp -->
...
<form method="post" action="session">
...
Что мне не хватает?
** edit 0 **
Изменение атрибута действия элемента формы на
<form method="post" action="/enterprise/session">
работает как положено.Тем не менее, завершающий слеш:
<form method="post" action="/enterprise/session/">
приводит к той же ошибке, упомянутой ранее.
Похоже, что выражение регулярного выражения /((WEB-INF/views))/.*
необходимо изменить, чтобы игнорировать завершающие слеши ('/').
** edit 1 **
У меня есть корневой ресурс:
@Path("/")
public class HomeResource {
@GET
public Response index() {
return Response.ok(new Viewable("/home/index")).build();
}
}
Запросы на http://localhost:8080/enterprise автоматически направляются на http://localhost:8080/enterprise/,, поэтому некоторые аспекты автоматического перенаправления работают правильно.