2011-10-26 21 views
2

私は非常に単純なJSPファイルを持っています。これは多かれ少なかれget変数を表示します。JSPから不正なリクエストを「スロー」する方法

<p>Hello, <%= request.getParameter("name") %></p> 

私はwebpage.jsp?name=Aliceに行くのであれば、私はHello, Aliceを取得したいです。一方、webpage.jspに行くとHello, nullとなります。

name変数が設定されていない場合は、代わりにBad Requestを送信します。サーブレットでは、私はこれを行うでしょう:

response.sendError(HttpServletResponse.SC_BAD_REQUEST); 
    return; 

私は同様にJSPページから行うことができますか?

答えて

4

JSP内に同じコードを<% %>に入れてください。その時点で応答がコミットされていないことを確認する必要があるだけです。それ以外の場合はIllegalStateExceptionに直面します。したがって、すべてのHTMLテンプレートコンテンツが出力される前に、JSPファイルの最上部で呼び出すことをお勧めします。

言うまでもなく、JSPは要求/応答を制御する正しい場所であるnotです。この特定のケースでは、セッションワイドログインに関する場合は、servletまたはfilterのジョブを実行したいとします。さらに、 "Hello"行は<p>Hello, <c:out value="${param.name}" /></p>として実行する方が良いです。メンテナンス性を向上させるだけでなく、XSS攻撃の巨大な穴からサイトを保護します。

+0

c:outを動作させることができませんでしたが、 '<%= StringEscapeUtils.escapeHtml(request.getParameter(" cid "))%>'に変更しました。うまくいけばうまくいきます:) – Svish

+0

JSTLをインストールして(コンテナがサポートしていない場合)、 'c' taglibを宣言してください。インストールと宣言の詳細については、JSTL Wikiのページも参照してください:http://stackoverflow.com/tags/jstl/info(私の答えでサーブレットとフィルタのWikiページのリンクに気づいたことを祈っていますか?) – BalusC

関連する問題