gdzie adres odnosi się do drugiej aplikacji
<imh src="http://localhost:8080/engine/img/2" />
Druga aplkacja to zwykły servlet, który generuje obrazki wczytywane z
bazy. Na aplikacje jest nałożony tuckey filter, zeby tworzyć ładen
Urlki.
No i tutaj jest problem. Czasami, jak przeglądam aplikacje Seamową,
gdzie wyswietlam obrazki, obrazek sie nie chce wyświetlić a w logach
dostaje coś takiego.
2010-05-09 17:22:38 org.apache.catalina.core.ApplicationContext log
INFO: org.tuckey.web.filters.urlrewrite.RewrittenUrl ERROR: response
is comitted cannot forward to /img?id=2 (check you haven't done
anything to the response (ie, written to it) before here)
Wniosek taki ze response został wg. mnie flushowany a tuckey filtr
probuje robic forward dla responsa. Dobrze rozumiem?
Oto moj rewrite url:
<rule>
<from>^/img/([0-9]+)$</from>
<to>/img?id=$1</to>
</rule>
Czy jest jakis sposob zeby wykryc co powoduje mi ten commit?
Po stronie aplikacji seam mam zwykłą strone html, nie mam zadnych
filtrow, natomiast po stronie silnika obrazkow wyrzucany jest
exception jeszcze przed wyswietleniem obrazka, w miejscu
przekierowania url.
Prosze o pomoc lub sugestie.
> Czy jest jakis sposob zeby wykryc co powoduje mi ten commit?
> Po stronie aplikacji seam mam zwyk�� strone html, nie mam zadnych
> filtrow,
Tutaj bledow nie szukaj. Request po strone html z kodem <img src> to nie
jest request po obrazek. Wiec tutaj nie ma ww problemu.
> natomiast po stronie silnika obrazkow wyrzucany jest
> exception jeszcze przed wyswietleniem obrazka, w miejscu
> przekierowania url.
I pewnie ten wyjatek jest wypisywany do response. Co powoduje niemoznosc
dokonania forwardu.
out = res.getOutputStream();
IIOImage image = new IIOImage(bufferedImage, null, null);
writer.setOutput(ImageIO.createImageOutputStream(out));
writer.write(null, image, iwp);
writer.dispose();
Ale w Twoim przypadku do tego miejsca sterowanie wogole nie dochodzi.
Blad wystepuje juz na poziomie filtra do przekierowan:
INFO: org.tuckey.web.filters.urlrewrite.RewrittenUrl ERROR: response
is comitted cannot forward to /img?id=2 (check you haven't done
anything to the response (ie, written to it) before here)
Cos Ci pisze do response zanim ww filtr zacznie swoja prace.
oto cała zawartosc filtra
res.setContentType("text/html; charset=UTF-8");
req.setCharacterEncoding("UTF8");
chain.doFilter(req, res);
jednak po wyłączeniu go, dalej otrzymuję ten sam komunikat. Aplikacja
stoi na tiles 2 (servlet), co jeszcze przychodzi mi do głowy, a tak
poza tym to nie ma tam nic juz szczegolnego, same JSP'ki i JDBC.
lub ten (jednak ten nizej to wydaje mi sie ze jest z aplikacji
seamowej, ktora wyswietla obrazek, "wyrzucany" przez servlet.
SEVERE: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException: Cannot create a session after the
response has been committed
at org.apache.catalina.connector.Request.doGetSession(Request.java:
2381)
at org.apache.catalina.connector.Request.getSession(Request.java:
2098)
at
org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:
833)
at
org.jboss.seam.mock.MockExternalContext.getSessionMap(MockExternalContext.java:
357)
at
org.jboss.seam.contexts.FacesLifecycle.beginExceptionRecovery(FacesLifecycle.java:
86)
at
org.jboss.seam.web.ExceptionFilter.endWebRequestAfterException(ExceptionFilter.java:
96)
at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:
70)
at org.jboss.seam.servlet.SeamFilter
$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
at org.jboss.seam.servlet.SeamFilter
$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:
178)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at
org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:
388)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
at org.jboss.seam.servlet.SeamFilter
$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60)
at org.jboss.seam.servlet.SeamFilter
$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
233)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:
191)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
127)
at
org.apache.catalina.ha.session.JvmRouteBinderValve.invoke(JvmRouteBinderValve.java:
227)
at
org.apache.catalina.ha.tcp.ReplicationValve.invoke(ReplicationValve.java:
347)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
102)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
298)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:
190)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:
291)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:
698)
at org.apache.jk.common.ChannelSocket
$SocketConnection.runIt(ChannelSocket.java:891)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Thread.java:595)
Co nazywasz aplikacja? Bo masz dwie? Osobny war dla obrazkow i osobny
war z 'glowna' aplikacja? Czy jak requestujesz TYLKO te aplikacje dla
obrazkow to bledy nadal sa? Po co ustawiasz text/html;UTF8 dla obrazkow?
No i w kodzie wypisujacym obrazki do response nie widac ustawiania
content type - ale ustawiasz poprawny?
Mam 2 aplikacje:
1. Seam gdzie wyswietlam obrazki serwowane z drugiej aplikacji
servletowej.
2. Druga aplikacja ma prosty interfejs uzytkownika, ale glowny element
to silnik tworzący obrazki.
W drugiej aplikacji mam ustawiony filtr przed tuckey, rewrite url,
zeby mi kodowanie UTF8 poprawnie w jsp'ach wyswietalo.
Natomiast w pliku servlecie serwejącym obrazki mam ustawiony naglowek:
res.setContentType("image/jpg");
No i problem polega na tym, ze po dodaniu drugiej aplikacji serwującej
obrazki, zaczely sie pojawiac w logach tomcata wlasnie takie
komunikaty, a aplikacja seamowa zaczela sie tak zachowywac ze czasem,
randomowo po kliknieciu w link wyswietla mi kod html na stronie a nie
zawartosc strony.
>Co nazywasz aplikacja? Bo masz dwie? Osobny war dla obrazkow i osobny
>war z 'glowna' aplikacja?
Tak, obie aplikacje to osobne wary.
Rozumiem że Tuckey jest ustawiony tylko dla aplikacji "nieseam"?
Po co ci filtr UTF8 dla aplikacji "nieseam" ? Czyżby oprócz serwowania
obrazków wyświetla ona jeszcze jakieś jsp ?
Aby sprawdzić co i w jaki sposób działa na request/response możnaby
podpiąc jako 1 własny filtr który opakowuje oryginalny parę request/
response (pewnie starczy tylko response w postaci
HttpServletResponseWrapper) i tam zaczaić się na odpowiednie metody.
pzdr miluch