2009-05-06 6 views
5

Ich benutze "JSP: Include", um eine statische Datei in einer meiner JSP-Dateien enthalten. Es funktioniert einwandfrei, wenn sich die statische HTML-Datei im Anwendungsordner befindet. Wenn es sich jedoch außerhalb des Anwendungsordners befindet, ist es nicht in der JSP-Datei enthalten.Wie man eine Datei außerhalb der Anwendung (Krieg) mit JSP Include

Hinweis: Ich habe einen Kontext für den Ordner erstellt, in dem die statische Datei gespeichert ist, und ich kann die HTML-Datei mit direkter URL anzeigen.

Bitte helfen ..

Antwort

11

Ich habe dieses Problem mit dem c: import Tag gelöst.

die dynamische URL definieren ich die Bohne verwendet haben: Tag definieren. Danke Freunde für die Vorschläge und Hilfe.

+0

Verwenden Sie Protokoll-Präfix: "file: /// $ {Ihre Dateipfad}" –

+0

@ EdgardLeal Ich nehme an, mit 'Datei' Protokoll erwartet die Datei auf dem Client-Computer befindet. 'c: import' hat es für mich gelöst. –

3

können Sie nur jsp:include in Ihrem Web-Anwendungskontext für Ressourcen. Sie müssen entweder java.io.File o.ä. zum Laden aus einem Dateisystempfad verwenden oder ClassLoader.getResource, um eine Ressource aus dem Klassenpfad zu laden.

+0

Hallo Peter Hilton, vielen Dank für die Anregungen. Ich habe c: import-Tag verwendet, um dieses Problem zu lösen. –

0

Nur aus Interesse - was ist der Grund dafür zu wollen? - Es kann einen alternativen Ansatz geben.

Ich vermute, dass Sie eine Konfiguration haben möchten, die unabhängig von der WAR-Datei ist und für jede Umgebung eindeutig ist, für die der WAR bereitgestellt wird.

+1

Hallo Belugabob, Ich habe alle JSPs unter einem Krieg und ich möchte eine statische HTML-Datei (etwa so etwas wie Helpcard) in der JSP-Datei enthalten. Ich habe diese HTML-Dateien in einem anderen Kontext außerhalb der WAR-Datei. Ich habe dies gelöst mit c: import –

2

zusätzlicher Vorteil der <c:import> Methode ist, dass Sie die Codierung mit dem charEncoding Attribut festlegen. Sie können dies weder mit <%@include%> noch <jsp:include> Anweisungen tun.

1

ich eine Klasse verwenden, die eine Methode, um Inhalte von URL haben: Ex: 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; 
} 
Verwandte Themen