⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jspcompiler.java

📁 用java开发的
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
				throw new JSPException("<B>" + jspFile.getPath() + ":" + lineNr + "</B>: Unknown jsp directive '<I>" + keyAndValue[0] + "</I>'");			}		}	}	private void parseSSI() throws StringIndexOutOfBoundsException, JSPException {		String[]		keyAndValue;		srcPos += 12;		skipWhitespace();		keyAndValue = parseKeyAndValue();		if(keyAndValue[0].equalsIgnoreCase("FILE")) {			parseInclude(keyAndValue[1], false);		} else if(keyAndValue[0].equalsIgnoreCase("VIRTUAL")) {			parseInclude(keyAndValue[1], true);		} else {			throw new JSPException("<B>" + jspFile.getPath() + ":" + lineNr + "</B>: Unknown #INCLUDE parameter " + keyAndValue[0]);		}		setSrcPos(src.indexOf('>', srcPos));		srcPos++;	}	private void parseInclude(String value, boolean virtual) throws StringIndexOutOfBoundsException, JSPException {		File			prevJspFile;		String			s, prevSrc;		int				prevSrcPos, prevLineNr;		prevJspFile = jspFile;		prevSrc = src;		prevSrcPos = srcPos;		prevLineNr = lineNr;		try {			if(virtual) {				s = servletRequest.getRealPath(value);				if(s == null)					throw new JSPException("<B>" + jspFile.getPath() + ":" + lineNr + "</B>: Virtual file " + value + " could not be mapped to a real file");				jspFile = new File(s);			} else {				jspFile = new File(jspFile.getParent(), value);			}			try {				jspFile = new File(jspFile.getCanonicalPath());			} catch(IOException ioexc) {				jspFile = new File(jspFile.getAbsolutePath());			}			parseOneJspFile();		} finally {			jspFile = prevJspFile;			src = prevSrc;			srcPos = prevSrcPos;			lineNr = prevLineNr;		}	}	private void parseBean() throws StringIndexOutOfBoundsException, JSPException {		Properties		beanAttributes;		Hashtable		beanDefaultProperties;		Enumeration		e;		String[]		keyAndValue;		String			k, v, name, varName, type, introspect,						create, scope, beanName, getFromScope;		int				startLineNr, endLineNr, i;		startLineNr = lineNr;		srcPos += 5;		skipWhitespace();		// gather <BEAN> tag parameters		beanAttributes = new Properties();		for(;;) {			// check for end of tag			if(src.charAt(srcPos) == '>') {				break;			}			keyAndValue = parseKeyAndValue();			beanAttributes.put(keyAndValue[0].toLowerCase(), keyAndValue[1]);		}		// gather <PARAM> tags		beanDefaultProperties = new Hashtable();		for(;;) {			setSrcPos(src.indexOf('<', srcPos));			if(src.substring(srcPos+1, srcPos+6).equalsIgnoreCase("/BEAN") &&				(Character.isWhitespace(src.charAt(srcPos+6)) || src.charAt(srcPos+6) == '>'))			{				// </BEAN> tag				setSrcPos(src.indexOf('>', srcPos));				srcPos++;				break;			} else if(src.substring(srcPos+1, srcPos+6).equalsIgnoreCase("PARAM") &&				Character.isWhitespace(src.charAt(srcPos+6)))			{				// <PARAM> tag				srcPos += 6;				skipWhitespace();				for(;;) {					// check for end of tag					if(src.charAt(srcPos) == '>') {						break;					}					keyAndValue = parseKeyAndValue();					beanDefaultProperties.put(keyAndValue[0], keyAndValue[1]);				}			} else {				srcPos++;			}		}		// check bean attributes		name = beanAttributes.getProperty("name");		if(name == null)			throw new JSPException("<B>" + jspFile.getPath() + ":" + lineNr + "</B>: &lt;BEAN&gt; tag does not have required name attribute");		varName = beanAttributes.getProperty("varname", name);		type = beanAttributes.getProperty("type", "Object");		introspect = beanAttributes.getProperty("introspect", "yes");		create = beanAttributes.getProperty("create", "yes");		scope = beanAttributes.getProperty("scope", "request");		beanName = beanAttributes.getProperty("beanname", type);		if(scope.equals("request")) {			getFromScope = "request.getAttribute(\"";		} else if(scope.equals("session")) {			createSession = true;			getFromScope = "__session.getValue(\"";		} else {			throw new JSPException("<B>" + jspFile.getPath() + ":" + lineNr + "</B>: &lt;BEAN&gt; tag has invalid scope attribute " + scope);		}		// generate bean code		endLineNr = lineNr;		try {			// put back line number for start of <BEAN> tag			lineNr = startLineNr;			if(beanCode.length() == 0) {				beanCode.append("\t\tjava.beans.PropertyDescriptor[] __propertyDescriptors;").append(lineSeparator);			}			// bean retrieval			recordFileAndLineNr(beanCode);			beanCode.append("\t\t").append(type).append((char) ' ').append(varName)					.append(" = null;").append(lineSeparator);			recordFileAndLineNr(beanCode);			beanCode.append("\t\t").append("if(").append(getFromScope).append(javaStringEncode(name))					.append("\") instanceof ").append(type).append(") {").append(lineSeparator);			recordFileAndLineNr(beanCode);			beanCode.append("\t\t\t").append(varName).append(" = (").append(type).append(") ")					.append(getFromScope).append(javaStringEncode(name)).append("\");").append(lineSeparator);			beanCode.append("\t\t} else {").append(lineSeparator);			if(create.equalsIgnoreCase("yes")) {				// bean creation				beanCode.append("\t\t\ttry {").append(lineSeparator);				recordFileAndLineNr(beanCode);				beanCode.append("\t\t\t\t").append(varName).append(" = (").append(type)						.append(") ").append("java.beans.Beans.instantiate(this.getClass().getClassLoader(), \"")						.append(beanName).append("\");").append(lineSeparator);;				if(scope.equals("session")) {					recordFileAndLineNr(beanCode);					beanCode.append("\t\t\t\t__session.putValue(\"").append(javaStringEncode(name)).append("\", ")							.append(varName).append(");").append(lineSeparator); 				}				beanCode.append("\t\t\t} catch(java.lang.ClassNotFoundException cnfexc) {").append(lineSeparator);				beanCode.append("\t\t\t\t__beanError(response, \"Could not create bean ").append(javaStringEncode(name))						.append(" of type ").append(javaStringEncode(type)).append(" (class not found)\");").append(lineSeparator);				beanCode.append("\t\t\t\treturn;").append(lineSeparator);				beanCode.append("\t\t\t}").append(lineSeparator);			} else {				recordFileAndLineNr(beanCode);				beanCode.append("\t\t\t__beanError(response, \"Bean ").append(javaStringEncode(name))						.append(" does not exist or is not of type ").append(javaStringEncode(type)).append("\");").append(lineSeparator);				beanCode.append("\t\t\treturn;");			}			beanCode.append("\t\t}").append(lineSeparator);			if(beanDefaultProperties.size() > 0 || introspect.equalsIgnoreCase("yes")) {				beanCode.append("\t\ttry {").append(lineSeparator);				recordFileAndLineNr(beanCode);				beanCode.append("\t\t\t__propertyDescriptors = java.beans.Introspector.getBeanInfo(")						.append(varName).append(".getClass()).getPropertyDescriptors();").append(lineSeparator);				// set bean default properties				e = beanDefaultProperties.keys();				while(e.hasMoreElements()) {					k = (String) e.nextElement();					v = (String) beanDefaultProperties.get(k);					recordFileAndLineNr(beanCode);					beanCode.append("\t\t\tif(!__beanSetProperty(").append(varName)							.append(", __propertyDescriptors, \"").append(javaStringEncode(k))							.append("\", \"").append(javaStringEncode(v)).append("\")) {").append(lineSeparator);					beanCode.append("\t\t\t\t__beanError(response, \"Bean ").append(javaStringEncode(name))							.append(" of type").append(javaStringEncode(type)).append(" has no property named ")							.append(javaStringEncode(k)).append("\");").append(lineSeparator);					beanCode.append("\t\t\t\treturn;").append(lineSeparator);					beanCode.append("\t\t\t}").append(lineSeparator);				}				// do bean introspection				if(introspect.equalsIgnoreCase("yes")) {					recordFileAndLineNr(beanCode);					beanCode.append("\t\t\t__beanIntrospect(").append(varName)							.append(", __propertyDescriptors, request);").append(lineSeparator);				}				beanCode.append("\t\t} catch(java.beans.IntrospectionException introexc) {").append(lineSeparator);				beanCode.append("\t\t\t__beanError(response, \"Introspection failed for bean ")						.append(javaStringEncode(name)).append(" of type ").append(javaStringEncode(type))						.append("\");").append(lineSeparator);				beanCode.append("\t\t}").append(lineSeparator);			}			beanCode.append(lineSeparator);		} finally {			lineNr = endLineNr;		}	}	private String[] parseKeyAndValue() throws StringIndexOutOfBoundsException {		char		c;		int			pos;		String[]	keyAndValue = new String[2];		// gather key		pos = srcPos;		for(;;) {			c = src.charAt(srcPos);			if(c == '=' || Character.isWhitespace(c)) {				break;			}			srcPos++;		}		keyAndValue[0] = src.substring(pos, srcPos);
		skipWhitespace();
		// quick work around page processing
		if ("page".equals(keyAndValue[0]))			return parseKeyAndValue();
				// gather optional value		if(src.charAt(srcPos) == '=') {			srcPos++;			skipWhitespace();			c = src.charAt(srcPos);			if(c == '\'' || c == '\"') {				pos = src.indexOf(c, srcPos+1);				keyAndValue[1] = src.substring(srcPos+1, pos);				setSrcPos(pos+1);			} else {				pos = srcPos;				for(;;) {					c = src.charAt(srcPos);					if(c == '%' || c == '>' || Character.isWhitespace(c)) {						break;					}					srcPos++;				}				keyAndValue[1] = src.substring(pos, srcPos);			}			skipWhitespace();		} else {			keyAndValue[1] = keyAndValue[0];		}		return keyAndValue;	}	private void changeParseState(int newState) {		if(newState == parseState)			return;		switch(parseState) {		case PARSE_HTML:			scriptletsCode.append("\");").append(lineSeparator);			break;		case PARSE_EXPRESSION:			scriptletsCode.append("));").append(lineSeparator);			break;		case PARSE_DECLARATION:			declarationsCode.append(lineSeparator);			break;		case PARSE_SCRIPTLET:			scriptletsCode.append(lineSeparator);			break;		}		parseState = newState;		switch(parseState) {		case PARSE_HTML:			recordFileAndLineNr(scriptletsCode);			scriptletsCode.append("\t\t\tout.print(\"");			break;		case PARSE_EXPRESSION:			recordFileAndLineNr(scriptletsCode);			scriptletsCode.append("\t\t\tout.print(__valueOf(");			break;		case PARSE_DECLARATION:			recordFileAndLineNr(declarationsCode);			break;		case PARSE_SCRIPTLET:			recordFileAndLineNr(scriptletsCode);			break;		}	}	private void recordFileAndLineNr(StringBuffer code) {		// FIXME: do nice encoding of backslashes in filename		code.append("//line " + jspFile.toString().replace('\\', '/') + ":" + lineNr).append(lineSeparator);	}	private void skipWhitespace() {		char		c;		for(;;) {			c = src.charAt(srcPos);			if(!Character.isWhitespace(c)) {				break;			} else if(c == '\n') {				lineNr++;			}			srcPos++;		}	}	private void setSrcPos(int newSrcPos) {		int			from;		if(newSrcPos < 0 || newSrcPos >= src.length())			throw new StringIndexOutOfBoundsException(Integer.toString(newSrcPos));		from = srcPos-1;		for(;;) {			from = src.indexOf('\n', from+1);			if(from == -1 || from >= newSrcPos) {				break;			}			lineNr++;		}		srcPos = newSrcPos;	}	private void generateJavaFile() throws JSPException {		PrintWriter 	out;		Enumeration		e;		File			f;		String			pn, cn;		Long			l;		int				i;		try {			f = new File(javaFile.getParent());			f.mkdirs();			out = new PrintWriter(new FileWriter(javaFile));			i = className.lastIndexOf('.');			if(i > 0) {				pn = className.substring(0, i);				cn = className.substring(i+1);			} else {				pn = null;				cn = className;			}			try {				// generate header and start of class				out.println("/* Automatically generated by GNUJSP. Do not edit. */");				if(pn != null) {					out.println("package " + pn + ";");				}				out.println(importDirective);				out.println("public final class " + cn +							" extends " + extendsDirective + implementsDirective);				out.println("{");				// generate declarations				out.println(declarationsCode);				// generate specified method				out.println("\tpublic void " + methodDirective +							"(javax.servlet.http.HttpServletRequest request, " +							"javax.servlet.http.HttpServletResponse response) " +							"throws javax.servlet.ServletException, java.io.IOException");				out.println("\t{");				if(createSession) {					out.println("\t\tjavax.servlet.http.HttpSession __session = request.getSession(true);");				}				out.println(beanCode);				out.println("\t\tresponse.setContentType(\"" + javaStringEncode(content_typeDirective) + "\");");				out.println("\t\tjava.io.PrintWriter out = response.getWriter();");				out.println("\t\ttry {");				out.println(scriptletsCode);				out.println("\t\t} finally {");				out.println("\t\t\tout.flush();");				out.println("\t\t\tout.close();");				out.println("\t\t}");				out.println("\t}");				out.println();				// generate own version of String.valueOf()				out.println("\tprivate static java.lang.String __valueOf(java.lang.Object obj) {");				out.println("\t\tif(obj == null) {");				out.println("\t\t\treturn \"\";");				out.println("\t\t} else {");				out.println("\t\t\treturn obj.toString();");				out.println("\t\t}");				out.println("\t}");				out.println("\tprivate static java.lang.String __valueOf(boolean b) { return java.lang.String.valueOf(b); }");				out.println("\tprivate static java.lang.String __valueOf(char c)    { return java.lang.String.valueOf(c); }");				out.println("\tprivate static java.lang.String __valueOf(int i)     { return java.lang.String.valueOf(i); }");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -