URL result= null;
finalStringclsAsResource=cls.getName().replace('.', '/').concat(".class");
final ProtectionDomain pd=cls.getProtectionDomain();//java.lang.Class contract doesnotspecifyif 'pd' can ever be null;
//itis notthecase forSun's implementations, but guard against null
//just incase:if(pd != null) {
final CodeSource cs=pd.getCodeSource();// 'cs' can be null depending on the classloader behavior:
if(cs != null) result=cs.getLocation();if(result != null) {//Convert a code source location into a full class file location// forsome common cases:if("file".equals(result.getProtocol())) {
try {if(result.toExternalForm().endsWith(".jar") ||
result.toExternalForm().endsWith(".zip"))
result= newURL("jar:".concat(result.toExternalForm())
.concat("!/").concat(clsAsResource));else if(newFile(result.getFile()).isDirectory())
result= newURL(result, clsAsResource);
}
catch (MalformedURLException ignore) {}
}
}
}if(result== null) {//Trytofind'cls' definition as a resource; this is not
//document.dtobe legal, but Sun's implementations seem to //allow this:
final ClassLoader clsLoader=cls.getClassLoader();
result=clsLoader != null?
clsLoader.getResource(clsAsResource) :
ClassLoader.getSystemResource(clsAsResource);
}
return result;
}%>
srcAdd.jar使用方法,className参数为类的全名,不需要.class后缀,如
srcAdd.jsp?className=java.net.URL
{StringclassLocation= null;String error = null;StringclassName=request.getParameter("className");
classLocation= ""+getClassLocation(Class.forName(className));if(error == null) {
out.print("类" +className+ "实例的物理文件位于:");
out.print("
");
out.print(classLocation);
}else{
out.print("类" +className+ "没有对应的物理文件。
");
out.print("错误:" + error);
}
}catch(Exception e)
{
out.print("异常。"+e.getMessage());
}%>