Ошибка HttpServlet во время выполнения

#gwt #servlets #equinox

#gwt #сервлеты #равноденствие

Вопрос:

Я развертываю приложение GWT в Equinox. Он запускается, но когда я запускаю событие для вызова сервера, у меня появляется ошибка, подобная этой:

 <title>Error 500 non-HTTP request or response</title>
</head>
<body><h2>HTTP ERROR 500</h2>
<p>Problem accessing /zbapp/zbapp/app. Reason:
<pre>    non-HTTP request or response</pre></p><h3>Caused by:</h3><pre>javax.servlet.ServletException: non-HTTP request or response

at javax.servlet.http.HttpServlet.service(HttpServlet.java:715)

at org.eclipse.equinox.http.registry.internal.ServletManager$ServletWrapper.service(ServletManager.java:180)

at org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61)

at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:126)

at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:60)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

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.handler.HandlerWrapper.handle(HandlerWrapper.java:152)

at org.mortbay.jetty.Server.handle(Server.java:326)

at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)

at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:939)

at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)

at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)

at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)

at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)

at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

</pre>
<hr /><i><small>Powered by Jetty://</small></i><br/>
  

Мой web.xml является:

 <servlet>
 <servlet-name>greetServlet</servlet-name>
 <servlet-class>main.java.com.gwt.app.server.GreetingServiceImpl</servlet-class>
</servlet>

<servlet-mapping>
 <servlet-name>greetServlet</servlet-name>
 <url-pattern>/zbapp/app</url-pattern>
</servlet-mapping>
  

Я не знаю, что является общей причиной этой ошибки. Я переопределил метод service из HttpServlet в реализации службы GWT.

Кто-нибудь может мне помочь, пожалуйста?

Ответ №1:

По этой причине происходит сбой

 try {
        request = (HttpServletRequest) req;
        response = (HttpServletResponse) res;
    } catch (ClassCastException e) {
        throw new ServletException("non-HTTP request or response");
    }
  

Запрос / ответ не относится к типу HttpServletRequest/ HttpServletResponse.

Где-то в коде вы пытаетесь обернуть запрос / ответ, используя класс, который расширяет ServletRequest / ServletResponse. Если приложение хочет обернуть запрос / ответ, класс-оболочка в идеале должен расширять HttpServletRequestWrapper / HttpServletResponseWrapper.

Комментарии:

1. Исходный код легко скопировать. Но технически это не отвечает на вопрос. Почему это происходит? Что может сделать OP, чтобы это исправить?

2. У приложения @BaluC может быть какая-то оболочка запроса, которая расширяет ServletRequest, но не HttpServletRequest. Я прав?

3. Я проверяю приложение, и запрос / ответчик поступают из HttpServletRequest и HttpServletResponse. Однако моя проблема решается, когда я меняю цель Equinox. У меня нет объяснения