初歩的な質問ですみません。
下記の環境で、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.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" %> という一行を
加えてみましたが、やはり同じエラーが出ます。
サーブレットも正常にコンパイルされているようです。
よろしくお願いします。
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.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.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で
見つけて試してことがありまして。
その時は、だめでした。
今回、再度試したところ
上手くできました。
もう少し、がんばってみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- サーバー 別サーバに構築したApache+Tomcatの連携について 2 2023/03/06 23:23
- PHP eclipse pleiades phpのインストールについて 1 2023/02/03 17:15
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- オープンソース Vue+Laravelのデザインテンプレートのサンプルが起動できない 1 2022/05/18 21:52
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- 英語 L-PRF can be obtained by manual or automated metho 1 2022/04/08 09:39
- Java 問題作成のWebアプリの作り方を教えてください 1 2022/11/26 22:01
- Gmail 【お助け!】サーバーからのメール送信でGmailに送信されない問題について 1 2023/06/20 22:03
- オープンソース Python openpyxlを使用したセル番地の使用について 1 2023/08/03 22:05
- JavaScript ソースコードは下の共有コードサイト「張り紙」にあります。 入力フォームの javascript で 1 2022/05/11 11:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jspからServletを呼び、元のjsp...
-
Java サーブレット間の値の受渡...
-
servletからjspへの遷移時に文...
-
Struts:フレーム内JSPからcssフ...
-
jsp:paramアクションタグで配列...
-
JSPからJSPへ情報を渡せる?
-
WebLogic6.0 でのJSPプリコンパ...
-
WEB-INF直下のフォルダ
-
javascriptでformの送信後、値...
-
HTTP Status 500 のエラー
-
eclipseのWTPでコンテキストル...
-
jspでformのvalueを取得。
-
java jsp 数あてゲーム
-
TomcatのJSP Examplesのページ...
-
webアプリを作ってます。エラー...
-
フォーム上で押されたボタンに...
-
j-axis 腕時計のアラーム止めたい
-
プログラミングで例えばゲーム...
-
腕時計の時報をならないように...
-
ActiveWorkbook.Pathの一つ下の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jspからServletを呼び、元のjsp...
-
webアプリを作ってます。エラー...
-
JSPからJSPへ情報を渡せる?
-
jspでbeanを使いたいのです...
-
WEB-INF直下のフォルダ
-
JSPのエラー画面(error.jsp)に...
-
javaでカレンダー作成
-
[JSP]1Servletから複数フレーム...
-
return new ActionForward("xxx...
-
Tomcatの仮想ディレクトリ配置...
-
struts2 jspファイル直接参照禁...
-
jsp:paramアクションタグで配列...
-
Servlet-JSP間のhidden要素での...
-
Struts:フレーム内JSPからcssフ...
-
Java PostgreSQL スクリプトレット
-
JSPでimportを行う時の、変数の...
-
javascriptでformの送信後、値...
-
Seaser2のフォルダ構成について
-
jspからjarを参照したいのですが
-
Servletで値を受け取る
おすすめ情報