- PR -

フレーム化したJSPからのrequestについて

1
投稿者投稿内容
ringo
会議室デビュー日: 2006/05/12
投稿数: 16
投稿日時: 2006-06-07 14:16
いつも参考にさせていただいております。
過去ログ等を調べたのですが、同様の事象がなかったので
新規に質問させていただきます。

2つにフレーム分けしてあるうちの1つのjspからServletに要求を投げると
ちゃんと呼ばれない、という事象が発生しており、悩んでいます。

LoginServlet.java
Login.jsp
ListFrame.jsp
 + list_menu.jsp
 + list_body.jsp


主要機能としては上記5つのファイルから成り立っており、
http://localhost:8080/project/LoginServlet
にアクセスすると
@ログイン画面を表示する
A「ログイン」ボタンを押すとListFrame.jspを表示する
BListFrameで表示されているList_body.jspから、「戻る」ボタンを押すとログイン画面に戻る

簡単に言うと上記のような処理をさせたいのですが、
Bの戻るボタンを押下すると、画面に

The requested resource (/project/jsp/LoginServlet) is not available.

というエラーが表示されます。
Systemログは出ていません。

試しにAでList_Frameではなく、List_body.jspを直接呼び出すようにすると
画面表示とBの戻るボタンの実行まで成功することが分かりました。

そこで、println文を使ってログを出して、何が原因なのか探っていたところ
フレームとなっている List_frame.jspを表示させる時点で、フレーム分けしていない
画面を呼ぶ時とログがすでに違っていることが分かりました。


Jspで表示する処理がどう挟まれるか知りたかったので、 List_body.jsp 側に
<% System.out.println("■■■List_body.jspの処理■■■"); %>
というログを出させるようにしておき、

LoginServlet.javaにも以下のようにログを出すところを作って実行してみました。


【LoginServlet.java】
package loginManager;
import java.io.IOException;
import java.util.Date;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* LoginServletクラス
*/
public class LoginServlet extends HttpServlet {

  /**
   * service()メソッド
   * クライアントからリクエストがあると、必ず実行されるメソッド
   */
  protected void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

    RequestDispatcher rd = null;

    //押されたボタン名を取得します。
    String submitValue = request.getParameter("submitValue");
    //ページ名を取得します。
    String pageName = request.getParameter("pageName");
    System.out.println("--- [pageName] =" + pageName);
    System.out.println("--- [submitValue]=" + submitValue);
    

    //初期画面表示
    if (submitValue == null) {
      System.out.println("--- ログイン画面表示");
      rd = this.getServletContext().getRequestDispatcher("/jsp/login.jsp");
    } else {
      //値をエンコーディングします
      //submitValue = new String(submitValue.getBytes("8859_1"), "JISAutoDetect");
      
      //****************************************************************************
      //*******リクエストしてきたページがlogin.jspの場合****************************
      //****************************************************************************
      if (pageName.equals("login")) {

        System.out.println("--- ログイン画面からの要求");
        //ログインボタンが押された場合        
        if (submitValue.equals("LOGIN")) {
            rd = this.getServletContext().getRequestDispatcher("/jsp/list_frame.jsp");
            //rd = this.getServletContext().getRequestDispatcher("/jsp/list_body.jsp");
          }
          
          System.out.println("★ 表示1");
        }
        System.out.println("★ 表示2");
        
        
      //****************************************************************************
      //************** リクエストしてきたページが list_body.jspの場合
      //****************************************************************************
      }else if (pageName.equals("list_body")) {

        System.out.println("★★★ list_bodyからの要求");
        System.out.println("★★★ ログイン画面表示するよ");
        rd = this.getServletContext().getRequestDispatcher("/jsp/login.jsp");
        
      }
      System.out.println("★ 表示3");
    }
    System.out.println("★ 表示4");
    System.out.println("--- 画面表示GO!" + rd.toString());
    request.setAttribute("loginbean", loginbean);

    // 画面を表示
    try{
      rd.forward(request, response);
      System.out.println("★ 表示5");
      
    }catch(Exception e){
      System.out.println("★ 画面表示エラー");
      System.out.println("★ " + e.toString());
      System.out.println("★ " + e.getStackTrace());
      e.getStackTrace();
      System.out.println("[LoginServlet]-[service] " + " END");
    }
    System.out.println("★★★ リクエスト処理終了 ★★★");
    System.out.println("[LoginServlet]-[service] " + " END");
    
  }
}


【Aまで実行したときのログの違い】

List_frame.jspを呼んだ場合
★ 表示1
★ 表示2
★ 表示3
★ 表示4
--- 画面表示GO!org.apache.catalina.core.ApplicationDispatcher@1f9338f
★ 表示5
★★★ リクエスト処理終了 ★★★
■■■List_body.jspの処理■■■



List_body.jspを呼んだ場合
★ 表示1
★ 表示2
★ 表示3
★ 表示4
--- 画面表示GO!org.apache.catalina.core.ApplicationDispatcher@1000bcf
■■■List_body.jspの処理■■■
★ 表示5
★★★ リクエスト処理終了 ★★★
[LoginServlet]-[service] END





となっているのです。
フレームを呼ぶとサーブレットとしての処理が完結した後、jspの処理が始まり、
直接List_body.jspを呼ぶと jspの表示処理が終わってからサーブレットに
処理が戻るようになっています。

これが問題の原因なのだろうか?と考えているのですが、
どなたかご教示願えないでしょうか?

長文申し訳ありません。


[ メッセージ編集済み 編集者: ringo 編集日時 2006-06-07 14:22 ]
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2006-06-07 14:48
 これはDBの問題ではないでしょう・・・。
Javaですから「Java Solution」に投稿すべきです。
戻るを押したときに、フレーム事態をログイン画面へ遷移させればよいだけでは?
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-06-07 15:43
あのー…。

http://www.javaroad.jp/bbs/answer.jsp?q_id=20060523163719840

この続きですよね(^_^;
どうもリクエストされる際の階層を、理解できていないだけのような気がします。
ringo
会議室デビュー日: 2006/05/12
投稿数: 16
投稿日時: 2006-06-07 15:55
takuさん。
コメントありがとう御座います。
というか、DBスレの皆様、申し訳ありませんでした。
私の確認不足でした。
改めてJava側に投稿させていただきます。
ご指摘ありがとうございました。
※本当は戻る以外の処理をやりたかったのですが、まずは他のJsp画面に遷移
出来るとっかかりから試してみたかったのです。
説明不足ですみません。

mioさん。
コメントありがとう御座います。

引用:

http://www.javaroad.jp/bbs/answer.jsp?q_id=20060523163719840
この続きですよね(^_^;
どうもリクエストされる際の階層を、理解できていないだけのような気がします。



はい。続き・・・です。
私の中では違う問題と思ってしまったのでまたコチラに質問させて
いただいたのですが、階層等の理解が不十分なのが根本的な原因というご指摘は
その通りかもしれません。
皆様には貴重な時間を割いてご教示いただいており、私も自分なりに
勉強はしているのですが、まだ思い通りの処理が出来ず悩んでおります。
またJavaスレに同様の質問を挙げさせていただこうかと思っているのですが
その前にもう一度階層の勉強をしてみてからにします。
もし、参考になるURL等ありましたらご教示いただけると大変嬉しいです。

すみません。失礼致しました。

[ メッセージ編集済み 編集者: ringo 編集日時 2006-06-07 16:03 ]
1

スキルアップ/キャリアアップ(JOB@IT)