ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Java質問&情報提供サイトコミュのパッケージ化されたクラスを利用しているjavaファイルのコンパイル方法

  • mixiチェック
  • このエントリーをはてなブックマークに追加
2度目の質問になります。
「10日でおぼえるJSP/サーブレット」というテキストを使用していますが、
パッケージ化されたクラスファイルを利用しているjavaファイルの
コンパイル方法が分かりません。

このテキスト(P.289)にはその辺りの事に触れず、コンパイル出来ている
ようなのですが、同じように何もオプションを指定せずにコンパイルすると、
利用しているクラス名に対して「シンボルを見つけられません」というエラーが
出ます。

カレントフォルダを C:\Tomcat 5.5\webapps\jsp10\WEB-INF\classes\day08 に
移動し、
javac -classpath "%CLASSPATH%";C:\Tomcat 5.5\webapps\jsp10\WEB-INF\classes SrvDbInsert.java
とオプションを指定してコンパイルしようとするとするのですが、
「無効なフラグです」とオプションの正しい使い方を示すエラーが出てしまいます。

環境変数は下記のように設定しています。
●CATALINA_HOME  C:\Tomcat 5.5
●CLASSPATH  .;%CATALINA_HOME%\common\lib\servlet-api.jar;%CATALINA_HOME%\common\lib\jsp-api.jar;%CATALINA_HOME%\webapps\jsp 10\WEB-INF\classes;C:\jdk1.5.0_06\jre\lib\ext\QTJava.zip
●JAVA_HOME  C:\jdk1.5.0_06

そもそも「環境変数とは何ぞや?」という部分の理解が薄すぎる為、オプションの
指定方法にも誤りがあるのかもしれません。テキストによって設定内容が
異なるので、どのように設定すれば良いのか、果たしてこれで合っているのか、
毎回悩むのが正直なところです・・・。

色んなテキストやサイトを見ながら、何通りか試してみたのですが、解決に
至らず頭がパンクしてしまいそうで、こちらに相談させて頂こうと思いました。

初心者の質問で大変お恥ずかしいのですが、どこをどのように修正すれば
コンパイルが可能になるか、教えて頂けないでしょうか?
宜しくお願い申し上げます。

コメント(7)

●コンパイル出来ないファイル
C:\Tomcat 5.5\webapps\jsp10\WEB-INF\classes\day08\SrvDbInsert.java -------------

package day08;

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

public class SrvDbInsert extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
response.setContentType("text/html;charset=Windows-31J");
PrintWriter out = response.getWriter();
DbBean objIns = new DbBean();
objIns.setNam("Apache");
objIns.setUrl("http://httpd.apache.org");
objIns.setGdate("2004/44/15");
objIns.setGrade("5");
objIns.setMemo("世界中で利用される高度なWebサーバ");
objIns.execute();
out.println("<html><head><title>ソフトウェア情報登録</title></head>");
out.println("<body>データを追加しました</body></html>");
}
}
●利用しているクラスファイル
C:\Tomcat 5.5\webapps\jsp10\WEB-INF\classes\day08\DbBean.class -----------------

package day08;

import java.io.*;
import java.sql.*;
import java.util.*;
import javax.naming.*;
import javax.sql.*;

public class DbBean implements Serializable{
public DbBean(){}

private String nam = null;
private String url = null;
private String gdate = null;
private String grade = null;
private String memo = null;

public String getNam(){return this.nam;}
public String getUrl(){return this.nam;}
public String getGdate(){return this.gdate;}
public String getGrade(){return this.grade;}
public String getMemo(){return this.memo;}

public void setNam(String nam){this.nam = nam;}
public void setUrl(String url){this.url = url;}
public void setGdate(String gdate){this.gdate = gdate;}
public void setGrade(String grade){this.grade = grade;}
public void setMemo(String memo){this.memo = memo;}

public void execute(){
Connection db = null;
PreparedStatement objPs = null;
try{
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/Jsp10");
db = ds.getConnection();
objPs = db.prepareStatement("insert into softlist(nam,url,gdate,grade,memo) value(?,?,?,?,?)");
objPs.setString(1,this.nam);
objPs.setString(2,this.url);
objPs.setString(3,this.gdate);
objPs.setString(4,this.grade);
objPs.setString(5,this.memo);
objPs.executeUpdate();
}catch(NamingException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
if(objPs != null){
objPs.close();
}
if(db != null){
db.close();
}
}catch(SQLException se){
se.printStackTrace();
}
}
}
}
JDBCドライバがどこにあるかじゃないですかね?
その本の場合、MySQLのJDBCドライバをCLASSPATHで指定されて
いるディレクトリに入れるか、直接ドライバを指定する必要が
あるかと思います。
その当たりのことは、その本の序盤のセットアップ当たりに
たしか書いてあったような気がします(MySQLのところかな?)
classpathの指定がマズいような・・
javac -classpath "%CLASSPATH%";C:\Tomcat 5.5\webapps\jsp10\WEB-INF\classes SrvDbInsert.java
ですと、"%CLASSPATH%";C\Tomcat までがclasspathとして見られちゃいます。
ですので、クォートの位置をずらして、
javac -classpath "%CLASSPATH%;C:Tomcat 5.5\...\classes" SrvDbInsert.java
としてみたらどうでしょう?
早々のご教示ありがとうございます。

早速
javac -classpath "%CLASSPATH%;C:\Tomcat 5.5\webapps\jsp10\WEB-INF\classes" SrvDbInsert.java
とオプションを指定してコンパイルするとコンパイル出来ました!!!
思わず「おぉ!」と声が出てしまいました。ありがとうございます!
それにしても・・・classpathの指定が間違っていた事は分かりましたが、
未だ何故これで解決出来たのか分かっていません。とあるテキストに
javac -classpath "%CLASSPATH%";C:\ディレクトリ名 ファイル名.java
と書いてあったので、これが正しいと思っていたのですが、ここに
原因があったという事ですよね・・・何でやろう(泣)。

>>のぶさん
>>みゅぅさん
親切にして頂いて、本当にありがとうございました。
>05さん
これはjavaじゃなくコマンドプロンプトの問題ですね。05さんの利用しているディレクトリには空白が入っているので、どこまでがフォルダ名なのか判断できないのです。

ダブルクォートでどこまでがフォルダ名かを明確にしてやるとうまくいきます。
>>いろはさん

ご教示ありがとうございます。

なんと・・・コマンドプロンプトの仕様上の問題だったのですね!
そーいや、とあるテキストに例題として記載されていたディレクトリ名
には空白が入っていないです。それで上手くいっていたんか〜。
通常、ディレクトリ名に空白が入っていない場合は
javac -classpath "%CLASSPATH%";C:\ディレクトリ名 ファイル名.java
で良いという事なんですね。
パスや環境変数に加えて、コマンドプロンプトの勉強もしないと
いけないようですね・・・プログラミングにはその他周辺の知識が
当たり前のように求められるので、初心者はどこに問題があるのか
理解出来ず、質問の仕方も至らなくて本当にすみません。

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

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Java質問&情報提供サイト 更新情報

Java質問&情報提供サイトのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。