调用java源文件编译器javac对java源文件进行编译。如果编译过程中提示编译错误,则将错误信息输入给客户端。如果编译成功,则生成class文件。以下是编译java源文件的处理代码:
以上代码中,通过调用javac进程来编译java源文件以生成class文件。并通过读取javac进程的错误输出流来达到将java源文件在编译过程中的错误信息输出到客户端。//Generate the command line for javac String command = JAVA_BIN_PATH + "javac -classpath " + baseClassesDir + ITEM_SEPARATOR + extClassesDir + ITEM_SEPARATOR + " -d " + path + " " + javaFName; //Execute javac process and build the java source file Process pJavac = m_rt.exec(command); //Create javac process error output stream BufferedReader pin = new BufferedReader(new InputStreamReader(pJavac.getErrorStream() ) ); String line; boolean isError = false; //Get the error output from javac while( (line = pin.readLine() ) != null) { if(!isError) { m_sout.println("<pre align='center' style='font-family:Arial;font-size:12pt;color:#FF0000'>"); System.out.println("Error command: " + command); } //Output the error information to client socket m_sout.println(line); isError = true; } //Wait for javac process finish pJavac.waitFor(); if(isError == true) { m_sout.println("</pre>"); return; }
需要补充的是,并不是对于每个jsp源文件都必须再解释成java源文件并编译成class文件。其间应该遵循的规则有:
A)如果jsp源文件对应的class文件不存在,或者jsp源文件新于对应的class文件,则需要进行对jsp源文件进行重新解释和编译。
B)反之,如果jsp源文件对应的class文件存在,并且新于jsp文件(class文件由jsp文件解释和编译得到,所以如果jsp源文件不更新则class文件总会新于jsp源文件),则不需要重新编译jsp文件。
遵循以上规则的目的就是为了减少不必要的重复编译,提高系统的效率。