2009-05-06 57 views
5

我正在使用“jsp:include”将静态文件包含在我的一个jsp文件中。当静态HTML文件位于应用程序文件夹内时,它工作正常。但是,如果它保存在应用程序文件夹之外,它不包含在JSP文件中。如何使用jsp包含应用程序外的文件(war)包括

注意:我已经为保存静态文件的文件夹创建了上下文,并且可以使用直接url查看html文件。

请帮助..

回答

11

我已使用c:import标记解决了此问题。

要定义我已经使用了豆动态网址:定义标签。感谢您的朋友的建议和帮助。

+0

使用协议前缀:“file:/// $ {你的文件路径}” – 2013-05-16 13:22:38

3

只能使用jsp:include对资源的Web应用程序上下文中。您需要使用java.io.File或类似的文件系统路径加载,或ClassLoader.getResource加载类路径中的资源。

+0

嗨彼得·希尔顿,谢谢你的建议。我用c:import标签来解决这个问题。 – 2009-05-08 09:32:10

0

出于兴趣 - 为什么要这么做? - 可能有其他方法。

我怀疑您希望拥有一些独立于WAR文件的配置,并且对于部署WAR的每个环境都是独一无二的。

+1

嗨Belugabob, 我有一场战争中的所有JSP,我想在JSP文件中包含一个静态HTML文件(比如说像helpcard)。我有这些HTML文件在战争文件之外的另一个不同的上下文中。 我已经解决了这个使用c:导入 – 2009-05-08 09:30:57

2

<c:import>方法的好处是,你可以使用charEncoding属性设置编码。 您无法使用<%@include%><jsp:include>陈述来做到这一点。

1

我使用的是有一个方法从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; 
} 
相关问题