glenn 2002/12/08 05:42:53 Modified: jasper2/src/share/org/apache/jasper EmbededServletOptions.java JspCompilationContext.java jasper2/src/share/org/apache/jasper/compiler Compiler.java JspRuntimeContext.java jasper2/src/share/org/apache/jasper/servlet JspServletWrapper.java Log: Port bug fixes and minor changes I made to Tomcat 4 to Tomcat 5 where appropriate. Revision Changes Path 1.15 +8 -5 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/EmbededServletOptions.java Index: EmbededServletOptions.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/EmbededServletOptions.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- EmbededServletOptions.java 4 Dec 2002 00:48:42 -0000 1.14 +++ EmbededServletOptions.java 8 Dec 2002 13:42:52 -0000 1.15 @@ -184,7 +184,7 @@ * Java platform encoding to generate the JSP * page servlet. */ - private String javaEncoding; + private String javaEncoding = "UTF8"; public String getProperty(String name ) { return settings.getProperty( name ); @@ -476,7 +476,10 @@ this.compiler = config.getInitParameter("compiler"); - this.javaEncoding = config.getInitParameter("javaEncoding"); + String javaEncoding = config.getInitParameter("javaEncoding"); + if (javaEncoding != null) { + this.javaEncoding = javaEncoding; + } // Setup the global Tag Libraries location cache for this // web-application. 1.27 +3 -11 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspCompilationContext.java Index: JspCompilationContext.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspCompilationContext.java,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- JspCompilationContext.java 5 Dec 2002 02:27:35 -0000 1.26 +++ JspCompilationContext.java 8 Dec 2002 13:42:52 -0000 1.27 @@ -579,9 +579,6 @@ throws JasperException, FileNotFoundException { try { - if (servletClass == null && !options.getDevelopment()) { - compile(); - } jspLoader = new JasperLoader (outUrls, getServletPackageName() + "." + getServletClassName(), @@ -597,14 +594,9 @@ getServletClassName(); } servletClass = jspLoader.loadClass(name); - } catch (FileNotFoundException ex) { - jspCompiler.removeGeneratedFiles(); - throw ex; } catch (ClassNotFoundException cex) { throw new JasperException( Constants.getString("jsp.error.unable.load"),cex); - } catch (JasperException ex) { - throw ex; } catch (Exception ex) { throw new JasperException (Constants.getString("jsp.error.unable.compile"), ex); 1.41 +36 -44 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Compiler.java Index: Compiler.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Compiler.java,v retrieving revision 1.40 retrieving revision 1.41 diff -u -r1.40 -r1.41 --- Compiler.java 5 Dec 2002 23:56:39 -0000 1.40 +++ Compiler.java 8 Dec 2002 13:42:53 -0000 1.41 @@ -120,6 +120,7 @@ private ErrorDispatcher errDispatcher; private PageInfo pageInfo; private JspServletWrapper jsw; + private JasperAntLogger logger; private TagFileProcessor tfp; protected Project project=null; @@ -148,20 +149,19 @@ // Initializing project project = new Project(); // XXX We should use a specialized logger to redirect to jasperlog - // DefaultLogger bl=new JasperAntLogger(); - DefaultLogger bl=new DefaultLogger(); - bl.setOutputPrintStream(System.err); - bl.setErrorPrintStream(System.err); + logger = new JasperAntLogger(); + logger.setOutputPrintStream(System.out); + logger.setErrorPrintStream(System.err); if( Constants.jasperLog.getVerbosityLevel() >= Logger.DEBUG ) { - bl.setMessageOutputLevel( Project.MSG_VERBOSE ); + logger.setMessageOutputLevel( Project.MSG_VERBOSE ); } else { - bl.setMessageOutputLevel( Project.MSG_INFO ); + logger.setMessageOutputLevel( Project.MSG_INFO ); } if( log.isTraceEnabled() ) { - bl.setMessageOutputLevel( Project.MSG_VERBOSE ); + logger.setMessageOutputLevel( Project.MSG_VERBOSE ); } - project.addBuildListener( bl ); + project.addBuildListener( logger); if( options.getCompiler() != null ) { if( log.isDebugEnabled() ) @@ -169,22 +169,27 @@ project.setProperty("build.compiler", options.getCompiler() ); } project.init(); -// Vector v=project.getBuildListeners(); -// if( v.size() > 0 ) { -// BuildListener bl=(BuildListener)v.elementAt(0); -// System.out.println("XXX " + bl ); -// ((DefaultLogger)bl).setMessageOutputLevel(Project.MSG_VERBOSE); -// } return project; } - static class JasperAntLogger extends DefaultLogger { - private static org.apache.commons.logging.Log log= - org.apache.commons.logging.LogFactory.getLog( Compiler.class ); + class JasperAntLogger extends DefaultLogger { + + private StringBuffer reportBuf = new StringBuffer(); + protected void printMessage(final String message, final PrintStream stream, final int priority) { - log.info( message ); + } + + protected void log(String message) { + reportBuf.append(message); + reportBuf.append(System.getProperty("line.separator")); + } + + protected String getReport() { + String report = reportBuf.toString(); + reportBuf.setLength(0); + return report; } } @@ -225,31 +230,13 @@ String javaFileName = ctxt.getServletJavaFileName(); // Setup the ServletWriter - // We try UTF8 by default. If it fails, we use the java encoding - // specified for JspServlet init parameter "javaEncoding". - - String javaEncoding = "UTF8"; + String javaEncoding = ctxt.getOptions().getJavaEncoding(); OutputStreamWriter osw = null; try { osw = new OutputStreamWriter(new FileOutputStream(javaFileName), javaEncoding); } catch (UnsupportedEncodingException ex) { - // Try to get the java encoding from the "javaEncoding" - // init parameter for JspServlet. - javaEncoding = ctxt.getOptions().getJavaEncoding(); - if (javaEncoding != null) { - try { - osw = new OutputStreamWriter - (new FileOutputStream(javaFileName),javaEncoding); - } catch (UnsupportedEncodingException ex2) { - // no luck :-( - errDispatcher.jspError("jsp.error.invalid.javaEncoding", - "UTF8", javaEncoding); - } - } else { - errDispatcher.jspError("jsp.error.needAlternateJavaEncoding", - "UTF8"); - } + errDispatcher.jspError("jsp.error.needAlternateJavaEncoding", javaEncoding); } ServletWriter writer = new ServletWriter(new PrintWriter(osw)); @@ -322,13 +309,13 @@ throws FileNotFoundException, JasperException, Exception { long t1=System.currentTimeMillis(); - String javaEncoding = "UTF8"; + String javaEncoding = ctxt.getOptions().getJavaEncoding(); String javaFileName = ctxt.getServletJavaFileName(); String classpath = ctxt.getClassPath(); String sep = System.getProperty("path.separator"); - String errorReport = null; + StringBuffer errorReport = new StringBuffer(); boolean success = true; // Start capturing the System.err output for this thread @@ -381,9 +368,15 @@ success = false; } + errorReport.append(logger.getReport()); + // Stop capturing the System.err output for this thread - errorReport = SystemLogHandler.unsetThread(); - + String errorCapture = SystemLogHandler.unsetThread(); + if (errorCapture != null) { + errorReport.append(System.getProperty("line.separator")); + errorReport.append(errorCapture); + } + if (!ctxt.keepGenerated()) { File javaFile = new File(javaFileName); javaFile.delete(); @@ -391,8 +384,7 @@ if (!success) { log.error( "Error compiling file: " + javaFileName + " " + errorReport); - if(errorReport!=null ) - errDispatcher.javacError(errorReport, javaFileName, pageNodes); + errDispatcher.javacError(errorReport.toString(), javaFileName, pageNodes); } long t2=System.currentTimeMillis(); 1.8 +25 -18 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspRuntimeContext.java Index: JspRuntimeContext.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspRuntimeContext.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- JspRuntimeContext.java 28 Nov 2002 04:18:08 -0000 1.7 +++ JspRuntimeContext.java 8 Dec 2002 13:42:53 -0000 1.8 @@ -96,10 +96,6 @@ * is dependent upon. If a dpendent file changes the JSP page * which included it is recompiled. * - * Saves information about JSP dependincies to the file - * <code>JSP_DEPENDENCY.ser</code> in the web application context - * work directory. - * * Only used if a web application context is a directory. * * @author Glenn L. Nielsen @@ -389,20 +385,30 @@ if( policy != null ) { try { // Get the permissions for the web app context - String contextDir = context.getRealPath("/"); - if( contextDir == null ) { - contextDir = options.getScratchDir().toString(); + String docBase = context.getRealPath("/"); + if( docBase == null ) { + docBase = options.getScratchDir().toString(); + } + if (!docBase.endsWith(File.separator)){ + docBase = docBase + File.separator; } - URL url = new URL("file:" + contextDir); + File contextDir = new File(docBase); + URL url = contextDir.getCanonicalFile().toURL(); codeSource = new CodeSource(url,null); permissionCollection = policy.getPermissions(codeSource); - // Create a file read permission for web app context directory - if (contextDir.endsWith(File.separator)) { - contextDir = contextDir + "-"; + + docBase = docBase + "-"; + permissionCollection.add(new FilePermission(docBase,"read")); + + // Create a file read permission for web app tempdir (work) directory + String workDir = options.getScratchDir().toString(); + if (workDir.endsWith(File.separator)) { + workDir = workDir + "-"; } else { - contextDir = contextDir + File.separator + "-"; + workDir = workDir + File.separator + "-"; } - permissionCollection.add(new FilePermission(contextDir,"read")); + permissionCollection.add(new FilePermission(workDir,"read")); + // Allow the JSP to access org.apache.jasper.runtime.HttpJspBase permissionCollection.add( new RuntimePermission( "accessClassInPackage.org.apache.jasper.runtime") ); @@ -435,7 +441,8 @@ permissionCollection.add( new FilePermission(jndiUrl,"read") ); } - } catch(MalformedURLException mfe) { + } catch(Exception e) { + context.log("Security Init for context failed",e); } } } 1.23 +7 -5 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/servlet/JspServletWrapper.java Index: JspServletWrapper.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/servlet/JspServletWrapper.java,v retrieving revision 1.22 retrieving revision 1.23 diff -u -r1.22 -r1.23 --- JspServletWrapper.java 5 Dec 2002 02:27:35 -0000 1.22 +++ JspServletWrapper.java 8 Dec 2002 13:42:53 -0000 1.23 @@ -115,6 +115,7 @@ private long available = 0L; private ServletConfig config; private Options options; + private boolean firstTime = true; private boolean isTagFile; private int tripCount; @@ -183,6 +184,7 @@ } theServlet.init(config); + firstTime = false; } } } @@ -202,7 +204,7 @@ if (ctxt.isRemoved()) { throw new FileNotFoundException(jspUri); } - if (options.getDevelopment()) { + if (options.getDevelopment() || firstTime ) { synchronized (this) { ctxt.compile(); } @@ -284,7 +286,7 @@ Constants.getString("jsp.error.unavailable")); } - if (options.getDevelopment()) { + if (options.getDevelopment() || firstTime ) { synchronized (this) { ctxt.compile(); }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>