我正在使用“jsp:include”将静态文件包含在我的一个jsp文件中。当静态HTML文件位于应用程序文件夹内时,它工作正常。但是,如果它保存在应用程序文件夹之外,它不包含在JSP文件中。如何使用jsp包含应用程序外的文件(war)包括
注意:我已经为保存静态文件的文件夹创建了上下文,并且可以使用直接url查看html文件。
请帮助..
我正在使用“jsp:include”将静态文件包含在我的一个jsp文件中。当静态HTML文件位于应用程序文件夹内时,它工作正常。但是,如果它保存在应用程序文件夹之外,它不包含在JSP文件中。如何使用jsp包含应用程序外的文件(war)包括
注意:我已经为保存静态文件的文件夹创建了上下文,并且可以使用直接url查看html文件。
请帮助..
我已使用c:import标记解决了此问题。
要定义我已经使用了豆动态网址:定义标签。感谢您的朋友的建议和帮助。
只能使用jsp:include
对资源的Web应用程序上下文中。您需要使用java.io.File
或类似的文件系统路径加载,或ClassLoader.getResource加载类路径中的资源。
嗨彼得·希尔顿,谢谢你的建议。我用c:import标签来解决这个问题。 – 2009-05-08 09:32:10
出于兴趣 - 为什么要这么做? - 可能有其他方法。
我怀疑您希望拥有一些独立于WAR文件的配置,并且对于部署WAR的每个环境都是独一无二的。
嗨Belugabob, 我有一场战争中的所有JSP,我想在JSP文件中包含一个静态HTML文件(比如说像helpcard)。我有这些HTML文件在战争文件之外的另一个不同的上下文中。 我已经解决了这个使用c:导入 – 2009-05-08 09:30:57
的<c:import>
方法的好处是,你可以使用charEncoding
属性设置编码。 您无法使用<%@include%>
或<jsp:include>
陈述来做到这一点。
我使用的是有一个方法从URL内容类: 例:http://link.inet.vn/seo-website/inet.html
public class URLReader
{
public URLReader()
{
in = null;
out = null;
requestType = null;
headers = null;
content = null;
headers = new Hashtable();
}
public void doGet(String server, String uri, int port)
{
try{
Socket client = new Socket(server, port);
client.setKeepAlive(true);
in = new DataInputStream(client.getInputStream());
out = new DataOutputStream(client.getOutputStream());
out.writeBytes("GET " + uri + " HTTP/1.0\r\n");
out.writeBytes("Host: " + server + "\r\n");
out.writeBytes("Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\r\n");
out.writeBytes("Accept-Language: en-us\r\n");
out.writeBytes("Accept-Encoding: gzip, deflate\r\n");
out.writeBytes("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n");
out.writeBytes("Connection: Keep-Alive\r\n");
out.writeBytes("Content-Length: 0\r\n\r\n");
out.flush();
parseRequest();
out.close();
in.close();
client.close();
}catch(Exception e){
System.out.println(e.getMessage());
}
return;
}
public byte[] getContent()
{
return content;
}
public String getHeader(String name)
{
String key = (String)headers.get(name);
return key;
}
public Hashtable getHeaders()
{
return headers;
}
public String getRequestType()
{
return requestType;
}
public static void main(String args[]) throws IOException
{
URLReader reader = new URLReader();
reader.doGet("link.inet.vn", "/seo-website/inet.html", 80);
if(reader.getContent() != null)
System.out.println(new String(reader.getContent(),"UTF-8"));
}
private boolean parseRequest()
{
byte match[];
int index;
String line;
match = (new byte[] {
13, 10, 13, 10
});
index = 0;
line = "";
int i;
try{
while((i = in.read()) >= 0)
{
if(i == match[index] && index <= 3)
index++;
else
index = 0;
if(index == 4)
{
content = readHTTPContent();
break;
}
line = line + (char)i;
if(line.length() > 2 && i == 10)
{
int pos = line.indexOf(':');
if(pos != -1)
{
String name = line.substring(0, pos);
String value = line.substring(pos + 1, line.length()).trim();
setHeader(name, value);
} else
{
setRequestType(line.substring(0, line.length()).trim());
}
line = "";
}
}
return true;
}catch(Exception e){
System.out.println(e.getMessage());
return false;
}
}
private byte[] readHTTPContent()
throws IOException
{
ByteArrayOutputStream baosContent = new ByteArrayOutputStream();
int contentLength = 0;
try {
contentLength = Integer.parseInt((String) headers.get("content-length"));
} catch (Exception ex) {
contentLength = 1024 * 1024;
}
int bytesToRead = 0;
int bytesRead = 0;
int totalBytesRead = 0;
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
if (contentLength < bufferSize) {
bytesToRead = contentLength;
} else {
bytesToRead = bufferSize;
}
do {
try {
bytesRead = in.read(buffer, 0, bytesToRead);
} catch (InterruptedIOException e) {
/* comms read timeout expired, no problem */
System.out.println("Timeout reading from socket");
}
if (bytesRead == -1) {
in.close();
// throw new IOException("Connection was closed by client.");
break;
} else if (bytesRead > 0) {
//////////////////////////////////////
baosContent.write(buffer, 0, bytesRead);
//////////////////////////////////////
totalBytesRead += bytesRead;
}
// Left bytes to read
if (contentLength - totalBytesRead > bufferSize) {
bytesToRead = bufferSize;
} else {
bytesToRead = contentLength - totalBytesRead;
}
} while (totalBytesRead < contentLength);
return baosContent.toByteArray();
}
public void saveToFile(byte data[], String filename)
{
try{
File f = new File(filename);
FileOutputStream fout = new FileOutputStream(f);
fout.write(data);
fout.close();
}catch(Exception e){
System.out.println(e.getMessage());
}
return;
}
private void setHeader(String key, String value)
{
headers.put(key.toLowerCase(), value);
}
private void setRequestType(String s)
{
requestType = new String(s);
}
private byte content[];
private Hashtable headers;
private DataInputStream in;
private DataOutputStream out;
private String requestType;
}
使用协议前缀:“file:/// $ {你的文件路径}” – 2013-05-16 13:22:38