2011-09-22 8 views
1

をレンダリングされていない: How can you check if a file exists before including/importing it in JSP?だから、この質問には、実行する前に、ファイルのチェックを行うには、サーブレットを使用して提案し、追加<jsp:include>年代を返すサーブレット呼び出しを行う<jsp:include>を使用して、彼らは

だから私が書いたのそれを行うサーブレット。

<jsp:include page='<%= "/servlet/fileChecker?section=THX&file=1138" &>'></jsp:include> 

などですが、そのサーブレットコールの出力には、私がチェックしていたファイルにjsp:includeタグが含まれています。残念ながら、ブラウザはそれを「インクルード」しません。私は "サーブレットの出力がJavaとしてではなくHTMLとしてレンダリングされていないことを示唆している"属性 "ページ"と "要素" jsp:include 'undefined'のようなエラーが発生しています。ここで

が出力されます。ここでは

<p>Text before the servlet call</p> 
    <p><h4>From THX1138</h4><jsp:include page='thx/results_1138.jsp'></jsp:include></p> 
<p>Text after the servlet call</p> 

は私のサーブレットの主な呼び出しです:

private String FileChecker(String section, String file) { 
    String result = ""; // assume file does not exist 

    String pathToCheck = section + "/results_" + file + ".jsp"; 
    // realPath is defined in the init() method as config.getServletContext().getRealPath("/"); 
    File fileToCheck = new File(realPath + pathToCheck); 
    if (fileToCheck.exists()) { 
     result = "<p><h4>" + section + "</h4><jsp:include page='" + pathToCheck + "'></jsp:include></p>"; 
    } 

    return result; 
} 

答えは近いように私は感じて、私は何カーテン私がすべきかわかりません後ろを見ている。どんな助け?

+0

'jsp:...'タグはブラウザに含まれていないため、サーバ上で解釈されます。ブラウザはHTMLだけを理解します。あなたの 'fileChecker'はどのように見えますか? – home

+0

それはそのようには動作しません。 'filechecker'の出力は再び解釈されません。 'filechecker'またはその関連部分のコードを表示できますか? – home

+0

トピックを表示:生のサーブレットの使用をやめてください。ストラット、タイル、spring-mvc、jsfなどを使用してください。 – DwB

答えて

0

レスポンスにHTMLタグとJSPタグを含む文字列を書き込まないでください。これは意味がありません。 WebブラウザはJSPタグを理解しません。

代わりにRequestDispatcher#include()と電話してください。

request.getRequestDispatcher(checkedJspPath).include(request, response); 

さらに、そのHTMLをJSPに戻します。具体的な質問への無関係


、私はあなたが私の昔の答えに言及していることを知っている、私はそれがServletContext#getResource()はなくFile#exists()を使用してのnullを返さないかどうかを確認するために、実際に良いでしょうことを実現します。このようにして、WARが展開されていないときでも、それはうまくいくでしょう。

+0

ありがとうございます。 RequestDispatcherを使用できますが、インクルードに加えて追加のHTMLマークアップ(単純な

タグ)がありますか? – Robert

+0

はい、 'include()'の前後でレスポンスに書くことができます。しかしこれはベストプラクティスではありません。 HTMLはサーブレットに属していません。そのHTMLを含む別のラップ・インクルードJSPファイルを検討してください。 – BalusC

+0

もう一度ありがとうございます。私はRequestDispatcherを読んで試してみます。 (あなたは私がこれまで使ったことはないと言えるかもしれません。)多くのありがとう! – Robert

関連する問題