0

次のようなjspページを作成しました。

 <%  Object myName  = session.getAttribute("name"); 
     if(myName == null)
     {   String redirectURL = "http://www.google.com";  
         response.sendRedirect(redirectURL); 
     }
 %>
 <html>  ... some content ... </html>

htmltage内のコンテンツは約100kです。これをコンパイルしてnetbean/glassfishで実行しようとすると、エラーメッセージが表示されます。

constant string too long
out.write("<html>.......</html>

64kの制限があることをどこかで読んだ。しかし、私は「out.write」関数をまったく使用していません。ご覧のとおり、jspセクションは非常に小さいです。これはどのように発生し、どうすれば解決できますか?

私が達成したいのは、最初にセッションが有効かどうかを確認し、有効でない場合はリダイレクトすることです。その場合は、コンテンツを表示します。コンテンツは非常に大きく静的ですが、私はそれを制御できません:(。とにかく私はこれを達成できますか?

4

1 に答える 1

1

しかし、私は「out.write」機能をまったく使用していません

JSPは内部で使用しています。ご存じのとおり、JSP ファイルは「JSP コンパイル」ステップで Java クラス拡張に変換され、HttpServletすべてが Java コードとして終了します。サーバーの作業フォルダーで生成されたコードをチェックアウトして、自分で確認してください。

ランタイム JSP インクルードを使用<jsp:include>して、大きなフラグメントを個別の JSP ファイルに分割します。

例えば

<body>
    <jsp:include src="/WEB-INF/header.jsp" />
    <jsp:include src="/WEB-INF/menu.jsp" />
    <p>Content</p>
    <jsp:include src="/WEB-INF/footer.jsp" />
</body>

または、それが具体的な機能要件に合わない場合、HTML コンテンツが実際に静的である (つまり、JSP スクリプトレット、タグ、式などを含まない) 場合の代替手段は、HTML コンテンツを独自のsome.htmlファイルを作成し、JSTL <c:import>で参照します。

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
...
<body>
    <c:import url="some.html" />
</body>

この方法では、JSP ソース コードの一部にはなりません。


具体的な問題とは関係なく、リダイレクト ロジックにreturnステートメントがありません。リダイレクトを実行すると、残りのすべての JSP コードが呼び出されます。また、すべての JSP ファイルに対してこのスクリプトレットを繰り返す場合、そのジョブにサーブレット フィルターをうまく使用できないかどうか疑問に思うでしょう。

于 2013-01-10T16:58:46.990 に答える