Domanda

Stiamo ospitando un sito per un cliente e vogliono che includiamo l'intestazione che hanno sul loro server nelle pagine che stiamo ospitando. Quindi ogni volta che lo cambiano, cambierà automaticamente sul nostro sito.

Stiamo tentando di utilizzare il " include " tag nel nostro codice JSP. Il codice che stiamo usando è il seguente:

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

Abbiamo anche provato

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

Purtroppo questi non funzionano per noi. Quello che sembra accadere è che il codice cerca SOLO localmente questo file e non sembra mai andare & Quot; fuori da & Quot; per cercarlo.

Siamo in grado di estrarre l'intestazione nella nostra pagina quando utilizziamo un iframe ma a causa del modo in cui l'intestazione è costruita / codificata il mouse sui menu a discesa non funziona come dovrebbero quando usiamo l'iframe. I menu a discesa sono & Quot; in cascata & Quot; sotto il resto del contenuto della pagina e non siamo riusciti a portarlo li al " top " ;.

Come soluzione temporanea, stavano ospitando l'HTML sui nostri server.

Qualche idea?

È stato utile?

Soluzione

Se scegli di farlo in Java, è bello e facile usare HttpClient di 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 "";
  }
}

Per una soluzione rapida e sporca, il tuo JSP puoi chiamare direttamente questo metodo. Puoi, ovviamente, creare un tag taglib per chiamare il metodo se preferisci.

Potresti voler cambiare il meccanismo di timeout e riprovare per HttpClient. Per impostazione predefinita, proverà automaticamente fino a un massimo di 3 volte con ogni tentativo che scade dopo 30 secondi.

Tuttavia, probabilmente vorrai esaminare la memorizzazione nella cache delle stringhe per un periodo di tempo adeguato. Non vuoi davvero fare 2 richieste HTTP esterne bloccanti per ogni pagina di accesso al tuo sito.

Altri suggerimenti

JSP include non supporta l'inclusione di file remoti, motivo per cui è necessario un URL relativo: http://java.sun.com/products/jsp/syntax/1.2/syntaxref1214.html

Suggerisco di scrivere una funzione che apre una connessione a quella pagina e scarica i contenuti e quindi li stampa sul proprio flusso out. Quindi puoi inserire quella funzione in un file locale e solo include quello.

Che ne dici di usare la libreria core JSTL e fare:

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

Dovrebbe essere in grado di includere contenuti remoti al momento della richiesta.

Le JSP incluse non sono pensate per funzionare in questo modo con server esterni. Ecco un modo completamente orribile per risolvere il tuo problema, ma è stata l'unica opzione per me in una situazione simile. Scrivi una classe per analizzare effettivamente l'html da quel sito, quindi stampalo. Vorrei aggiungere che ogni volta che farai qualcosa del genere, è sempre una buona idea disporre di una sorta di meccanismo di autenticazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top