初歩的な質問ですみません。
下記の環境で、Javaを勉強しています。
教材 :やさしいJava 活用編 Lesson7 Sample6
実行環境:j2sdk1.4.2_06 (教材では、j2sdk-1_4_0)
Tomcat 5.5(教材では、Tomcat-3.2.3)
IE6.0
サーブレットからJavaBeanにデータを渡し、その後
jsp に表示するという流れです。
htmlページにデータ入力後、[送信]ボタンを押すとjspページには何も表示されません。
ログファイルには下記のようなエラーが
記述されています。
勘違いか、何らかの初歩的なミスだと思いますが、解決方法が
見つかりません。解決方法をご存知の方教えて下さい。よろしくお願いします。
org.apache.jasper.JasperException: JSPのクラスをコンパイルできません
JSPファイル: /07/Sample6.jsp の中の2行目でエラーが発生しました
生成されたサーブレットのエラーです:
CarBean cannot be resolved or is not a type
JSPファイル: /07/Sample6.jsp の中の11行目でエラーが発生しました
生成されたサーブレットのエラーです:
CarBean cannot be resolved or is not a type
at org.apache.jasper.compiler.DefaultError
Handler.javacError(DefaultErrorHandler.java:84)
at org.apache.jasper.compiler.ErrorDispatcher
.javacError(ErrorDispatcher.java:328)
・・・・<中略>
Thread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$
ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)
No.4ベストアンサー
- 回答日時:
#3です。
サーブレットからでしたね、どうもすみません。一応、原因も分かり、ちゃんとサーブレットで生成したBeanをJSP側で受け取り、表示することにも成功したのですが、その前に#3で記述したソースの補足をしておきます。
まず初めにSample6.jspに関してですが、追加したコードである<jsp:setProperty>アクションは、今回ではサーブレット側にてBeanを生成するため、不必要と思われるので削除しておいてください。
それと、上の方に記述していたpageディレクティブ内のimport文に関しても、これがなくても正常に動作したので、いらないと思われます。
それから、CarBean.javaの方については、getCarnameメソッドとsetCardataメソッドの二つとも、必ずしも必要というわけではないようです。(これも、先程と同じように、なくてもちゃんと動きました。)これらのプロパティの値を取得したり、もしくは設定する必要がないのであれば、削除しておいても問題はないと思います。setterメソッドやgetterメソッドに関しては、あくまでも必要なもののみ、といった感じですね。
そうすると、ソースプログラムに関しては、またふりだしに戻りますが、バグはこれらとは全然違う所にありました。それは、JavaBeansのクラス内にて、package文の宣言をしていなかったことによります。このことに関して、インターネット上のサイトをいろいろと調べてはみたのですが、残念ながら一番マッチするものが見付かりませんでした。なので、今、僕が愛用しているServlet本「ゼロからはじめるJSP/サーブレット (株式会社四次元データ 畠中晃弘/延原章平 著、アスキームック、2003年12月4日 初版発行)」の第3章-6(101ページの下の方)に書かれてある記述を、ここにそのまま転記しておきます。
「無名パッケージのクラスは、JSPからアクセスすることができません。これは、JSPページから変換されてできるサーブレットプログラムにパッケージが指定されるためです。…(中略)…JSPページから利用するクラスは、必ずパッケージ名を指定するようにしてください。」
要するに、これがJasperExceptionの正体だったということですね。
デバッグの手順としては以下のようになると思います。
・WEB-INFの中のclassesディレクトリ内に、適当な名前(例えば、hoge)のディレクトリを新規に一つ作成する。
・CarBean.java内にて、import文の更に上の方に、「package hoge;」を追加。
・Sample76.java内にて、上の方に「import hoge.*;」を追加。
・コンパイル後、CarBean.classを、先程作成したhogeディレクトリ内に移動する。
・Sample6.jsp内にて、<jsp:useBean>アクション内のclass属性を「hoge.CarBean」に変更する。
一応、この[教えて!goo]内でも、似たような質問がありましたので、以下に載せておきます。
http://oshiete1.goo.ne.jp/kotaeru.php3?qid=619924
それと、質問者さんの方では、サーブレットはきちんとコンパイルされていたとのことですが、年のため、CLASSPATHの設定に関する質問についても、以下に載せておきます。
http://oshiete1.goo.ne.jp/kotaeru.php3?qid=592118
http://oshiete1.goo.ne.jp/kotaeru.php3?qid=382238
それから、Beanの利用についてですが、基本的には、今回のようにclassファイルでの使用よりも、jarファイルにパッケージされたものとして使われることもあるらしいです。具体的には、以下の書籍のTips229の所に、jarコマンドの使用方法などと共に、詳しく載っていますので、そちらの方も参考にされたらと思います。
「サーブレット&JSP 逆引き大全 500の極意 (著者 川崎 克己、株式会社秀和システム、2003年10月21日 第1版第1刷)」
ありがとうございました。
無事、解決しました。
実は、この方法を他のHPで
見つけて試してことがありまして。
その時は、だめでした。
今回、再度試したところ
上手くできました。
もう少し、がんばってみます。
No.3
- 回答日時:
質問者さんの使用されているOSは、Windowsですか?ちなみに、私の方は、Linuxなんですが、そのようなエラーは表示されずに、正常にjspページが表示されましたが…。
ただ、真ん中の方に「のお買い上げありがとうございました。」と表示されるだけで、実際には私の方でもプロパティの値が正しく表示されません。それで、ソースプログラムを2つともちょこちょこっと修正したら、ちゃんとプロパティの値も表示されるようになりました。ポイントは、以下の2点です。
・各プロパティのアクセッサメソッドは、getXxxとsetXxxの両方とも、Java Beanのクラス内に、きちんと定義しておくこと。
・jsp側では、setPropertyアクションの方も忘れずに記述すること。
ちなみに、jsp側に追加したアクションの説明は、以下のようになると思います。
「CarBeanクラスのインスタンスcbにおいて、CarBeanクラス内のプロパティcardataに、リクエストから送信されたパラメータ名cardataの値を設定する」
以下に、修正済みのコードを載せておきます。
<!-- <Sample6.jsp> -->
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ page import="CarBean" %>
<!-- → --> <jsp:useBean id="cb" class="CarBean" scope="request" />
<%-- 追加したコード↓↓↓ --%>
<jsp:setProperty name="cb" property="cardata" param="cardata" />
<html>
<head>
<title>サンプル</title>
</head>
<body>
<center>
<h2>御礼</h2>
<!-- → --> <jsp:getProperty name="cb" property="cardata" />
のお買い上げありがとうございました。<br />
</center>
</body>
</html>
// <CarBean.java>
import java.io.*;
public class CarBean implements Serializable
{
private String carname;
private String cardata;
public CarBean()
{
carname = null;
cardata = null;
}
public void setCarname(String cn)
{
carname = cn;
}
/* 追加したメソッドその1 */
public String getCarname()
{
return carname;
}
/* 追加したメソッドその2 */
public void setCardata(String cd)
{
cardata = cd;
}
public String getCardata()
{
return cardata;
}
public void makeCardata()
{
cardata = "車種:" + carname;
}
}
この回答への補足
回答、ありがとうございました。
早速、修正してみたのですが
やはり同じエラーが出て、
何も表示されません。
OSは、WindowsXPです。
サーブレットを書きます。
よろしくお願いします。
import javax.servlet.*;
import javax.servlet.http.*;
public class Sample76 extends HttpServlet
{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try{
//フォームデータの取得
String tmp = request.getParameter("cars");
String carname = new String(tmp.getBytes("8859_1"), "JISAutoDetect");
//Beanの作成
CarBean cb = new CarBean();
cb.setCarname(carname);
cb.makeCardata();
//リクエストに設定
request.setAttribute("cb", cb);
//サーブレットコンテキストの取得
ServletContext sc = getServletContext();
//リクエストの転送
if(carname.length() != 0){
sc.getRequestDispatcher("/07/Sample6.jsp")
.forward(request, response);
}
else{
sc.getRequestDispatcher("/07/error.html")
.forward(request, response);
}
}
catch(Exception e){
e.printStackTrace();
}
}
}
No.2
- 回答日時:
><%@ page import="CarBean" %> という一行を
>加えてみましたが、やはり同じエラーが出ます。
JSPの2行目と11行目はどうなっていますか?
それかサーブレットからセットしたBeanが取れていないとか…
少なくとも現時点ではこのくらいしか…。
可能ならjspとサーブレットのソースを載せましょう。
載せられない部分があれば適当に伏字にするなどして。
この回答への補足
回答ありがとうございます。
矢印の部分が、エラー行です。よろしくお願いします。
<Sample6.jsp>
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ page import="CarBean" %>
→ <jsp:useBean id="cb" class="CarBean" scope="request" />
<html>
<head>
<title>サンプル</title>
</head>
<body>
<center>
<h2>御礼</h2>
→ <jsp:getProperty name="cb" property="cardata" />
のお買い上げありがとうございました。<br />
</center>
</body>
</html>
<CarBean.java>
import java.io.*;
public class CarBean implements Serializable
{
private String carname;
private String cardata;
public CarBean()
{
carname = null;
cardata = null;
}
public void setCarname(String cn)
{
carname = cn;
}
public String getCardata()
{
return cardata;
}
public void makeCardata()
{
cardata = "車種:" + carname;
}
}
No.1
- 回答日時:
>JSPファイル: /07/Sample6.jsp の中の2行目でエラーが発生しました
>生成されたサーブレットのエラーです:
>CarBean cannot be resolved or is not a type
>JSPファイル: /07/Sample6.jsp の中の11行目でエラーが発生しました
>生成されたサーブレットのエラーです:
>CarBean cannot be resolved or is not a type
↑に原因が書いてありますよ。
「CarBean cannot be resolved or is not a type」
に関してはCarBeanをインポートしてないか何かでしょう。
この回答への補足
Sample6.jsp に
<%@ page import="CarBean" %> という一行を
加えてみましたが、やはり同じエラーが出ます。
サーブレットも正常にコンパイルされているようです。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jspでbeanを使いたいのです...
-
jspからServletを呼び、元のjsp...
-
webアプリを作ってます。エラー...
-
Tomcatの仮想ディレクトリ配置...
-
Servlet-JSP間のhidden要素での...
-
servletからjspへの遷移時に文...
-
jspでの表示の仕方
-
三菱GOTの画面切り替えについて
-
ボタンが活性化の場合とは、ボ...
-
グローバルIPアドレスの変更タ...
-
フォームで同じ複数のnameで違...
-
リクエストに応じたselectedの...
-
フォーム上で押されたボタンに...
-
腕時計の時報をならないように...
-
VB6 開発環境のエディタに行...
-
StrutsでPOSTのデータ(リクエ...
-
C# ログイン画面からメイン画面...
-
Formatでmmが月と分を意味する理由
-
ネット上でのリアルタイム通信...
-
エラーページ遷移後に入力値を残す
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
webアプリを作ってます。エラー...
-
jspからServletを呼び、元のjsp...
-
JSPからJSPへ情報を渡せる?
-
jspでbeanを使いたいのです...
-
Struts:フレーム内JSPからcssフ...
-
Servlet-JSP間のhidden要素での...
-
javascriptでformの送信後、値...
-
JSPのエラー画面(error.jsp)に...
-
WEB-INF直下のフォルダ
-
JSPのソースがみれてしまう。
-
jsp:paramアクションタグで配列...
-
jspから別のjspへパラメータ...
-
eclipseで新規Tomcatプロジェク...
-
JSPのエラー。
-
Tomcatで開発したStrutsアプリ...
-
jspからjarを参照したいのですが
-
Java サーブレット間の値の受渡...
-
文字列の切り取り
-
RequestDispatcherの使用方法
-
検索後のページ再表示初期化
おすすめ情報