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 + -
显示快捷键?