У меня возникают проблемы с переадресацией сервлетов, когда запрос был упакован HttpServletRequestWrapper.
Это серверное приложение равноденствия, запущенное из Eclipse с использованием встроенного веб-сервера Jetty для обеспечения реализации HttpService.
Чтобы изолировать проблему, единственное, что делает мое поле, - это упаковывает запрос и передает его вперед:
public class TestFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
chain.doFilter(new HttpServletRequestWrapper((HttpServletRequest)request), response);
}
...
}
... и мой сервлет ничего не делает, только пытается перенаправить на JSP:
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher dispatcher = request.getRequestDispatcher("/account.jsp");
try {
dispatcher.forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
Согласно спецификации сервлета 2.3, объекты запроса и ответа, передаваемые методу forward, могут быть либо исходными, либо экземпляром предоставленных упаковщиков. Мне нужно передать пользовательскую оболочку, но когда я это сделаю, форвард не выполнит следующее исключение:
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(Unknown Source)
at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:64)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet.service(HttpServerManager.java:318)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:327)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
at org.eclipse.equinox.http.servlet.internal.RequestDispatcherAdaptor.forward(RequestDispatcherAdaptor.java:30)
at mypackage.internal.signup.PlatformSetupServlet.doPost(PlatformSetupServlet.java:53)
...
Если я заберу обертку и передам исходный запрос, то сервлет успешно выполнится.
Это похоже на ошибку в реализации org.eclipse.equinox.http.servlet, но я могу что-то упустить.
Я что-то не так делаю?
Спасибо !!
Эдуардо Борн