外部でホストされているサイトにヘッダーを含めるにはどうすればよいですか?
-
06-07-2019 - |
質問
クライアント用のサイトをホストしているので、サーバー上にあるヘッダーをホストしているページに含めたいと考えています。したがって、ユーザーが変更するたびに、サイト上で自動的に変更されます。
<!> quot; include <!> quot;を使用しようとしています。 JSPコードのタグ。使用しているコードは次のとおりです。
<!> lt;%@ include file = <!> quot; www.CLIENT.com/CLIENT2/MiddlePageFiles/Vendor_header.html <!> quot; %<!> gt; 。
また試しました
<!> lt;%@ include file = <!> quot; ** http://**www.CLIENT.com/CLIENT2/MiddlePageFiles/Vendor_header.html <!> quot; %<!> gt; 。
残念ながら、これらは機能していません。何が起こっているように見えるのは、コードがこのファイルをローカルで探しているだけで、<!> quot; outside <!> quot;探しに。
iframeを使用するときにページにヘッダーをプルすることはできますが、ヘッダーの作成/コード化方法のため、ドロップダウンメニュー上のマウスが機能しません iframeを使用するときに必要になります。ドロップダウンメニューは<!> quot; cascading <!> quot;です。ページの残りのコンテンツの下にあり、私たちはもたらすことができませんでした それらを<!> quot; top <!> quot;に追加します。
一時的な回避策として、独自のサーバーでHTMLをホストしています。
アイデアはありますか?
解決
Javaでこれを行うことを選択した場合、Apache CommonsのHttpClientを使用すると簡単で便利です。
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 "";
}
}
迅速で汚い解決策として、JSPでこのメソッドを直接呼び出すことができます。もちろん、必要に応じてメソッドを呼び出すtaglibタグを作成することもできます。
HttpClientのタイムアウトと再試行のメカニズムを変更できます。デフォルトでは、30秒後にタイムアウトするたびに最大3回まで自動的に試行されます。
ただし、おそらく適切な期間の文字列のキャッシュを検討する必要があります。サイトへのページアクセスごとに2つのブロック外部HTTPリクエストを作成するのは本当に望ましくありません。
他のヒント
JSPインクルードでは、リモートファイルを含めることがサポートされていないため、相対URLが必要です。 http://java.sun.com/products/jsp/syntax/1.2/syntaxref1214.html
そのページへの接続を開き、コンテンツをダウンロードし、独自のout
ストリームに印刷する関数を作成することをお勧めします。次に、その関数をローカルファイルに配置して、include
それだけを実行できます。
JSTLコアライブラリの使用方法と実行方法:
<c:import url="http://www.CLIENT.com/CLIENT2/MiddlePageFiles/Vendor_header.html" />
要求時にリモートコンテンツを含めることができるはずです。
JSPインクルードは、外部サーバーでそのように動作することを意図していません。ここにあなたの問題を修正する完全に恐ろしい方法がありますが、それは私にとって同様の状況での唯一の選択肢でした。そのサイトから実際にHTMLを解析するクラスを作成し、それを印刷します。このようなことをしようとするときはいつでも、何らかの認証メカニズムを用意することを常にお勧めします。