ディスパッチャー処理の流れについて
**************************
package dispa;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.*;
public class Action extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException
{
int flag=0;
request.setAttribute("error", "エラーです");
ServletContext sc = getServletContext();
if (flag == 1)
{
request.setAttribute("count","1");
RequestDispatcher disp =
sc.getRequestDispatcher("/servlet/dispa.Login");
disp.forward(request,response);
return;
}
// コンソールコメント1 ここから
System.out.println("Action if文の外");
System.out.println(flag);
// コンソールコメント1 ここまで
RequestDispatcher disp =
sc.getRequestDispatcher("/servlet/dispa.Entry");
disp.forward(request,response);
// コンソールコメント3 ここから
System.out.println("Action Dispatch処理終了ライン");
// コンソールコメント3 ここまで
}
}
**************************
package dispa;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Entry extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException
{
response.setContentType("text/html;charset=Shift_JIS");
PrintWriter out=response.getWriter();
String errorMSG = (String)request.getAttribute("error");
out.println(errorMSG);
// コンソールコメント2 ここから
System.out.println("Entry エラー");
// コンソールコメント2 ここまで
}
}
**************************
package dispa;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Login extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException
{
response.setContentType("text/html;charset=Shift_JIS");
PrintWriter out=response.getWriter();
String Logcount = (String)request.getAttribute("count");
out.println("Login");
// コンソールコメント4 Login ここから
System.out.println("Login内");
// コンソールコメント4 Login ここまで
if (Logcount.equals("1") )
{
out.println("1回目のログインです");
return;
}
}
}
Action からスタート
int flag=0 のときにはif文は実行されず
コンソールコメント1 を表示
ディスパッチャーで Entry へ行き
コンソールコメント2 を表示
その後 コンソールコメント3 を表示 [END]
[質問1]
なぜ、Entryサーブレットへ行ったとき、そこには return などの記述はないのに
(元の)Actionへ戻るのか?
--------------------------------
int flag=1 と可変して同じくAction からスタート
flag=1 のときにはif文は実行され
count を 1 にセット
ディスパッチャーで Login へ行き
コンソールコメント4 を表示
Logcount ←count にて 1なら 「1回目のログインです」 return
[質問2]
なぜ、Loginサーブレットへ行ったとき、そこに わざわざ return の記述をしてるのに
(元の)Actionへ戻らないのか?
この2つの質問です。
同じディスパッチャーで飛ばして 到達先も同じvoid なのですが
片方は(Entry) returnなしでも戻り
もう片方は(Login)は return を付けても戻らない???
よろしくお願いします。