サーブレットで定義された文字列をJSPに渡して表示させるようにしたいのですが、
サーブレットからJSPへのデータの渡し方がよくわかりません。

参考書やWEBカンファレンスなどのサンプルを見るとすべてサーブレット、Beans、JSPの連携ばかりです。
そもそもサーブレットとJSPだけのWEBアプリケーションは作れないのでしょうか?
もしくは、Beansを使用したほうが何かと効率がいいからなのでしょうか?
どなたか是非教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

質問で書かれている Beans とは、EJB を指しているのですか?


それとも session で受け渡すときに使う jsp:useBean を言っている
のでしょうか?

> そもそもサーブレットとJSPだけのWEBアプリケーションは作れないのでしょうか?

そんなことはないです。Servlet だけでも、JSP だけでも WEBアプリケーションは
作成できます。それぞれ得意とすることがあるだけの話。


> サーブレットからJSPへのデータの渡し方がよくわかりません

session 経由で渡すことになります。

例えば、String なデータを渡す場合には、Servlet の方で、

HttpSession session = request.getSession(true);
String str; // ※ これを渡す
  ...
session.setAttribute("data", str);

とやり、JSP に forward します。JSP の方では、

<%
String str;
str = (String)session.getValue("data");
%>

って感じで受け取れます。
    • good
    • 0
この回答へのお礼

なるほど、sessionを使うんですね。
この場合だと、JSP側に <jsp:useBeans ... >
は、いらないんですよね?

ありがとうございます。

お礼日時:2001/08/22 10:01

なぜBeanを使用するのか。


作っているうちに分かります。
ソースは、どんどん肥大化していきます。
そうすると、面倒な部分や決まりきった部分は外だししたくなります。

おのずと、ユーティリティ系のメソッドを一つにまとめたBeanや、
データの固まりをBeanにしたgetter、setterを持つBeanを作りたくなります。

たとえば、DBのレコードを一つのBeanにして、そのままsessionにくっつけて
JSPに送り出したり・・とってきたDBのレコードをエラーチェックして、ブランクと0を置き換えたり、文字列の数字をintにしてみたり、intとStringと両方取得できるメソッドを付け加えたり。

この本はとてもBeanの重要性を教えてくれるし、オブジェクト指向の考え方をとても分かりやすく伝えてくれるので、是非読むことをお奨めします。

Javaの格言―より良いオブジェクト設計のためのパターンと定石
ナイジェル ウォーレン (著), Nigel Warren (原著), フィリップ ビショップ (著), Philip Bishop (原著), 安藤 慶一 (翻訳)ピアソン・エデュケーション ; ISBN: 4894711877

AMAZONのURLは下記

参考URL:http://www.amazon.co.jp/exec/obidos/ASIN/4894711 …
    • good
    • 0
この回答へのお礼

オブジェクト指向の真の目的であるリソースのコンポーネント化ですね。
構造化でいうところの共通モジュールを作るという感覚と同じことなんでしょうか。

Beansについての理解を深めたいと思っていたので、
紹介していただいた本を読んでみたいと思います。

ありがとうございました。

お礼日時:2001/08/22 10:20

こんにちは。



いつも教えてもらってばかりなので
知っている範囲のことだけ記入させていただきます。

Servlet+JSPのサンプルは以下のものを
参考にしました。
お役にたてれば幸いですが。。。

1.JAVAPRESS VOL.17

2.参考URL参照

参考URL:http://www-6.ibm.com/jp/software/groupware/tips/ …
    • good
    • 0
この回答へのお礼

IBMの樋口研究室のページは非常に参考になりました。
これで一通り理解できたかと思います。
これからも大いに活用していきたいです。
回答ありがとうございました。

お礼日時:2001/08/22 10:07

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QFreeBSD Apacheの環境でサーブレットやJSPは使用できますか?

 Javaについての質問ですが
FreeBSD Apacheの環境でサーブレットやJSPは使用できますか?
FreeBSD Apacheの環境でのサーブレットやJSPの実装は存在しますか、という質問です。
Javaに詳しい方、どうかよろしくお願いいたします。

Aベストアンサー

FreeBSD上でサーブレットやJSPを動かすためには、
・Tomcatなどのアプリケーションサーバ(Javaサーバ)
・JVM(Java実行環境)
が必要です。

TomcatはJavaで書かれているためプラットフォーム非依存なので○○版、というのはありません。
(配布ファイルの圧縮形式でZip版とtar.gz版とWindows向けインストーラつきのexe版がありますが、中身のTomcat本体はどれも同じのはずです。)

次にFreeBSD用のJava実行環境ですが、次のところから入手できるようです。しかしSunのJVM仕様とどのくらい互換性があるのかわかりませんので、Tomcatが正しく動作するかというと、私にはわかりません。

参考URL:http://www.freebsd.org/ja/java/

QJSPとサーブレットとBean

とある参考書には
サーブレットからBeanを呼び、Beanからデータベースに接続して
JSPで表示する。と書かれています。
しかし、とあるサイトには
JSPファイルだけでデータベースに接続できるソース、
Beanを使用しなくてもデータベースに接続できるというソースが書かれていました。
Beanとは一体何なのでしょうか。と思うようになりました。JSPやサーブレットで接続することができるのであれば、Beanは不要なのでは?と思っています。
今、「Beanはデータベースに接続するだけのもの」としか理解できてなく、いまいちはっきりとしません。
Beanとは一体何なのでしょうか。
意見や参考できるサイトを教えていただけませんか、
よろしくお願い致します。

Aベストアンサー

Beanとは
汎用的に利用できる部品(クラス)で
下請けとして呼び出します。
だから必ず必要というわけではありません。

DB Beanはデータベースに接続するもので
呼び出すだけでその処理をしてくれます。

参考URL:http://msugai.fc2web.com/java/servlet/JavaBeans.html

QApache環境でJavaサーブレットを動かすのには?

Windows2000のマシンに「Apache for Win32(Ver1.3)」と「JDK1.3」をインストールし、
そのサーバで実際にJavaサーブレットで作成したページを表示させようとしました。
しかし、サーブレットのソース(****.java)を「javac」でコンパイルしたところ、
エラーが発生して、うまく動作されませんでした。
雑誌にあったサンプルをコンパイルしたので文法的には当たっているので、
問題は環境にあるように思えるのですが、他にインストールするものはあるのでしょうか?

Aベストアンサー

サーブレットのコンパイルには、JDKとは別に、JSDKが必要です。
また、サーブレットを実行するのも、確か、Apacheだけでは無理です。
(昔は無理でした)
で、JRun、Apache JServ等のサーブレットエンジンと呼ばれるものを
インストールする必要があります。
(Tomcatを入れるのがいいのかな?)

QJSPとサーブレットの連携

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("windows-31j");
response.setContentType("text/html;charset=windows-31j");
PrintWriter out=response.getWriter();
request.setCharacterEncoding("windows-31j");
String st = request.getParameter("ti");
String s2 = request.getParameter("ho");
String s3 = request.getParameter("ke");
Connection con = null;
ResultSet rs = null;
Statement stmt = null;
try {
String url = "jdbc:mysql:///o?user=&password=2&useUnicode=true&characterEncoding=windows-31J";
con = (Connection) DriverManager.getConnection(url);
stmt = (Statement) con.createStatement();
String sql = "INSERT INTO o_tb(tiiki,houmon,keiyaku) VALUES('" + request.getParameter("ti")+ "','" + request.getParameter("ho")+ "','" + request.getParameter("ke")+ "') ";
int rss=0;
rss = stmt.executeUpdate(sql);
}catch (SQLException e){
out.println("SQLException:" + e.getMessage());
}

JSPから上記のサーブレットに値を渡し、DB格納までは上手くいきました。
ですが当然上記だと真っ白なサーブレットページが表示されるだけです。
JSPのボタンを押し→サーブレットでDB格納したら、またJSPページを表示させたいんですが、どうしたらいいですか??

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("windows-31j");
response.setContentType("text/html;charset=windows-31j");
PrintWriter out=response.getWriter();
request.setCharacterEncoding("windows-31j");
String st = request.getParameter("ti");
String s2 = request.getParameter("ho");
String s3 = request.getParameter("ke");
Connection con = ...続きを読む

Aベストアンサー

RequestDispatcher クラスを勉強してください。

これはサーブレットとJSPを連携させるクラスで、
サーブレット&JSPの基本中の基本です。

使い方はネットに解説が溢れてます。

それでは

Qサーブレットforward時の実行メソッドについて

初歩的な質問で失礼します。

サーブレットAに doGet, doPost, serviceメソッドを実装しています。
サーブレットBのdoPostメソッド内にて
サーブレットAにforwardを実行する場合に、
呼出されるのはサーブレットAのどのメソッドですか?

JSPへのforwardはできたのですが、
サーブレットへのforwardができず悩んでいます。

サーブレットのAPIを読んでもいまいちわかりません。
何かメソッドに関する制約があるのでしょうか?
上の質問は全くマト外れでしょうか?

追加ですが・・・
サーブレットからforwardされたサーブレットで、
そこからさらにJSPへforwardすることはできますか?

Apache2.0.43+tomcat4.1.12+Java1.4.0_01です。

Aベストアンサー

> サーブレットBのdoPostメソッド内にて
> サーブレットAにforwardを実行する場合に、
> 呼出されるのはサーブレットAのどのメソッドですか?

doPost() のはず。実際には、forward するときの HttpServletRequest#getMethod() で取得できる文字列に従うはず。

> JSPへのforwardはできたのですが、
> サーブレットへのforwardができず悩んでいます。

forward に関して、servlet と JSP の違いはないはず(というか、JSP は自動コンパイルされる servlet だし)。
getRequestDispatcher() してるパスが間違っているのだと思います。

> サーブレットからforwardされたサーブレットで、
> そこからさらにJSPへforwardすることはできますか?

コンテナの実装次第だけど、forward() は、サブルーチン呼び出しと変わらないはずなので、
回数に制限はないはず。

Qサーブレット-サーブレットの通信で文字列を送りたいのですが

サーブレット間の通信で文字列(String)を送りたいのですが
うまく受け取れません。
URLEncoder.encodeをつかって変換して送り、
URLDecoder.decodeで受けとってます。お願いします。

Aベストアンサー

具体的に、どうなってしまうのかが分からないと、答え様がないですね。

(1)最初の文字列
(2)URLEncoder.encodeの結果
(3)URLDecoder.decodeの結果
が提示されていると、有力なヒントになるはず。差し支えなければご提示を。

Qサーブレットを動せるレンタルサーバについて

サーブレットを動せるレンタルサーバについて

現在、ロリポップ(チカッパプラン)という月額500円程度の(PHPやMySQLが使える)レンタルサーバを借りていますが、共用サーバですのでサーブレットが動かせないです。(tomcatやJDKをインストールすること自体不可能)

そこでレンタルサーバでサーブレットを動かそうとする場合、高価な専用レンタルサーバを借り、
tomcatのインストールやJDKの設定を全部自分でやらないといけないのでしょうか?
最初から既にサーブレットが動く環境(Apache+tomcat)がデフォルトで用意されすぐに利用できるようなレンタルサーバは通常ないものでしょうか?

現在、ローカル環境を2つ構築しており、(2)のようなサーブレットが動作する環境が最初から整ったレンタルサーバがないものかと考えています。
普通はレンタルサーバを借りてサーブレットを動かそうとすれば、tomcatやらJDKやら自分で専用サーバにインストール&設定するものなんでしょうか?それ以外に手法はありますか?

ローカル環境は2つ構築していています。
(1) windows7 Xampp(Apache2.2+tomcat7連携)JDK6
(2) 自宅サーバ:centOS5.6 Apache2.2+tomcat5.5連携 JDK5 

サーブレットを動せるレンタルサーバについて

現在、ロリポップ(チカッパプラン)という月額500円程度の(PHPやMySQLが使える)レンタルサーバを借りていますが、共用サーバですのでサーブレットが動かせないです。(tomcatやJDKをインストールすること自体不可能)

そこでレンタルサーバでサーブレットを動かそうとする場合、高価な専用レンタルサーバを借り、
tomcatのインストールやJDKの設定を全部自分でやらないといけないのでしょうか?
最初から既にサーブレットが動く環境(Apache+tomcat)がデフォル...続きを読む

Aベストアンサー

最初から環境が整ってるというわけではありませんが最近は比較的安価にVPSが提供されてますが、それではダメなんでしょうか?

Qサーブレットで使用しているBeanを通常のJavaプログラムで再利用したい

サーブレットで使用しているBeanを通常のJavaプログラムで再利用したいと考えています。

通常のJavaプログラムというのは
サーバにtelnetログインし javaコマンドで実行するプログラムを指します。

サーブレット側では、
JDBCを利用したコネクションプーリング(JavaBean)を使用しています。
通常のJavaプログラムでも、このBeanをimportして使用したいのですが、

実行時エラーとして、
Exception in thread "main" Backend start-up failed:FATAL:
Sorry, too many clients already

とエラー表示されます。
DBは postgres を使用しています。
使用するために必要な設定等わかりましたら教えてください。

コネクションプーリング(JavaBean)全文を記載したかったのですが、
字数制限に引っかかりましたので省略します。
必要あれば補足に記載します。

Aベストアンサー

> 通常のJavaプログラムでも、このBeanをimportして使用したいのですが

javaコマンドで実行する場合もプーリングが起こっているんですね。
では、Tomcat起動後は、コマンドラインでのpostgresへの接続は可能なのでしょうか?

> コネクションプーリングと同時接続件数とはどういう関係でしょうか?

ただ単にpostgresの同時接続数にプーリングのmax設定が合わせてあるだけだと思います。
プーリングのmax設定のほうが大きければTomcatnoログにエラーが出力されるでしょうし、小さければ上記のコマンドラインでの接続は可能だと思います。
イコールならば、ログ出力はないし、コマンドラインでの接続もエラーとなるはずです。

QJava サーブレット間の値の受渡について

こんにちは

サーブレットAからサーブレットBへ値を渡して、
サーブレットAで、戻り値を取得したいと考えています。

条件としては、
・サーブレットBの改修はできない
・サーブレットBへはGet,Postで値を渡すことができ、
戻り値を数値で貰える
というものです。

サーブレットA側からサーブレットBへリダイレクトするやり方はわかったのですが、それだと処理が完全にサーブレットBに移ってしまい、戻り値に応じた処理がサーブレットA側で行えないのです。
一般的なプログラミングのように、コールして戻り値に応じて処理を分ける・・といったことは出来ないのでしょうか?

Aベストアンサー

サーブレットAからBへリダイレクトしたのでは、そのままページを移るだけですからお望みのような働きにはなりません。

どうしてもというなら、サーブレットAの中から、URLConnectionでサーブレットBに接続をし、結果を受け取って処理する、というような形になるかと思います。要するに、サーブレットAの内部から、HTTPでサーブレットBにアクセスするわけです。

QサーブレットからBeanを呼び出すやり方

AccessのDB接続部分をjava Beanで作成し、それをサーブレット側から呼び出して実行したいのですが、サーブレットからBeanを呼び出すやり方がわかりません。
またBeanのプログラムは

http://www.atmarkit.co.jp/fjava/rensai/smartj02/smartj02_1.html#ap01

に書かれているものとほとんど変わらないものです。
初歩的な質問かと思いますがよろしくお願いします。

Aベストアンサー

EJBじゃなかったら、new して呼び出すだけじゃないの?
ダメ?
何を(どんな手段を)試してみましたか?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング