Hello tomcat-users,
i have written a filter for my webapplication that checks the called
url for special patterns and sends an error 404 when matching the
pattern. This works most of the time great. But every ca. 4000
requests, an exception occurs in the filter. I looked around with
google & co., but found only errors of this type appearing every
request - or not. A second filter works great.
I wonder if this could be a problem with threads?
Any help (direct or by giving a hint of how to debug this problem)
would be appreciated.
Regards,
Christian Aschoff
A normal url is: http://www.retrobibliothek.de/retrobib/index.html
(everything is fine)
http://www.retrobibliothek.de/retrobib/index.jsp shows 404 not
found (as it should)
http://www.polonius.bibliothek.uni-ulm.de/retrobib/index.html shows
404 not found ([same host] - as it should)
The used tomcat is 5.5.12, Java is
java version "1.4.2_16"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_16-b05)
Java HotSpot(TM) Client VM (build 1.4.2_16-b05, mixed mode),
running on Linux (2.6.13-15.18-smp #1 SMP Tue Oct 2 17:36:20 UTC 2007
x86_64 x86_64 x86_64 GNU/Linux).
The filter-configuration is:
[...]
<filter>
<filter-name>SecurityFilter</filter-name>
<filter-class>de.retrobib.filter.SecurityFilter</filter-class>
</filter>
<filter>
<filter-name>URLFilter</filter-name>
<filter-class>de.retrobib.filter.URLFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>URLFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>SecurityFilter</filter-name>
<url-pattern>/secure/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>SecurityFilter</filter-name>
<url-pattern>*.zipped</url-pattern>
</filter-mapping>
[...]
The filter-code is:
[...]
public void doFilter(ServletRequest request, ServletResponse
response, FilterChain chain)
throws IOException, ServletException {
doBeforeProcessing(request, response);
HttpServletRequest req = (HttpServletRequest) request;
try {
if (req.getRequestURL().toString().toLowerCase().indexOf
(".jsp") != -1) {
logger.warn("Direkter Aufruf von *.jsp, sende 404
[ip="+req.getRemoteAddr()+"; url="+req.getRequestURL()+",
query="+req.getQueryString()+"]");
((HttpServletResponse) response).sendError(404);
} else if (req.getRequestURL().toString().toLowerCase
().indexOf("uni-ulm") != -1) {
logger.info("uni-ulm in der URL, sende 404
[ip="+req.getRemoteAddr()+"; url="+req.getRequestURL()+",
query="+req.getQueryString()+"]");
((HttpServletResponse) response).sendError(404);
} else {
chain.doFilter(request, response);
}
} catch(Throwable ex) {
logger.debug("[ip="+req.getRemoteAddr()+";
url="+req.getRequestURL()+", query="+req.getQueryString()+"]");
logger.fatal("Exception im URLFilter!", ex);
// Mail Error & Request...
String mailContent = "StackTrace:
\n"+DebugUtil.getStackTrace(ex)+"\nRequest:
\n"+DebugUtil.getRequestAsString(req);
try {
new Mailer().send("Fehler in der retro-bib:
"+ex.getMessage(), mailContent, MiscConstants.adminMail, null);
} catch (Exception badEx) {
logger.fatal("Exception im URLFilter
(eMailversand)!", ex);
}
}
doAfterProcessing(request, response);
}
[...]
Other methods are basically empty.
The exceptions occurs in the line 'chain.doFilter(request,
response);', examples are:
StackTrace:
java.lang.IllegalStateException: Cannot create a session after the
response has been committed
at org.apache.catalina.connector.Request.doGetSession(Request.java:
2206)
at org.apache.catalina.connector.Request.getSession(Request.java:2024)
at org.apache.catalina.connector.RequestFacade.getSession
(RequestFacade.java:831)
at org.apache.catalina.connector.RequestFacade.getSession
(RequestFacade.java:842)
at org.apache.struts.action.RequestProcessor.processLocale
(RequestProcessor.java:621)
at org.apache.struts.action.RequestProcessor.process
(RequestProcessor.java:177)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:
1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:173)
* at de.retrobib.filter.URLFilter.doFilter(URLFilter.java:100)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:202)
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:868)
at org.apache.coyote.http11.Http11BaseProtocol
$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:663)
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)
Request:
---------------- Start Dump --------------------------------------
Information(s) about the request:
AuthType = null
CharacterEncoding = null
ContentType = null
ContextPath = /retrobib
Method = GET
PathInfo = null
PathTranslated = null
Protocol = HTTP/1.1
QueryString = oldid=1185368073558
RemoteAddr = 66.249.65.1
RemoteHost = 66.249.65.1
RemotePort = 36965
RemoteUser = null
RequestURI = /retrobib/seite.html
RequestURL = http://www.retrobibliothek.de/retrobib/seite.html
RequestedSessionId = null
No session for this request.
Parameter(s):
oldid = 1185368073558
Attribute(s):
org.apache.struts.action.MESSAGE =
[EMAIL PROTECTED]
org.apache.struts.action.MODULE =
[EMAIL PROTECTED]
Header(s):
host = www.retrobibliothek.de
connection = Keep-alive
accept = */*
from = googlebot(at)googlebot.com
user-agent = Mozilla/5.0 (compatible; Googlebot/2.1; +http://
www.google.com/bot.html)
accept-encoding = gzip
---------------- Ende Dump ---------------------------------------
or
StackTrace:
java.lang.IllegalStateException: Cannot forward after response has
been committed
at org.apache.catalina.core.ApplicationDispatcher.doForward
(ApplicationDispatcher.java:313)
at org.apache.catalina.core.ApplicationDispatcher.forward
(ApplicationDispatcher.java:301)
at org.apache.struts.action.RequestProcessor.doForward
(RequestProcessor.java:1085)
at org.apache.struts.action.RequestProcessor.processForwardConfig
(RequestProcessor.java:398)
at org.apache.struts.action.RequestProcessor.process
(RequestProcessor.java:241)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:
1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:173)
* at de.retrobib.filter.URLFilter.doFilter(URLFilter.java:100)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:202)
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:868)
at org.apache.coyote.http11.Http11BaseProtocol
$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:663)
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)
Request:
---------------- Start Dump --------------------------------------
Information(s) about the request:
AuthType = null
CharacterEncoding = UTF-8
ContentType = null
ContextPath = /retrobib
Method = GET
PathInfo = null
PathTranslated = null
Protocol = HTTP/1.1
QueryString = bandid=100156
RemoteAddr = 87.188.120.209
RemoteHost = 87.188.120.209
RemotePort = 4414
RemoteUser = null
RequestURI = /retrobib/stoebern.html
RequestURL = http://www.retrobibliothek.de/retrobib/stoebern.html
RequestedSessionId = B286AFDDE41B6E58B5349A2FFB93C4ED
Sessionvalue(s):
org.apache.struts.action.LOCALE = de_DE
Parameter(s):
bandid = 100156
Attribute(s):
org.apache.struts.action.MESSAGE =
[EMAIL PROTECTED]
globalKorrektorMessages = []
korrektorCount = 189
org.apache.struts.action.mapping.instance = ActionConfig[path=/
stoebern,scope=session,type=de.retrobib.actions.StoebernAction,validate=
true,cancellable=false
globalMessages = []
teileMitSeiten = [EMAIL PROTECTED]
band = de.retrobib.dbmodel.Band[id = 100156; oldid = 1043602798323;
timestamp = 1191594863750; deleted = false; visible = true; sort =
0010; number = 2; name = 2. Band: Atlantis - Blatthornkäfer;
publisher = ; author = ; issued = ; description = ]
author = Christian Aschoff
werk = de.retrobib.dbmodel.Werk[id = 100149; oldid = 1034149743511;
timestamp = 1189669728066; deleted = false; sort = 000; name = Meyers
Konversationslexikon; shortname = Meyers; publisher = Verlag des
Bibliographischen Instituts, Leipzig und Wien; author =
Autorenkollektiv; issued = Vierte Auflage, 1885-1892; description = ]
messages = []
org.apache.struts.action.MODULE =
[EMAIL PROTECTED]
Header(s):
host = www.retrobibliothek.de
user-agent = Mozilla/5.0 (Windows; U; Windows NT 5.0; de; rv:
1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
accept = text/xml,application/xml,application/xhtml+xml,text/
html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
accept-language = de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
accept-encoding = gzip,deflate
accept-charset = ISO-8859-1,utf-8;q=0.7,*;q=0.7
keep-alive = 300
connection = keep-alive
referer = http://www.retrobibliothek.de/retrobib/stoebern.html?
werkid=100149
cookie = JSESSIONID=B286AFDDE41B6E58B5349A2FFB93C4ED;
__utma=180525476.323824295.1196968319.1196968319.1196968319.1;
__utmb=180525476; __utmc=180525476;
__utmz=180525476.1196968319.1.1.utmccn=(direct)|utmcsr=(direct)|
utmcmd=(none)
---------------- Ende Dump ---------------------------------------
---
Dipl. Ing. (FH) Christian Aschoff
Büro:
Universität Ulm
Kommunikations- und Informationszentrum
Abt. Informationssysteme
Raum O26/5403
Albert-Einstein-Allee 11
89081 Ulm
Tel. 0731 50-22432
Fax. 0731 50-22471
[EMAIL PROTECTED]
Privat:
Fabristr. 13
89075 Ulm
Deutschland/Old Europe
Tel. 0731 602 803 60
Fax. 0731 602 803 61
Mob. 0171 272 03 04
[EMAIL PROTECTED]
Helfen Sie mit: http://www.retrobibliothek.de
---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]