|
JavaXT
|
|
Miscellaneous JSP InfoThis is a repository of random info related to Java Server Pages (JSP).The Path VariableFor my jsp projects, I often use a relative paths that start at the application root. I use this path when creating hyperlinks, paths to images, files, etc. This code covers the cases where your web app may be deployed as a default app on the app server.
String Path = request.getContextPath();
try{
String host = new java.net.URL(request.getRequestURL().toString()).getHost();
if (host.contains(".")){
host = host.substring(0, host.lastIndexOf("."));
if (host.contains(".")){
host = host.substring(host.lastIndexOf(".")+1);
}
}
if (host.equalsIgnoreCase(Path.replace("/", ""))){
Path = "/";
}
if (!Path.endsWith("/")) Path+="/";
}
catch(Exception e){}
Get Physical Location of a JSP FileWhenever I need to access a physical file in my web app, I do something like this:
public java.io.File getFile(){
String relPath = request.getServletPath().replace("/", java.io.File.separator);
return new java.io.File(application.getRealPath("") + relPath);
}
Dump File Contents to the JSP Output StreamSometimes you need a JSP to serve out a file or image. Here's a quick way to do it using the ServletOutputStream and a javaxt.io.File.
try{
//Parse Querystring
javaxt.io.File file = new javaxt.io.File(request.getParameter("filename"));
//Get input stream
java.io.InputStream inputStream = file.getInputStream();
//Set Response Headers
response.setHeader ("Content-Type", file.getContentType());
response.setHeader ("Content-Length", file.getSize() + "");
response.setHeader ("Cache-Control", "no-cache");
//You can force users to download the file instead of viewing it in the jsp page with this line:
//response.setHeader ("Content-Disposition", "attachment;filename=\"" + file.getName() + "\"");
//Dump inputStream to output
ServletOutputStream outputStream = response.getOutputStream();
byte[] b = new byte[1024];
int x=0;
while ( (x = inputStream.read(b)) != -1) {
outputStream.write(b,0,x);
}
inputStream.close();
outputStream.close();
}
catch(Exception e){
out.print("File not found");
}
Alternatively, you can use NIO Channels to improve performance and eliminate potential bottlenecks:
//Dump file to servlet output stream
ServletOutputStream outputStream = response.getOutputStream();
java.nio.channels.FileChannel inputChannel = file.getInputStream().getChannel();
java.nio.channels.WritableByteChannel outputChannel =
java.nio.channels.Channels.newChannel(outputStream);
inputChannel.transferTo(0, inputChannel.size(), outputChannel);
inputChannel.close();
outputChannel.close();
outputStream.close();
|
|