アプリ版:「スタンプのみでお礼する」機能のリリースについて

**************************
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つの質問です
よろしくお願いします。

A 回答 (1件)

サーブレット+JSPに詳しいわけではありませんが。


基本的にサーブレット+JSPはサーブレットコンテナの配下で動作するはずです。
つまり呼び出し元はTomcatなどのコンテナになるはずです。
質問の(1)ですがJavaでも明示的にreturn文がなくてもメソッドの終端に達すれば呼び出し元に帰ります。ただし、メソッドの型がvoidでないとJavaではエラーになるかもしれませんが(ここは自信ありません)。
質問の(2)ですが、すでに述べたように戻る先はサーブレットコンテナです。

この回答への補足

ご回答ありがとうございます。

同じディスパッチャーで飛ばして 到達先も同じvoid なのですが
片方は(Entry) returnなしでも戻り
もう片方は(Login)は return を付けても戻らない???

簡単な条件分岐なのですが、流れがつかめません。

違う点としては
スタートのActionで if文実行中 Loginへ飛ばす後に return を付けている箇所ぐらいですか。
でもこの return を省くと、500エラーでプログラム自体動かない…
(でも、ここが最重要なポイントな気がしてきました)

もう少し考えてみます。

補足日時:2011/05/18 13:33
    • good
    • 0
この回答へのお礼

新たに質問を設けます。
ありがとうございました。

お礼日時:2011/05/28 11:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!