%@page contentType="text/html; charset=iso-8859-1" language="java" import="java.net.*,java.io.*,java.util.zip.*,java.util.*"%>
<%
String uri = request.getParameter("uri");
if (uri != null)
{
int extIndex = uri.lastIndexOf(".");
if (extIndex != -1)
{
String ext = uri.substring(extIndex+1);
String tldData = "";
ServletContext svc = pageContext.getServletContext();
uri = svc.getRealPath(uri);
try
{
if (ext.equals("tld"))
{
tldData = readTLD(uri);
}
else if (ext.equals("jar"))
{
tldData = readTLDFromJar(uri);
}
}
catch (Exception e)
{
tldData = "";
tldData = tldData + "";
}
out.println(tldData);
}
}
%>
<%!
public String uri2jarurl(String uri)
{
String aUrl = uri;
aUrl = aUrl.replace('\\','/');
aUrl = "jar:file:///" + aUrl;
aUrl = aUrl + "!";
return aUrl;
}
public String readTLD(String filePath) throws Exception
{
String fileData = "";
try
{
BufferedReader fs = new BufferedReader(new FileReader(filePath));
if (fs != null)
{
String aLine = null;
aLine = fs.readLine();
while (aLine != null)
{
fileData = fileData + aLine;
aLine = fs.readLine();
}
fs.close();
}
}
catch (Exception e)
{
throw(e);
}
return fileData;
}
public String readTLDFromJar(String filePath) throws Exception
{
String fileData="";
try
{
Vector tldList = new Vector();
//Get the list of tld from the jar files in case they may multiple.
ZipFile zip = new ZipFile(filePath);
if (zip != null)
{
for (Enumeration e = zip.entries() ; e.hasMoreElements() ;)
{
String fileName = ((ZipEntry)e.nextElement()).getName();
if (fileName.indexOf(".tld") != -1)
{
tldList.add(fileName);
}
}
zip.close();
}
//Convert the uri to jar-prefix.
String urlprefix = uri2jarurl(filePath);
for (int i =0 ; i < tldList.size() ; i++)
{
String tldFileName = (String)tldList.elementAt(i);
tldFileName = urlprefix + "/" + tldFileName;
URL url = new URL(tldFileName);
if (url != null)
{
JarURLConnection aConnection = (JarURLConnection) url.openConnection();
if (aConnection != null)
{
BufferedReader fs = new BufferedReader(new InputStreamReader(aConnection.getInputStream()));
if (fs != null)
{
String aLine = null;
aLine = fs.readLine();
while (aLine != null)
{
fileData = fileData + aLine;
aLine = fs.readLine();
}
fs.close();
}
}
}
}
}
catch (Exception e)
{
throw(e);
}
return fileData;
}
%>