リクエストを受信し、リクエストのパラメータをチェックする.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 siteとAPIによれば、私は正しいタグを持っています。
PS:JSPはバージョン4.0.5 GAのJBoss ASにデプロイされています。
あなたは本当にJSPでこのロジックを行うべきではなく、サーブレットで行うべきです。 JSPはビューをレンダリングするためのものであり、制御フローを決定するものではありません。あなたは、問題に適切な技術を使用すれば、より予測可能なことがわかります。 – skaffman
@skaffman私は知っています。これがJSPが行う唯一のことではありません。正しいパラメータが設定されている場合、チェックの後に表示されているフォームがあります。私はそれを短くするためにコードをカットしました。 – arin
それはポイントではないです。あなたのJSPは要求を受けておらず、制御フローを決定するべきではありません。フォームをレンダリングするだけです。元のリクエストに誤りがある場合は、* servlet *を 'error.jsp'に転送する必要があります。 – skaffman