jspc.java
来自「这是一个法律事务所系统源码」· Java 代码 · 共 693 行 · 第 1/2 页
JAVA
693 行
File lib = new File(clctxt.getRealPath("WEB-INF/lib")); if (lib.exists() && lib.isDirectory()) { String[] libs = lib.list(); for (int i = 0; i < libs.length; i++) { try { loader.addJar(lib.getCanonicalPath() + File.separator + libs[i]); } catch (IOException ioe) { // failing a toCanonicalPath on a file that // exists() should be a JVM regression test, // therefore we have permission to freak out throw new RuntimeException(ioe.toString()); } } } } CommandLineCompiler clc = new CommandLineCompiler(clctxt); clc.compile(); targetClassName = null; String thisServletName; if (clc.getPackageName() == null) { thisServletName = clc.getClassName(); } else { thisServletName = clc.getPackageName() + '.' + clc.getClassName(); } if (servletout != null) { servletout.write("\n\t<servlet>\n\t\t<servlet-name>"); servletout.write(thisServletName); servletout.write("</servlet-name>\n\t\t<servlet-class>"); servletout.write(thisServletName); servletout.write("</servlet-class>\n\t</servlet>\n"); } if (mappingout != null) { mappingout.write("\n\t<servlet-mapping>\n\t\t<url-pattern>"); mappingout.write(file); mappingout.write("</url-pattern>\n\t\t<servlet-name>"); mappingout.write(thisServletName); mappingout.write("</servlet-name>\n\t</servlet-mapping>\n"); } return true; } catch (JasperException je) { //je.printStackTrace(log); Constants.message("jspc.error.jasperException", new Object[] {file, je}, Logger.ERROR); if (dieLevel != NO_DIE_LEVEL) { dieOnExit = true; } } catch (FileNotFoundException fne) { Constants.message("jspc.error.fileDoesNotExist", new Object[] {fne.getMessage()}, Logger.WARNING); } catch (Exception e) { Constants.message("jspc.error.generalException", new Object[] {file, e}, Logger.ERROR); if (dieLevel != NO_DIE_LEVEL) { dieOnExit = true; } } return false; } public void parseFiles(PrintStream log) throws JasperException { boolean scratchDirSet = (scratchDir != null); boolean urirootSet = (uriRoot != null); // set up a scratch/output dir if none is provided if (scratchDir == null) { String temp = System.getProperty("java.io.tempdir"); if (temp == null) { temp = ""; } scratchDir = new File(new File(temp).getAbsolutePath()); } File f = new File(args[argPos]); while (!f.exists()) { boolean webApp = false; if (SWITCH_FILE_WEBAPP.equals(args[argPos])) { webApp = true; if (args.length > argPos + 1) { f = new File(args[argPos + 1]); } else { // end of arguments, nothing left to parse Constants.message("jspc.error.emptyWebApp", Logger.ERROR); return; } } if (!f.exists()) { Constants.message("jspc.error.fileDoesNotExist", new Object[] {f}, Logger.WARNING); argPos++; if (webApp) { argPos++; } if (argPos >= args.length) { // end of arguments, nothing left to parse return; } else { f = new File(args[argPos]); } } } if (uriRoot == null) { if (SWITCH_FILE_WEBAPP.equals(args[argPos])) { if (args.length > argPos + 1) { f = new File(args[argPos + 1]); } else { // end of arguments, nothing left to parse return; } } // set up the uri root if none is explicitly set String tUriBase = uriBase; if (tUriBase == null) { tUriBase = "/"; } try { if (f.exists()) { f = new File(f.getCanonicalPath()); while (f != null) { File g = new File(f, "WEB-INF"); if (g.exists() && g.isDirectory()) { uriRoot = f.getCanonicalPath(); uriBase = tUriBase; Constants.message("jspc.implicit.uriRoot", new Object[] { uriRoot }, Logger.INFORMATION); break; } if (f.exists() && f.isDirectory()) { tUriBase = "/" + f.getName() + "/" + tUriBase; } String fParent = f.getParent(); if (fParent == null) { f = new File(args[argPos]); fParent = f.getParent(); if (fParent == null) { fParent = File.separator; } uriRoot = new File(fParent).getCanonicalPath(); uriBase = "/"; break; } else { f = new File(fParent); } // If there is no acceptible candidate, uriRoot will // remain null to indicate to the CompilerContext to // use the current working/user dir. } } } catch (IOException ioe) { // since this is an optional default and a null value // for uriRoot has a non-error meaning, we can just // pass straight through } } String file = nextFile(); File froot = new File(uriRoot); String ubase = null; try { ubase = froot.getCanonicalPath(); } catch (IOException ioe) { // if we cannot get the base, leave it null } while (file != null) { if (SWITCH_FILE_WEBAPP.equals(file)) { String base = nextFile(); if (base == null) { Constants.message("jspc.error.emptyWebApp", Logger.ERROR); return; }// else if (".".equals(base)) { // base = ""; //} String oldRoot = uriRoot; if (!urirootSet) { uriRoot = base; } Vector pages = new Vector(); Stack dirs = new Stack(); dirs.push(base); if (extensions == null) { extensions = new Vector(); extensions.addElement("jsp"); } while (!dirs.isEmpty()) { String s = dirs.pop().toString(); //System.out.println("--" + s); f = new File(s); if (f.exists() && f.isDirectory()) { String[] files = f.list(); String ext; for (int i = 0; i < files.length; i++) { File f2 = new File(s, files[i]); //System.out.println(":" + f2.getPath()); if (f2.isDirectory()) { dirs.push(f2.getPath()); //System.out.println("++" + f2.getPath()); } else { ext = files[i].substring( files[i].lastIndexOf('.') + 1); if (extensions.contains(ext)) { //System.out.println(s + "?" + files[i]); pages.addElement( s + File.separatorChar + files[i]); } else { //System.out.println("not done:" + ext); } } } } } String ubaseOld = ubase; File frootOld = froot; froot = new File(uriRoot); try { ubase = froot.getCanonicalPath(); } catch (IOException ioe) { // if we cannot get the base, leave it null } //System.out.println("==" + ubase); Writer mapout; CharArrayWriter servletout, mappingout; try { if (webxmlLevel >= INC_WEBXML) { File fmapings = new File(webxmlFile); mapout = new FileWriter(fmapings); servletout = new CharArrayWriter(); mappingout = new CharArrayWriter(); } else { mapout = null; servletout = null; mappingout = null; } if (webxmlLevel >= ALL_WEBXML) { mapout.write(Constants.getString("jspc.webxml.header")); } else if (webxmlLevel>= INC_WEBXML) { mapout.write(Constants.getString("jspc.webinc.header")); } } catch (IOException ioe) { mapout = null; servletout = null; mappingout = null; } Enumeration e = pages.elements(); while (e.hasMoreElements()) { String nextjsp = e.nextElement().toString(); try { if (ubase != null) { File fjsp = new File(nextjsp); String s = fjsp.getCanonicalPath(); //System.out.println("**" + s); if (s.startsWith(ubase)) { nextjsp = s.substring(ubase.length()); } } } catch (IOException ioe) { // if we got problems dont change the file name } if (nextjsp.startsWith("." + File.separatorChar)) { nextjsp = nextjsp.substring(2); } parseFile(log, nextjsp, servletout, mappingout); } uriRoot = oldRoot; ubase = ubaseOld; froot = frootOld; if (mapout != null) { try { servletout.writeTo(mapout); mappingout.writeTo(mapout); if (webxmlLevel >= ALL_WEBXML) { mapout.write(Constants.getString("jspc.webxml.footer")); } else if (webxmlLevel >= INC_WEBXML) { mapout.write(Constants.getString("jspc.webinc.footer")); } mapout.close(); } catch (IOException ioe) { // noting to do if it fails since we are done with it } } } else { try { if (ubase != null) { File fjsp = new File(file); String s = fjsp.getCanonicalPath(); if (s.startsWith(ubase)) { file = s.substring(ubase.length()); } } } catch (IOException ioe) { // if we got problems dont change the file name } parseFile(log, file, null, null); } file = nextFile(); } if (dieOnExit) { System.exit(die); } } public static void main(String arg[]) { if (arg.length == 0) { System.out.println(Constants.getString("jspc.usage")); } else { try { JspC jspc = new JspC(arg, System.out); jspc.parseFiles(System.out); } catch (JasperException je) { System.err.print("error:"); System.err.println(je.getMessage()); if (die != NO_DIE_LEVEL) { System.exit(die); } } } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?