2012-03-20 16 views
0

リクエストを受信し、リクエストのパラメータをチェックする.jspファイルがあります。このJSPファイルと同じディレクトリ内に、エラー処理を行うerror.jspファイルがあります。パラメータがnullの場合、次のようにerror.jspファイルにリクエストを転送します。JSP Forwardはリクエストをフォワーダに送信します

<%@ page language="java" contentType="text/html; charset=UTF-8" 
pageEncoding="ISO-8859-1"%> 

<html> 
    <head></head> 
<body></body> 
<% 
request.setCharacterEncoding("UTF-8"); 
String uid = request.getParameter("uid"); 
String procName = request.getParameter("procName"); 
//param check 
if(uid == null || procName == null){ %> 
<jsp:forward page="error.jsp"/> 
<% }%> 
</html> 

ただし、これは機能しません。フォワードラインの後、私はリクエストをerror.jspの代わりに同じJSPに再提出しました。最終的に、サーバーのサイクルのためにStackOverflowExceptionが発生します。

代わりにJSPの場合:

<%@ page language="java" contentType="text/html; charset=UTF-8" 
pageEncoding="ISO-8859-1"%> 
<html> 
<head></head> 
<body></body> 
<% 
request.setCharacterEncoding("UTF-8"); 
String uid = request.getParameter("uid"); 
String procName = request.getParameter("procName"); 

//param check 
if(uid == null || procName == null){ 
response.sendRedirect("error.jsp"); 
}%> 
</html> 

すべてが正常に動作します:にと私はresponse.sendRedirect()を使用し、転送します。 jsp:forwardが機能しないのはなぜですか? this siteAPIによれば、私は正しいタグを持っています。

PS:JSPはバージョン4.0.5 GAのJBoss ASにデプロイされています。

+0

あなたは本当にJSPでこのロジックを行うべきではなく、サーブレットで行うべきです。 JSPはビューをレンダリングするためのものであり、制御フローを決定するものではありません。あなたは、問題に適切な技術を使用すれば、より予測可能なことがわかります。 – skaffman

+0

@skaffman私は知っています。これがJSPが行う唯一のことではありません。正しいパラメータが設定されている場合、チェックの後に表示されているフォームがあります。私はそれを短くするためにコードをカットしました。 – arin

+0

それはポイントではないです。あなたのJSPは要求を受けておらず、制御フローを決定するべきではありません。フォームをレンダリングするだけです。元のリクエストに誤りがある場合は、* servlet *を 'error.jsp'に転送する必要があります。 – skaffman

答えて

0

StackOverflowErrorのスタックトレースを読み、繰り返しパターンに注意してください。 Filterが含まれていないかどうか確認して、転送された要求を繰り返し傍受し、それに応じてFilterのコードや設定を修正します。たとえば、構成から<dispatcher>FORWARD</dispatcher>を削除するか、Filterがすでにジョブを完了したことを示す要求属性を設定します。

実際、JSPファイルをフロントコントローラとして使用するのではなく、サーブレットとして使用するべきです。新しい洞察を得るには、our servlets wiki pageの例を参考にしてください。基本的な検証とエラー処理についても説明します。

+0

ありがとう!私はJSPだけを保護しようとしていましたが、[this](http://www.jguru.com/faq/view.jsp?EID=471953)だけで十分でした。同様の問題を抱えている他の人には、StackOverflowに[セキュリティ]を設置するための[質問](http://stackoverflow.com/questions/4291545/how-to-put-jsp-in-web-inf)があります。 – arin

関連する問題