JDTCompiler.java
/** * Compile the jsp file from the current engine context. As an side- effect, * tag files that are referenced by this page are also compiled. * 编译 jsp 文件,对应生成 java 文件和 class 文件 * @param compileClass * If true, generate both .java and .class file If false, * generate only .java file */ void org.apache.jasper.compiler.Compiler.compile(boolean compileClass)
/** * Compile the jsp file into equivalent servlet in .java file * 编译 jsp 文件,生成相应的 servlet 的 java文件 * @return a smap for the current JSP page, if one is generated, null * otherwise */ String[] org.apache.jasper.compiler.Compiler.generateJava()
/** * Compile the servlet from .java file to .class file * 将 servlet 的 java 文件编译成 class 文件 */ void org.apache.jasper.compiler.JDTCompiler.generateClass(String[] smap)
JspCompilationContext.java
/** * Full path name of the Java file into which the servlet is being * generated. * jsp 文件生成对应的 servlet java文件的全路径 */ public String getServletJavaFileName() { if (servletJavaFileName == null) { servletJavaFileName = getOutputDir() + getServletClassName() + ".java"; } return servletJavaFileName; }
SmapUtil.java 写出 jsp 文件对应的 servlet 的 class 文件
public static void installSmap(String[] smap) throws IOException { if (smap == null) { return; } for (int i = 0; i < smap.length; i += 2) { File outServlet = new File(smap[i]); SDEInstaller.install(outServlet, smap[i+1].getBytes(StandardCharsets.ISO_8859_1)); } }
参考:
http://www.cnblogs.com/mapeng-cnblogs/p/4226005.html
https://my.oschina.net/heroShane/blog/198450
https://www.ibm.com/developerworks/cn/java/j-lo-servlet/