After upgrading to Apache 1.3.6 and JServ 1.0, I was quite impressed,
until I started getting error messages from my servlets, and getting
"cannot scan servlet headers" in my mod_jserve.log file.
Anyway, it turned out to be a problem in jserv_ajpv11.c in the JServ
code. (The bug may also exist in some versions of jserv_ajpv12.c.)
patch that should fix the problem. Patch this against jserv_ajpv11.c
in the src/c directory in the JServ code.
=============8<================
------- jserv_ajpv11.c -------
*** /tmp/da004Fx Thu Jan 1 10:00:00 1970
--- jserv_ajpv11.c Fri Aug 6 10:13:41 1999
***************
*** 419,428 ****
/* Receive the response from JServ */
ap_hard_timeout("ajpv11-read", r);
if (ret=ap_scan_script_header_err_buff(r,buffsocket,NULL)) {
! ap_kill_timeout(r);
! jserv_error(JSERV_LOG_EMERG,cfg,"ajp11: %s",
! "cannot scan servlet headers");
! return SERVER_ERROR;
}
/* Check for our Error headers */
--- 419,433 ----
/* Receive the response from JServ */
ap_hard_timeout("ajpv11-read", r);
if (ret=ap_scan_script_header_err_buff(r,buffsocket,NULL)) {
! ap_kill_timeout(r);
!
! if( ret>=500 || ret < 0)
! jserv_error(JSERV_LOG_EMERG,cfg,"ajp11: %s (%d)",
! "cannot scan servlet headers", ret);
!
! r->status_line = NULL;
!
! return ret;
}
/* Check for our Error headers */
=============8<================
Also, I created a test servlet that demonstrates the bug. This
servlet will cause Apache to generate a 304 status when you reload
the servlet, as it supplies a "Last-Modified" header. Compile it
up, and load the page in your browser. Click reload/refresh. If
you have an unpatched version of jserv_ajpv11.c, you get a server error
page. (Probably showing the error "OK")
================8<================ Tester.java ==
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class Tester extends HttpServlet
{
public void doGet(
HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException
{
response.setContentType("text/html");
response.setHeader("Last-Modified",
"Thu, 11 Feb 1999 22:25:49 GMT");
PrintWriter out = new PrintWriter (response.getOutputStream());
out.println("<html>");
out.println("<head>");
out.println("<title>Test Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>This servlet reports that it was last
modified " +
"on Thu, 11 Feb 1999 22:25:49 GMT</p>");
out.println("</body>");
out.println("</html>");
out.close();
}
}
================8<==================
- Ben Kelley.
--
http://i.am/ben_kelley
Sent via Deja.com http://www.deja.com/
Share what you know. Learn what you don't.