Question

Nous hébergeons un site pour un client et ils souhaitent que nous incluions l’en-tête dont ils disposent sur leur serveur dans les pages que nous hébergeons. Donc, chaque fois qu'ils le changeront, cela changera automatiquement sur notre site.

Nous essayons d'utiliser le " inclure & "; balise dans notre code JSP. Le code que nous utilisons est le suivant:

<% @ include file = " www.CLIENT.com/CLIENT2/MiddlePageFiles/Vendor_header.html " % > .

Nous avons également essayé

<% @ include file = " ** http: //**www.CLIENT.com/CLIENT2/MiddlePageFiles/Vendor_header.html " % > .

Malheureusement, ils ne fonctionnent pas pour nous. Ce qui semble se produire est que le code ne recherche que localement ce fichier et ne semble jamais aller & "En dehors de &"; chercher.

Nous pouvons insérer l'en-tête dans notre page lorsque nous utilisons un iframe, mais en raison de la manière dont l'en-tête est construit / codé, les menus déroulants situés au-dessus de la souris ne fonctionnent pas. comme ils le devraient quand on utilise l'iframe. Les menus déroulants sont & "En cascade &"; sous le reste du contenu de la page et nous n'avons pas pu apporter les sur le & "top &" ;.

Comme solution temporaire, nous hébergeons le code HTML sur nos propres serveurs.

Des idées?

Était-ce utile?

La solution

Si vous choisissez de le faire en Java, il est simple d’utiliser le HttpClient d’Apache Commons.

public static String fetchSourceHtml( String urlString ) {

  try {
    HttpClient httpClient = new HttpClient();
    GetMethod getMethod = new GetMethod( urlString );
    getMethod.setFollowRedirects( true );

    int httpStatus = httpClient.executeMethod( getMethod );

    if (httpStatus >= 400) {
      return "";
    }

    String sourceHtml = getMethod.getResponseBodyAsString();
    return sourceHtml;
  }
  catch (IOException e) {
    return "";
  }
}

Pour une solution rapide et sale, votre JSP vous pouvez appeler cette méthode directement. Vous pouvez bien sûr créer une balise taglib pour appeler la méthode si vous préférez.

Vous pouvez modifier le mécanisme de délai d’expiration et de nouvelle tentative pour HttpClient. Par défaut, il essaiera automatiquement jusqu'à trois fois au maximum, chaque tentative ayant expiré après 30 secondes.

Cependant, vous souhaiterez probablement examiner la mise en cache des chaînes pendant une période appropriée. Vous ne voulez vraiment pas bloquer deux requêtes http externes pour chaque accès de page à votre site.

Autres conseils

Les fichiers JSP inclus ne prennent pas en charge l'inclusion de fichiers distants. C'est pourquoi une adresse URL relative est requise: http://java.sun.com/products/jsp/syntax/1.2/syntaxref1214.html

Je suggère d’écrire une fonction qui ouvre une connexion à cette page, télécharge le contenu puis l’imprime sur votre propre flux out. Ensuite, vous pouvez mettre cette fonction dans un fichier local et juste include cela.

Pourquoi ne pas utiliser la bibliothèque principale JSTL et effectuer les opérations suivantes:

<c:import url="http://www.CLIENT.com/CLIENT2/MiddlePageFiles/Vendor_header.html" />

Cela devrait pouvoir inclure du contenu distant au moment de la demande.

Les fichiers JSP inclus ne sont pas conçus pour fonctionner de la sorte avec des serveurs externes. Voici un moyen complètement horrible de résoudre votre problème, mais c'était la seule option pour moi dans une situation similaire. Écrivez une classe pour analyser le code HTML de ce site, puis imprimez-le. J'ajouterais que chaque fois que vous allez faire quelque chose comme ça, c'est toujours une bonne idée de mettre en place un mécanisme d'authentification.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top