Hi,
In my
tomcat webapp, I was hoping to do this:
1) SC_INTERNAL_SERVER_ERROR ->
2) deployment-descriptor-defined error-page ->
3) CGI-HANDLER (send me email) ->
4) back to webapp
The CGI-HANDLER would notify me about the problem, then return to the webapp. Seemed like an OK idea, because email is so much easier to do in perl than in
java.
The perl script runs, and i get the email. But under tomcat (Tomcat 4.1.31), I cannot redirect from the perl script to any other page, either within the webapp, or anywhere on the site. Generated HTML & tomcat log entry appear below.
On the same webserver, under mod_perl (Apache mod_perl 1.99_12 ), but no tomcat, a busier version of the same perl script works just fine, redirection included.
Anybody know what tomcat's doing with my redirect()?
Thanks!
********************************
CGI-HANDLER ('trouble.cgi'):
#!/usr/bin/perl
use CGI qw/:standard/;
use CGI::Carp qw(fatalsToBrowser);
my $now =`date`;
# notify
open (SENDMAIL, "| /usr/lib/sendmail -oi -t")
or die "Can't fork for sendmail: $!\n";
print SENDMAIL <<"EOF";
From:<me\@me.net>
To:<me\@me.net>
Subject: hohos trouble
------------------
$now
------------------
EOF
close (SENDMAIL) or warn "Unhappy sendmail close\n";
print redirect
('/csci315/servlet/robust.MyRobustServlet?pushed=restart');
#$url = "http://www.me.net/hohos/index.html";
#print "Location: $url\n\n";
#exit;
********************************
CGI-HANDLER invocation from deployment-descriptor-defined error-page:
<form action="/csci315/cgi-bin/trouble.cgi" method="post"
enctype="application/x-www-form-urlencoded">
********************************
CGI generated HTML:
<HTML><HEAD><TITLE>$Name: $</TITLE></HEAD>
<BODY>$Header:
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java,v
1.27 2004/08/26 21:38:13 markt Exp $<p>
********************************
tomcat log entry (CGIServlet 'debug' param-value == 99):
2005-05-05 12:38:27 cgi: findCGI: path=/trouble.cgi, /opt/tomcat4/webapps/csci315/WEB-INF/cgi
2005-05-05 12:38:27 cgi: findCGI: currentLoc=/opt/tomcat4/webapps/csci315/WEB-INF/cgi
2005-05-05 12:38:27 cgi: findCGI: currentLoc=/opt/tomcat4/webapps/csci315/WEB-INF/cgi
2005-05-05 12:38:27 cgi: findCGI: FOUND cgi at /opt/tomcat4/webapps/csci315/WEB-INF/cgi/trouble.cgi
2005-05-05 12:38:27 cgi: findCGI calc: name=trouble.cgi, path=/opt/tomcat4/webapps/csci315/WEB-INF/cgi/trouble.cgi, scriptname=/csci315/cgi-bin/trouble.cgi, cginame=/trouble.cgi
2005-05-05 12:38:27 cgi: runCGI(envp=[{HTTP_USER_AGENT=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1), HTTP_ACCEPT_ENCODING=gzip, deflate, REQUEST_METHOD=POST, AUTH_TYPE=, HTTP_ACCEPT_LANGUAGE=en-us, SERVER_NAME=me.net, SERVER_SOFTWARE=TOMCAT, HTTP_CONTENT_TYPE=application/x-www-form-urlencoded, HTTP_REFERER=http://me.net:8080/csci315/servlet/robust.MyRobustServlet?loginname=&logintype=old&src=LOGIN&pu_m=May&pu_d=5&pu_y=2005&do_m=May&do_d=5&do_y=2005&selcar=Select&pushed=browse&src=MKRES, HTTP_HOST=me.net:8080, GATEWAY_INTERFACE=CGI/1.1, X_TOMCAT_SCRIPT_PATH=/opt/tomcat4/webapps/csci315/WEB-INF/cgi/trouble.cgi, REMOTE_ADDR=207.135.102.195, SERVER_PROTOCOL=HTTP/1.1, HTTP_CACHE_CONTROL=no-cache, PATH_INFO=, REMOTE_HOST=207.135.102.195, QUERY_STRING=, HTTP_CONNECTION=Keep-Alive, SERVER_PORT=8080, HTTP_COOKIE=JSESSIONID=54E1AEE3C232E600079B54D1B9E3C4FD, CONTENT_TYPE=application/x-www-form-urlencoded, CONTENT_LENGTH=14, HTTP_CONTENT_LENGTH=14, SCRIPT_NAME=/csci315/cgi-bin/trouble.cgi, HTTP_ACCEPT=image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, application/x-shockwave-flash, */*, REMOTE_USER=, REMOTE_IDENT=}], command=/opt/tomcat4/webapps/csci315/WEB-INF/cgi/trouble.cgi)
2005-05-05 12:38:27 cgi: runCGI: addHeader("Location: /csci315/servlet/robust.MyRobustServlet?pushed=restart")
2005-05-05 12:38:27 cgi: runCGI: 1 lines received on stderr
2005-05-05 12:38:28 StandardWrapperValve[cgi]: Servlet.service() for
servlet cgi threw exception
java.lang.ClassCastException: java.lang.Integer
at org.apache.catalina.servlets.CGIServlet$CGIEnvironment.toString(CGIServlet.java:1258)
at org.apache.catalina.servlets.CGIServlet.doGet(CGIServlet.java:613)
at org.apache.catalina.servlets.CGIServlet.doPost(CGIServlet.java:561)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:716)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:146)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:595)