2009-05-06 9 views
5

J'utilise "jsp: include" pour inclure un fichier statique dans un de mes fichiers jsp. Cela fonctionne correctement lorsque le fichier html statique est situé dans le dossier de l'application. Cependant, si elle reste à l'extérieur du dossier de l'application, elle n'est pas incluse dans le fichier JSP.Comment faire pour inclure un fichier en dehors de l'application (guerre) en utilisant jsp include

Remarque: J'ai créé un contexte pour le dossier où le fichier statique est enregistré et je peux afficher le fichier html avec l'URL directe.

S'il vous plaît aider ..

Répondre

11

J'ai résolu ce problème en utilisant le c: import.

Pour définir l'URL dynamique que je l'ai utilisé la fève: définir balise. Merci amis pour les suggestions et l'aide.

+0

Utiliser le préfixe de protocole: "file: /// $ {votre chemin de fichier}" –

+0

@EdgardLeal Je suppose que l'utilisation du protocole 'file' attend que le fichier se trouve dans l'ordinateur client. 'c: import' l'a résolu pour moi. –

3

Vous ne pouvez utiliser jsp:include pour les ressources dans le contexte de votre application web. Vous devrez utiliser java.io.File ou similaire pour charger à partir d'un chemin de système de fichiers ou ClassLoader.getResource pour charger une ressource à partir du chemin de classe.

+0

Salut Peter Hilton, merci pour les suggestions. J'ai utilisé la balise c: import pour résoudre ce problème. –

0

Juste par intérêt - quelle est la raison de vouloir faire cela? - il peut y avoir une approche alternative.

Je suppose que vous voulez avoir une configuration indépendante du fichier WAR et unique à chaque environnement dans lequel le fichier WAR est déployé.

+1

Salut Belugabob, J'ai tous les JSPs en guerre et je veux inclure un fichier html statique (disons quelque chose comme helpcard) dans le fichier JSP. J'ai ces fichiers html sous un autre contexte en dehors du fichier war. J'ai résolu ce problème en utilisant c: import –

2

ajoutée de la méthode <c:import> est que vous pouvez définir l'encodage en utilisant l'attribut charEncoding. Vous ne pouvez pas le faire avec les instructions <%@include%> ou <jsp:include>.

1

J'utilisant une classe qui ont une méthode pour obtenir le contenu de l'URL: 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; 
} 
Questions connexes