📄 jspc.java
字号:
File uriDir = new File(clctxt.getRealPath("/"));
if (uriDir.exists()) {
if ((new File(uriDir, "WEB-INF/classes")).exists()) {
loader.addJar(clctxt.getRealPath("/WEB-INF/classes"));
}
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<servlet-name>");
mappingout.write(thisServletName);
mappingout.write("</servlet-name>\n\t\t<url-pattern>");
mappingout.write(file.replace('\\', '/'));
mappingout.write("</url-pattern>\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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -