private void generateClass ( ) throws FileNotFoundException , JasperException , Exception { long t1 = 0 ; if ( log . isLoggable ( Level . FINE ) ) { t1 = System . currentTimeMillis ( ) ; } String javaFileName = ctxt . getServletJavaFileName ( ) ; setJavaCompilerOptions ( ) ; // Start java compilation JavacErrorDetail [ ] javacErrors = javaCompiler . compile ( ctxt . getFullClassName ( ) , pageNodes ) ; if ( javacErrors != null ) { // If there are errors, always generate java files to disk. javaCompiler . doJavaFile ( true ) ; log . severe ( "Error compiling file: " + javaFileName ) ; errDispatcher . javacError ( javacErrors ) ; } if ( log . isLoggable ( Level . FINE ) ) { long t2 = System . currentTimeMillis ( ) ; log . fine ( "Compiled " + javaFileName + " " + ( t2 - t1 ) + "ms" ) ; } // Save or delete the generated Java files, depending on the // value of "keepgenerated" attribute javaCompiler . doJavaFile ( ctxt . keepGenerated ( ) ) ; // JSR45 Support if ( ! ctxt . isPrototypeMode ( ) && ! options . isSmapSuppressed ( ) ) { smapUtil . installSmap ( ) ; } // START CR 6373479 if ( jsw != null && jsw . getServletClassLastModifiedTime ( ) <= 0 ) { jsw . setServletClassLastModifiedTime ( javaCompiler . getClassLastModified ( ) ) ; } // END CR 6373479 if ( options . getSaveBytecode ( ) ) { javaCompiler . saveClassFile ( ctxt . getFullClassName ( ) , ctxt . getClassFileName ( ) ) ; } // On some systems, due to file caching, the time stamp for the updated // JSP file may actually be greater than that of the newly created byte // codes in the cache. In such cases, adjust the cache time stamp to // JSP page time, to avoid unnecessary recompilations. ctxt . getRuntimeContext ( ) . adjustBytecodeTime ( ctxt . getFullClassName ( ) , jspModTime ) ; }
Compile the servlet from . java file to . class file