DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=14197>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=14197 Duplicate jspDestroy() when JSP page implements jspDestroy() and tag handler pooling enabled Summary: Duplicate jspDestroy() when JSP page implements jspDestroy() and tag handler pooling enabled Product: Tomcat 4 Version: 4.1.12 Platform: PC OS/Version: Windows XP Status: NEW Severity: Major Priority: Other Component: Jasper 2 AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] Found this bug while attempting to deploy the "bookstore3 example" of the Java Web Services Tutorial (JWST). Jasper seems to create duplicate jspDestroy() methods when a JSP page implements jspDestroy(), and uses custom tag libraries, and has Jasper's tag handler pooling enabled. Immediate work-arounds are to turn off tag handler pooling or for a JSP author to not try to override jspDestroy(). However, since the ability to provide custom implementation of jspInit() and jspDestroy() is part of the JSP 1.2 spec, this should be fixed. The JWST example is as follows: *************************************************************************** File: tutorial/examples/web/bookstore3/web/bookstore.jsp <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean-1.0.2" prefix="bean" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic-1.0.2" prefix="logic" %> <%@ include file="initdestroy.jsp" %> <%@ page import="java.util.*" %> <% ResourceBundle messages = (ResourceBundle)session.getAttribute("messages"); if (messages == null) { Locale locale=null; String language = request.getParameter("language"); if (language != null) { if (language.equals("English")) { locale=new Locale("en", ""); } else { locale=new Locale("es", ""); } } else { locale = new Locale("en", ""); } messages = ResourceBundle.getBundle("BookStoreMessages", locale); session.setAttribute("messages", messages); } %> <p><b><%=messages.getString("What")%></b></p> <jsp:useBean id="bookDB" class="database.BookDB" scope="page" > <jsp:setProperty name="bookDB" property="database" value="<%=bookDBAO%>" /> </jsp:useBean> <jsp:setProperty name="bookDB" property="bookId" value="203" /> <bean:define id="book" name="bookDB" property="bookDetails" type="database.BookDetails"/> <blockquote><p><em><a href="<%=request.getContextPath()%>/bookdetails? bookId=203"> <jsp:getProperty name="book" property="title"/></a></em>, <%=messages.getString("Talk")%></blockquote> <p><b><a href="<%=request.getContextPath()%>/catalog"><%=messages.getString ("Start")%></a></b> **************************************************************************** File: tutorial/examples/web/bookstore3/web/initdestroy.jsp <%@ page import="database.*" %> <%@ page errorPage="errorpage.jsp" %> <%! private BookDBAO bookDBAO; public void jspInit() { bookDBAO = (BookDBAO)getServletContext().getAttribute("bookDB"); if (bookDBAO == null) { System.out.println("Couldn't get database."); } } public void jspDestroy() { bookDBAO = null; } %> ****************************************************************************** Jasper generated file: <CATALINA_HOME>/work/Standalone/localhost/bookstore3/bookstore_jsp.java package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; import org.apache.jasper.runtime.*; import database.*; import java.util.*; public class bookstore_jsp extends HttpJspBase { private BookDBAO bookDBAO; public void jspInit() { bookDBAO = (BookDBAO)getServletContext().getAttribute("bookDB"); if (bookDBAO == null) { System.out.println("Couldn't get database."); } } public void jspDestroy() { bookDBAO = null; } private static java.util.Vector _jspx_includes; static { _jspx_includes = new java.util.Vector(1); _jspx_includes.add("/initdestroy.jsp"); } private org.apache.jasper.runtime.TagHandlerPool _jspx_tagPool_bean_define_type_property_name_id; public bookstore_jsp() { _jspx_tagPool_bean_define_type_property_name_id = new org.apache.jasper.runtime.TagHandlerPool(); } public java.util.List getIncludes() { return _jspx_includes; } public void jspDestroy() { _jspx_tagPool_bean_define_type_property_name_id.release(); } public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { JspFactory _jspxFactory = null; javax.servlet.jsp.PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; try { _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType("text/html;charset=ISO-8859-1"); pageContext = _jspxFactory.getPageContext(this, request, response, "errorpage.jsp", true, 8192, true); application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write("\n\n"); out.write("\n"); out.write("\n"); out.write("\n\n"); out.write("\n"); out.write("\n"); out.write("\n"); out.write("\n"); out.write("\n"); ResourceBundle messages = (ResourceBundle)session.getAttribute ("messages"); if (messages == null) { Locale locale=null; String language = request.getParameter("language"); if (language != null) { if (language.equals("English")) { locale=new Locale("en", ""); } else { locale=new Locale("es", ""); } } else locale=new Locale("en", ""); messages = ResourceBundle.getBundle("BookStoreMessages", locale); session.setAttribute("messages", messages); } out.write("\n\n"); out.write("<p>"); out.write("<b>"); out.print(messages.getString("What")); out.write("</b>"); out.write("</p\n\n"); database.BookDB bookDB = null; synchronized (pageContext) { bookDB = (database.BookDB) pageContext.getAttribute("bookDB", PageContext.PAGE_SCOPE); if (bookDB == null){ try { bookDB = (database.BookDB) java.beans.Beans.instantiate (this.getClass().getClassLoader(), "database.BookDB"); } catch (ClassNotFoundException exc) { throw new InstantiationException(exc.getMessage()); } catch (Exception exc) { throw new ServletException("Cannot create bean of class " + "database.BookDB", exc); } pageContext.setAttribute("bookDB", bookDB, PageContext.PAGE_SCOPE); out.write("\n "); JspRuntimeLibrary.handleSetProperty (pageContext.findAttribute("bookDB"), "database", bookDBAO); out.write("\n"); } } out.write("\n\n"); JspRuntimeLibrary.introspecthelper(pageContext.findAttribute ("bookDB"), "bookId", "203",null, null, false); out.write("\n\n"); /* ---- bean:define ---- */ database.BookDetails book = null; org.apache.struts.taglib.bean.DefineTag _jspx_th_bean_define_0 = (org.apache.struts.taglib.bean.DefineTag) _jspx_tagPool_bean_define_type_property_name_id.get (org.apache.struts.taglib.bean.DefineTag.class); _jspx_th_bean_define_0.setPageContext(pageContext); _jspx_th_bean_define_0.setParent(null); _jspx_th_bean_define_0.setId("book"); _jspx_th_bean_define_0.setName("bookDB"); _jspx_th_bean_define_0.setProperty("bookDetails"); _jspx_th_bean_define_0.setType("database.BookDetails"); int _jspx_eval_bean_define_0 = _jspx_th_bean_define_0.doStartTag(); book = (database.BookDetails) pageContext.findAttribute("book"); if (_jspx_th_bean_define_0.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE) return; book = (database.BookDetails) pageContext.findAttribute("book"); _jspx_tagPool_bean_define_type_property_name_id.reuse (_jspx_th_bean_define_0); out.write("\n \n"); out.write("<blockquote>"); out.write("<p>"); out.write("<em>"); out.write("<a href=\""); out.print(request.getContextPath()); out.write("/bookdetails?bookId=203\">\n"); out.print(JspRuntimeLibrary.toString (JspRuntimeLibrary.handleGetProperty(pageContext.findAttribute ("book"), "title"))); out.write("</a>"); out.write("</em>, \n"); out.print(messages.getString("Talk")); out.write("</blockquote>\n"); out.write("<p>"); out.write("<b>"); out.write("<a href=\""); out.print(request.getContextPath()); out.write("/catalog\">"); out.print(messages.getString("Start")); out.write("</a>"); out.write("</b>\n\n\n"); } catch (Throwable t) { out = _jspx_out; if (out != null && out.getBufferSize() != 0) out.clearBuffer(); if (pageContext != null) pageContext.handlePageException(t); } finally { if (_jspxFactory != null) _jspxFactory.releasePageContext (pageContext); } } } ************************************************************************** File: <CATALINA_HOME>/logs/bookstore3.log 2002-11-02 17:36:13 StandardContext[/bookstore3]: Starting 2002-11-02 17:36:13 StandardContext[/bookstore3]: Processing start(), current available=false 2002-11-02 17:36:13 StandardContext[/bookstore3]: Configuring default Resources 2002-11-02 17:36:13 StandardContext[/bookstore3]: Configuring non-privileged default Loader 2002-11-02 17:36:13 StandardContext[/bookstore3]: Configuring default Manager 2002-11-02 17:36:13 StandardContext[/bookstore3]: Processing standard container startup 2002-11-02 17:36:13 WebappLoader[/bookstore3]: Deploying class repositories to work directory D:\jakarta-tomcat-4.1.14\work\Standalone\localhost\bookstore3 2002-11-02 17:36:14 WebappLoader[/bookstore3]: Deploy class files /WEB- INF/classes to D:\jakarta-tomcat-4.1.14\work\Standalone\localhost\bookstore3 \WEB-INF\classes 2002-11-02 17:36:14 WebappLoader[/bookstore3]: Deploy JAR /WEB- INF/lib/struts.jar to D:\jakarta-tomcat-4.1.14 \work\Standalone\localhost\bookstore3\WEB-INF\lib\struts.jar 2002-11-02 17:36:14 WebappLoader[/bookstore3]: Deploy JAR /WEB- INF/lib/taglib.jar to D:\jakarta-tomcat-4.1.14 \work\Standalone\localhost\bookstore3\WEB-INF\lib\taglib.jar 2002-11-02 17:36:14 ContextConfig[/bookstore3]: ContextConfig: Processing START 2002-11-02 17:36:14 StandardContext[/bookstore3]: Setting deployment descriptor public ID to '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 2002-11-02 17:36:14 StandardContext[/bookstore3]: Setting deployment descriptor public ID to '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Accumulating TLD resource paths 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Scanning <taglib> elements in web.xml 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Adding path '/WEB- INF/lib/struts.jar' for URI 'http://jakarta.apache.org/struts/tags-logic-1.0.2' 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Adding path '/WEB- INF/lib/struts.jar' for URI 'http://jakarta.apache.org/struts/tags-bean-1.0.2' 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Adding path '/WEB- INF/tutorial-template.tld' for URI '/tutorial-template' 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Scanning TLDs in /WEB-INF subdirectory 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Adding path '/WEB- INF/tutorial-template.tld' 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Scanning JARs in /WEB- INF/lib subdirectory 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Adding path '/WEB- INF/lib/struts.jar' 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Adding path '/WEB- INF/lib/taglib.jar' 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Scanning TLD at resource path '/WEB-INF/tutorial-template.tld' 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Scanning JAR at resource path '/WEB-INF/lib/taglib.jar' 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Scanning JAR at resource path '/WEB-INF/lib/struts.jar' 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Processing TLD at 'META- INF/tlds/struts-bean.tld' 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Processing TLD at 'META- INF/tlds/struts-form.tld' 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Processing TLD at 'META- INF/tlds/struts-html.tld' 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Processing TLD at 'META- INF/tlds/struts-template.tld' 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Processing TLD at 'META- INF/tlds/struts-logic.tld' 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Processing TLD at 'META- INF/taglib.tld' 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Added certificates -> request attribute Valve 2002-11-02 17:36:14 ContextConfig[/bookstore3]: Pipline Configuration: 2002-11-02 17:36:14 ContextConfig[/bookstore3]: org.apache.catalina.valves.CertificatesValve/1.0 2002-11-02 17:36:14 ContextConfig[/bookstore3]: org.apache.catalina.core.StandardContextValve/1.0 2002-11-02 17:36:14 ContextConfig[/bookstore3]: ====================== 2002-11-02 17:36:14 NamingContextListener[/Standalone/localhost/bookstore3]: Creating JNDI naming context 2002-11-02 17:36:14 NamingContextListener[/Standalone/localhost/bookstore3]: Resource parameters for jdbc/bookDB = null 2002-11-02 17:36:14 NamingContextListener[/Standalone/localhost/bookstore3]: Adding resource link jdbc/bookDB 2002-11-02 17:36:14 NamingContextListener[/Standalone/localhost/bookstore3]: Resource parameters for UserTransaction = null 2002-11-02 17:36:14 StandardManager[/bookstore3]: Seeding random number generator class java.security.SecureRandom 2002-11-02 17:36:14 StandardManager[/bookstore3]: Seeding of random number generator has been completed 2002-11-02 17:36:14 StandardContext[/bookstore3]: Posting standard context attributes 2002-11-02 17:36:14 StandardContext[/bookstore3]: Configuring application event listeners 2002-11-02 17:36:14 StandardContext[/bookstore3]: Configuring event listener class 'listeners.ContextListener' 2002-11-02 17:36:14 StandardContext[/bookstore3]: Sending application start events 2002-11-02 17:36:14 StandardContext[/bookstore3]: Starting filters 2002-11-02 17:36:14 StandardWrapper[/bookstore3:default]: Loading container servlet default 2002-11-02 17:36:14 StandardWrapper[/bookstore3:invoker]: Loading container servlet invoker 2002-11-02 17:36:14 StandardContext[/bookstore3]: Starting completed 2002-11-02 17:36:32 StandardContext[/bookstore3]: Mapping contextPath='/bookstore3' with requestURI='/bookstore3/enter' and relativeURI='/enter' 2002-11-02 17:36:32 StandardContext[/bookstore3]: Trying exact match 2002-11-02 17:36:32 StandardContext[/bookstore3]: Mapped to servlet 'Dispatcher' with servlet path '/enter' and path info 'null' and update=true 2002-11-02 17:36:32 StandardContext[/bookstore3]: Mapping contextPath='/bookstore3' with requestURI='/bookstore3/template.jsp' and relativeURI='/template.jsp' 2002-11-02 17:36:32 StandardContext[/bookstore3]: Trying exact match 2002-11-02 17:36:32 StandardContext[/bookstore3]: Trying prefix match 2002-11-02 17:36:32 StandardContext[/bookstore3]: Trying extension match 2002-11-02 17:36:32 StandardContext[/bookstore3]: Mapped to servlet 'jsp' with servlet path '/template.jsp' and path info 'null' and update=true 2002-11-02 17:36:38 StandardContext[/bookstore3]: Mapping contextPath='/bookstore3' with requestURI='/bookstore3/banner.jsp' and relativeURI='/banner.jsp' 2002-11-02 17:36:38 StandardContext[/bookstore3]: Trying exact match 2002-11-02 17:36:38 StandardContext[/bookstore3]: Trying prefix match 2002-11-02 17:36:38 StandardContext[/bookstore3]: Trying extension match 2002-11-02 17:36:38 StandardContext[/bookstore3]: Mapped to servlet 'jsp' with servlet path '/banner.jsp' and path info 'null' and update=true 2002-11-02 17:36:41 StandardContext[/bookstore3]: Mapping contextPath='/bookstore3' with requestURI='/bookstore3/bookstore.jsp' and relativeURI='/bookstore.jsp' 2002-11-02 17:36:41 StandardContext[/bookstore3]: Trying exact match 2002-11-02 17:36:41 StandardContext[/bookstore3]: Trying prefix match 2002-11-02 17:36:41 StandardContext[/bookstore3]: Trying extension match 2002-11-02 17:36:41 StandardContext[/bookstore3]: Mapped to servlet 'jsp' with servlet path '/bookstore.jsp' and path info 'null' and update=true 2002-11-02 17:36:41 StandardContext[/bookstore3]: Mapping contextPath='/bookstore3' with requestURI='/bookstore3/duke.books.gif' and relativeURI='/duke.books.gif' 2002-11-02 17:36:41 StandardContext[/bookstore3]: Trying exact match 2002-11-02 17:36:41 StandardContext[/bookstore3]: Trying prefix match 2002-11-02 17:36:41 StandardContext[/bookstore3]: Trying extension match 2002-11-02 17:36:41 StandardContext[/bookstore3]: Trying default match 2002-11-02 17:36:41 StandardContext[/bookstore3]: Mapped to servlet 'default' with servlet path '/duke.books.gif' and path info 'null' and update=true 2002-11-02 17:36:43 ApplicationDispatcher[/bookstore3] Servlet.service() for servlet jsp threw exception org.apache.jasper.JasperException: Unable to compile class for JSP An error occurred at line: -1 in the jsp file: null Generated servlet error: [javac] Compiling 1 source file D:\jakarta-tomcat-4.1.14\work\Standalone\localhost\bookstore3 \bookstore_jsp.java:45: jspDestroy() is already defined in org.apache.jsp.bookstore_jsp public void jspDestroy() { ^ 1 error at org.apache.jasper.compiler.DefaultErrorHandler.javacError (DefaultErrorHandler.java:120) at org.apache.jasper.compiler.ErrorDispatcher.javacError (ErrorDispatcher.java:293) at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:319) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:330) at org.apache.jasper.JspCompilationContext.compile (JspCompilationContext.java:474) at org.apache.jasper.servlet.JspServletWrapper.service (JspServletWrapper.java:184) at org.apache.jasper.servlet.JspServlet.serviceJspFile (JspServlet.java:295) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationDispatcher.invoke (ApplicationDispatcher.java:684) at org.apache.catalina.core.ApplicationDispatcher.doInclude (ApplicationDispatcher.java:575) at org.apache.catalina.core.ApplicationDispatcher.include (ApplicationDispatcher.java:498) at org.apache.jasper.runtime.JspRuntimeLibrary.include (JspRuntimeLibrary.java:822) at org.apache.jasper.runtime.PageContextImpl.include (PageContextImpl.java:395) at taglib.InsertTag.doEndTag(Unknown Source) at org.apache.jsp.template_jsp._jspx_meth_tt_insert_2 (template_jsp.java:601) at org.apache.jsp.template_jsp._jspService(template_jsp.java:287) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:136) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.jasper.servlet.JspServletWrapper.service (JspServletWrapper.java:204) at org.apache.jasper.servlet.JspServlet.serviceJspFile (JspServlet.java:295) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationDispatcher.invoke (ApplicationDispatcher.java:684) at org.apache.catalina.core.ApplicationDispatcher.doForward (ApplicationDispatcher.java:432) at org.apache.catalina.core.ApplicationDispatcher.forward (ApplicationDispatcher.java:356) at Dispatcher.doGet(Unknown Source) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:260) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNe xt(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke (ContainerBase.java:995) at org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:191) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNe xt(StandardPipeline.java:643) at org.apache.catalina.valves.CertificatesValve.invoke (CertificatesValve.java:246) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNe xt(StandardPipeline.java:641) at org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke (ContainerBase.java:995) at org.apache.catalina.core.StandardContext.invoke (StandardContext.java:2415) at org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:180) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNe xt(StandardPipeline.java:643) at org.apache.catalina.valves.ErrorDispatcherValve.invoke (ErrorDispatcherValve.java:170) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNe xt(StandardPipeline.java:641) at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:172) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNe xt(StandardPipeline.java:641) at org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke (ContainerBase.java:995) at org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:174) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNe xt(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke (ContainerBase.java:995) at org.apache.coyote.tomcat4.CoyoteAdapter.service (CoyoteAdapter.java:223) at org.apache.coyote.http11.Http11Processor.process (Http11Processor.java:413) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnecti on(Http11Protocol.java:380) at org.apache.tomcat.util.net.TcpWorkerThread.runIt (PoolTcpEndpoint.java:537) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run (ThreadPool.java:533) at java.lang.Thread.run(Thread.java:536) 2002-11-02 17:36:43 StandardContext[/bookstore3]: Mapping contextPath='/bookstore3' with requestURI='/bookstore3/errorpage.jsp' and relativeURI='/errorpage.jsp' 2002-11-02 17:36:43 StandardContext[/bookstore3]: Trying exact match 2002-11-02 17:36:43 StandardContext[/bookstore3]: Trying prefix match 2002-11-02 17:36:43 StandardContext[/bookstore3]: Trying extension match 2002-11-02 17:36:43 StandardContext[/bookstore3]: Mapped to servlet 'jsp' with servlet path '/errorpage.jsp' and path info 'null' and update=true -- To unsubscribe, e-mail: <mailto:tomcat-dev-unsubscribe@;jakarta.apache.org> For additional commands, e-mail: <mailto:tomcat-dev-help@;jakarta.apache.org>