ServletRequestWrapper в RequestDispatcher
От: Аноним  
Дата: 11.06.07 08:38
Оценка:
Если ServletRequestWrapper есть паттерн декоратор и он реализует интерфейс ServletRequest, почему я получаю ClassCastException когда делаю так:
    ServletRequestWrapper wreq = new ServletRequestWrapper(req);
    ServletResponseWrapper wres = new ServletResponseWrapper(res);
    RequestDispatcher rd1 = getServletConfig().getServletContext().getRequestDispatcher("/second");
    try{
        rd1.include((ServletRequest)wreq, (ServletResponse)wres);
    }catch(Exception e){
        System.out.println("The exception in " + getServletName() + " " + e);
    }

Обработка происходит в методе GenericServlet.service(ServletRequest req, ServletResponse res). Без ServletRequestWrapper все работает.
Re: ServletRequestWrapper в RequestDispatcher
От: Blazkowicz Россия  
Дата: 11.06.07 08:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Если ServletRequestWrapper есть паттерн декоратор и он реализует интерфейс ServletRequest, почему я получаю ClassCastException когда делаю так:


Stacktrace в студию!
Re[2]: ServletRequestWrapper в RequestDispatcher
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 11.06.07 08:48
Оценка: 1 (1)
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Аноним, Вы писали:


А>>Если ServletRequestWrapper есть паттерн декоратор и он реализует интерфейс ServletRequest, почему я получаю ClassCastException когда делаю так:


B>Stacktrace в студию!


ему бы HttpServletRequestWrapper. Что то мне подсказывает что у него на "/second" не просто сервлет висит а javax.servlet.http.HttpServlet
Blog
Re[3]: ServletRequestWrapper в RequestDispatcher
От: Blazkowicz Россия  
Дата: 11.06.07 08:55
Оценка:
Здравствуйте, Lucker, Вы писали:

L>ему бы HttpServletRequestWrapper. Что то мне подсказывает что у него на "/second" не просто сервлет висит а javax.servlet.http.HttpServlet

Тоже так подумал, но мне показалось GenericServlet не должен быть на него завязан. Разве нет?
Re[4]: ServletRequestWrapper в RequestDispatcher
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 11.06.07 09:00
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Lucker, Вы писали:


L>>ему бы HttpServletRequestWrapper. Что то мне подсказывает что у него на "/second" не просто сервлет висит а javax.servlet.http.HttpServlet

B>Тоже так подумал, но мне показалось GenericServlet не должен быть на него завязан. Разве нет?

да! Но GenericServlet.service(ServletRequest req, ServletResponse res) та абстрактный, в нем вообще никакой обработки не происходит. А вот то что весит на "/second" это с 99.99999% вероятности какой-нить HttpServlet.
Blog
Re[2]: ServletRequestWrapper в RequestDispatcher
От: duss  
Дата: 11.06.07 14:33
Оценка:
Сорри забыл зарегиться

Здравствуйте, Blazkowicz, Вы писали:
B>Stacktrace в студию!
java.lang.ClassCastException: javax.servlet.ServletRequestWrapper
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:616)
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:522)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:499)
    at Controller.service(Unknown Source)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Thread.java:595)


Кстати на "/second" тоже GenericServlet.
import java.io.*;
import javax.servlet.*;
public class Second extends GenericServlet{
    
    public void service(ServletRequest req, ServletResponse res) throws  ServletException, IOException{
        PrintWriter out = res.getWriter();
        out.println("**** HI, EVERYONE !!! ***");
    }
}
Re[3]: ServletRequestWrapper в RequestDispatcher
От: Blazkowicz Россия  
Дата: 11.06.07 14:36
Оценка: 3 (1)
Здравствуйте, duss, Вы писали:

D>
D>java.lang.ClassCastException: javax.servlet.ServletRequestWrapper
D>    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:616)
D>


http://www.docjar.com/html/api/org/apache/catalina/core/ApplicationDispatcher.java.html

616         HttpServletRequest hrequest = (HttpServletRequest) request;
617         HttpServletResponse hresponse = (HttpServletResponse) response;


http://rsdn.ru/forum/message/2540446.1.aspx
Автор: Lucker
Дата: 11.06.07
Re[4]: ServletRequestWrapper в RequestDispatcher
От: duss  
Дата: 11.06.07 16:44
Оценка:
Обнаружил, что контейнер(Tomcat 5) передает в GenericServlet.service(ServletRequest req, ServletResponse res) объекты HttpServletRequest и HttpServletResponse, поэтому все и работало без Servlet...Wrapper'ов. Получается, что механизм передачи управления в другой сервлет актуален только для протокола Http, т.е. тогда когда в service(...) передаются объекты реализующие интерфейсы HttpServletRequest и HttpServletResponse.
Re[5]: ServletRequestWrapper в RequestDispatcher
От: Blazkowicz Россия  
Дата: 12.06.07 09:56
Оценка:
Здравствуйте, duss, Вы писали:

D>Получается, что механизм передачи управления в другой сервлет актуален только для протокола Http, т.е. тогда когда в service(...) передаются объекты реализующие интерфейсы HttpServletRequest и HttpServletResponse.

Сервлеты вообще актуальны только для HTTP.
Re[6]: ServletRequestWrapper в RequestDispatcher
От: Аноним  
Дата: 12.06.07 21:52
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Сервлеты вообще актуальны только для HTTP.


Ну вот, еще один. Читайте про FTPServlet & SIPServlet в порядке расширения кругозора.
Re[7]: ServletRequestWrapper в RequestDispatcher
От: Blazkowicz Россия  
Дата: 13.06.07 06:35
Оценка:
Здравствуйте, andrew, Вы писали:

B>>Сервлеты вообще актуальны только для HTTP.

HAO>Ну вот, еще один. Читайте про FTPServlet & SIPServlet в порядке расширения кругозора.

Ну, давай ещё SMTP приплетем для полного дрысту, остряк, блин. Примеры корпоративных приложений, которые этим пользуются. Гугл выдает в основном ссылки на *.edu.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.