- PR -

ServletからJSPにパラメータを渡す方法について

投稿者投稿内容
みーちく
大ベテラン
会議室デビュー日: 2002/08/29
投稿数: 131
投稿日時: 2003-08-11 11:08
こんにちわ。
みーちくと申します。

早速なんですが、下記のようなソースがあります。
Servletから、getRequestDispatcherでJSPにパラメータを渡しています。
この時点でSystem.out.println(error_message);としたところ、ちゃんとエラーメッセージ
が入っているのですが、error.jspに表示される文字は「null」となります。
今回の開発では、sessionを使わない方式なので、受け取ったパラメータを
そのままJSPに渡したいと考えております。
皆様、ご教授願います。

コード:
package Search;

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Search_Main extends HttpServlet {

   public void doGet (HttpServletRequest req, HttpServletResponse res) 
      throws ServletException, IOException{
      doPost(req, res);
   }
   
   /**
    * メインサーブレット
    */
   public void doPost (HttpServletRequest req, HttpServletResponse res) 
      throws ServletException, IOException{
      
         String client_cd    = UnicodeString(req.getParameter("client_cd"));
         String error_message = "";
         if(client_cd == null || client_cd.equals("")){
            error_message+= "得意先コードを入力して下さい。";
         }
         
         if(error_message.equals("") == false){
            req.getRequestDispatcher("/Search/error.jsp?error_message=" + 
               error_message+ "").forward(req, res);
         } else {
            req.getRequestDispatcher("/Search/list.jsp").forward(req, res);
         }
      }
   }
   
   /**
    * 日本語文字化け対応
    */
   private String UnicodeString(String s) throws UnsupportedEncodingException {
         return new String(s.getBytes("8859_1"), "JISAutoDetect");
   }

   /**
    * サーブレットの破棄
    */
   public void destroy(){
   }

}


error.jsp
<%@ page contentType="text/html; charset=Shift_JIS" import="java.util.*" %>
<%
   String error_message = request.getParameter("error_message");
   if(error_message != null && error_message.equals("") == false){
      // 文字コード変換
      error_message = new String(error_message.getBytes("8859_1"),"Shift_JIS");
   }
%>
<html>
<head>
<title>エラー画面</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<script Language="JavaScript" src="../main.js"></script>
</head>
<body>
<center>
<form method="POST">
<input type="hidden" name="scr" value="ERROR" />
<table border="0" cellpadding="1" cellspacing="1" width="400">
<tr>
<td>
<dl>
<dt>入力された内容に対して次のようなエラーが発生しました。<br>
</dl>
</td></tr></table>
<table align="center" cellpadding="2" cellspacing="2">
<tr>
<td><br><font color="red"><ul>
<%= error_message %>
</ul></font></td>
</tr>
<tr><td align="center">
<br><INPUT type="button" value=" 戻る " onClick="history.back(-1)" /></td></tr>
</table>
<!-- form end -->
</form>
</center>
</body>
</html>

ニシトミ
ベテラン
会議室デビュー日: 2003/04/24
投稿数: 76
お住まい・勤務地: 千葉・東京
投稿日時: 2003-08-11 11:20
こんにちは
お盆休み出社のニシトミです

こういう場合は
HttpServletRequestの
setAttributeを使用します
みーちくさんが
Sessionを使用したことがあるのなら
同じシグニチャー?でできます。
この場合ですと

req.setAttribute("errorMessage",error_message);
をディスパッチする前に埋め込み
jsp側で
request.getAttribute("errorMessage");
をすればいいのです。
みーちく
大ベテラン
会議室デビュー日: 2002/08/29
投稿数: 131
投稿日時: 2003-08-11 11:41
ニシトミさん

早速の返答ありがとうございます。
また、休日出勤ご苦労様です。

ニシトミさんがおっしゃっているのは、
application.setAttributeの事ですよね。
たしかに、このやり方だと、ちゃんとパラメータは渡せました。

下記のような書き方だと、パラメータは渡せないのでしょうか?
ちょっと疑問です。

コード:
req.getRequestDispatcher("/Search/error.jsp?error_message=" + 
error_message+ "").forward(req, res);


taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2003-08-11 12:02
引用:

みーちくさんの書き込み (2003-08-11 11:41) より:
ニシトミさんがおっしゃっているのは、
application.setAttributeの事ですよね。


 え、間違ってませんか?
JSPのapplication変数はServletContextクラスです。

ニシトミさんは
引用:

HttpServletRequestの
setAttributeを使用します


とおっしゃっています。
これはJSPではrequest変数に相当します。

引用:

下記のような書き方だと、パラメータは渡せないのでしょうか?
ちょっと疑問です。

コード:
--------------------------------------------------------------------------------

req.getRequestDispatcher("/Search/error.jsp?error_message=" +
error_message+ "").forward(req, res);


--------------------------------------------------------------------------------


 上記ならJSPで
String message = request.getParamter("error_message");
というようにすれば取れます。
でもこれだと文字列しか渡せませんよね。
ニシトミ
ベテラン
会議室デビュー日: 2003/04/24
投稿数: 76
お住まい・勤務地: 千葉・東京
投稿日時: 2003-08-11 12:04
どうもお疲れ様です
引用:

application.setAttributeの事ですよね。



いいえrequestですrequest.setAttributeでいけると思います。
みーちくさんが仰っているようなこともできるとは思いますが
あまり一般的ではないような気もするのですが、私だけ?
パラメータを渡すよりrequest.setAttributeとしても大差はないと
思いますが、

スコープ属性は
request、page、session、、application と順に大きく?なっていきますので
application.setAttributeでは、やりたいことがずいぶん違ってしまうと思うので
ご注意してください
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2003-08-11 12:07
引用:

下記のような書き方だと、パラメータは渡せないのでしょうか?
ちょっと疑問です。

req.getRequestDispatcher("/Search/error.jsp?error_message=" +
error_message+ "").forward(req, res);




こんにちわ。

requestはservletへの処理要求時に1回だけ発行されて
jspへはそのrequestを流しているだけなので、上記のような
requestの追加発行はできないのではないでしょうか?

少なくともgetRequstDispatcherの引数はそういう意味合い
でのURLではない気がします。

sendRedirectとかだったら行けるような。

すいません、むちゃくちゃ間違ってるかも。
みーちく
大ベテラン
会議室デビュー日: 2002/08/29
投稿数: 131
投稿日時: 2003-08-11 12:08
takuさん

返信ありがとうございます。
すっかり、勘違いしておりました。

>上記ならJSPで
>String message = request.getParamter("error_message");
>というようにすれば取れます。
>でもこれだと文字列しか渡せませんよね。
takuさんのやり方で、一度トライしてみたのですが、文字が全て「null」と表示されて
しまいました。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2003-08-11 12:10
引用:

takuさんの書き込み (2003-08-11 12:02) より:

上記ならJSPで
String message = request.getParamter("error_message");
というようにすれば取れます。
でもこれだと文字列しか渡せませんよね。



こんにちわ。

あれ、でもみーちくさんはこれでnullになってしまったんですよね?

違うのかな?

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