ここから質問投稿すると、最大4000ポイント当たる!!!! >>

OSの環境変数で指定したclasspathと
Tomcatのクラスパスは違うようですが、
Tomcatの場合web.xmlに記述するのでしょうか?

1つのjavaクラスを、サーブレットから、
Runtime.getRuntime().exec()
で実行したい場合、Tomcatのweb.xmlなどにクラスパスを指定するのでなく、-classpathを指定した方が良いのでしょうか?

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

A 回答 (3件)

>10分ぐらいかかるbatch処理を動かしたいのですが、


>ブラウザを砂時計にしたくない為、非同期にバックグラウンドでbatch処理を動かそうと思いRuntime.exec()を使用しようと思ったのですが、

Threadを使って別スレッドで処理をするのが普通だと思います。
Runtime.exec()を使うのも一つの手ではありますが、
リクエストの度にプロセスが生成されてしまうので、
サーバに負荷がかかります。
ServletのdoGetやdoPostなどで、スレッドを生成して、生成されたThreadの中で、時間のかかる処理を
行なえば、良いと思います。
    • good
    • 0
この回答へのお礼

今回は頻度が少ないので大丈夫かと思いますが、
普通はTheredということで勉強してみます。
ありがとうございました。

お礼日時:2003/04/16 11:40

> 1つのjavaクラスを、サーブレットから、


> Runtime.getRuntime().exec()
> で実行したい

この設計自体を考え直すことができれば
それが一番良いと思うのですが、

どうしてもやりたい、または一応やり方を知りたい、
というのであれば、

Runtime.exec() で実行可能なクラスは、
どこか場所を決めて、そこに配置するようにして、
Runtime.exec() を実行するクラスを
コンテキストのクラスローダを親とする
新しいクラスローダによってロードし、
リフレクションでブートする、

というのがきれいな気がします。

この回答への補足

やりたいことは、ブラウザで送信ボタンを押し、
10分ぐらいかかるbatch処理を動かしたいのですが、
ブラウザを砂時計にしたくない為、非同期にバックグラウンドでbatch処理を動かそうと思いRuntime.exec()を使用しようと思ったのですが、一般的な手法ではないのでしょうか?

補足日時:2003/04/13 17:22
    • good
    • 1
この回答へのお礼

>> 1つのjavaクラスを、サーブレットから、
>> Runtime.getRuntime().exec()
>> で実行したい
>この設計自体を考え直すことができれば
>それが一番良いと思うのですが、
ご忠告ありがとうございます。設計変更は可能ですがどうすれば良いでしょうか?

お礼日時:2003/04/13 17:23

Tomcatのバージョンが分かりませんが、参考URLにあるような形


でクラスパスが参照されます。
ちなみに、web.xmlにはクラスパスは指定しません。

具体的には
1.WEBアプリケーション用クラスパス
 WEB-INF/classとWEB-INF/lib
2.Sharedディレクトリ
 Tomcatインストールディレクトリ/server/classes
 Tomcatインストールディレクトリ/server/lib
3.Commonディレクトリ
 Tomcatインストールディレクトリ/common/classes  Tomcatインストールディレクトリ/common/lib
4.System用クラスパス
 CLASSPATH環境変数で指定されるディレクトリ
5.Bootstrapクラスパス
 JAVA_HOME/jre/lib/ext
の順番でクラスが検索されます。

なお、System用クラスパスですが、Tomcatインストールディレクトリ
の中のsetclasspath.batというバッチが実行されるので、
Tomcatの起動時に、環境変数に指定している値は上書き
されてしまいます。
もし、Runtime.getRuntime().exec() でJavaを起動するので
あれば、このsetclasspath.batを修正しないと駄目ではないでしょうか?

参考URL:http://jakarta.apache.org/tomcat/tomcat-4.1-doc/ …
    • good
    • 1
この回答へのお礼

Tomcatは4.1.16を使っています。
setclasspath.bat
の存在は知りませんでしたので、
デフォルトではCLASSPATH環境変数は
上書きされてしまうようですね。

クラスパス検索順も参考になりました。
ありがとうございます。

お礼日時:2003/04/13 17:14

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

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

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

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

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

QTomcatのプロジェクトのクラスパスの通し方

いつもお世話になっております。
当方、Tomcat5.xとEclipse3.2でWebアプリ(Struts使用)を開発しております。
Eclipse環境下で、JVMの設定を追加して.propertiesファイルの置き場を指定しているのですが、Tomcatのみのサーバにアプリを配置するとプロパティファイルの場所が分からなくなるらしく(CLASSPATHが通っていない?)エラーになってしまいます。

private String fileName = "mail.properties";
private String properties = null;

public MailUtil() {
this.properties = this.getClass().getClassLoader().getResource(this.fileName).toString(); ←ここでNullPoingter
this.properties = this.properties.substring(6);
}

実際に配置する際の設定方法をご教示頂けないでしょうか?
今はソースコードに実アドレスを指定して回避しておりますが、環境が変わった時などに困ってしまいます。
よろしくお願いいたします。

いつもお世話になっております。
当方、Tomcat5.xとEclipse3.2でWebアプリ(Struts使用)を開発しております。
Eclipse環境下で、JVMの設定を追加して.propertiesファイルの置き場を指定しているのですが、Tomcatのみのサーバにアプリを配置するとプロパティファイルの場所が分からなくなるらしく(CLASSPATHが通っていない?)エラーになってしまいます。

private String fileName = "mail.properties";
private String properties = null;

public MailUtil() {
this.properties = this.getClass()....続きを読む

Aベストアンサー

Tomcatのクラスパスを通すには、
まずはデフォルトとして、
1.%JAVA_HOME%/jre/lib/extのjarファイル
2.%TOMCAT_HOME%/commos/lib, %TOMCAT_HOME%/commons/classes
3.%TOMCAT_HOME%/server/lib, %TOMCAT_HOME%/server/classes
4.%TOMCAT_HOME%/shared/lib, %TOMCAT_HOME%/shared/classes
5.WEB-INF/lib, WEB-INF/classe
が、あります。
libには、jarファイルを、classesには、jar化されていないclassファイルやpropertiesなどのリソースファイルを置きます。

あとは、%TOMCAT_HOME%/bin/を改造して明示的にclasspathを設定する方法などがあります。

詳しくは、参考URLに載ってます。

参考URL:http://www.jajakarta.org/tomcat/tomcat5.0/ja/docs/tomcat-docs/class-loader-howto.html

Tomcatのクラスパスを通すには、
まずはデフォルトとして、
1.%JAVA_HOME%/jre/lib/extのjarファイル
2.%TOMCAT_HOME%/commos/lib, %TOMCAT_HOME%/commons/classes
3.%TOMCAT_HOME%/server/lib, %TOMCAT_HOME%/server/classes
4.%TOMCAT_HOME%/shared/lib, %TOMCAT_HOME%/shared/classes
5.WEB-INF/lib, WEB-INF/classe
が、あります。
libには、jarファイルを、classesには、jar化されていないclassファイルやpropertiesなどのリソースファイルを置きます。

あとは、%TOMCAT_HOME%/bin/を改...続きを読む

QTomcatは起動しますが初期index画面が表示できません

Tomcatについての質問は多数寄せられておりますが、
それらを参考にしてインストールなど行いますが、
どうしても後一歩のところで私の場合表示できないという、もどかしい状態になっております。
どうかご存知の方いらっしゃいましたらご教示お願い申し上げます。

Tomcat5.0をWindowsXPで起動しております。
Javaはj2sdk1.4.1_02です。
通常インストールした後Startup.batを起動し、IE6.0で
http://localhost:8080もしくは
http://127.0.0.1:8080と入力、Enterキーを押しますが、画面に
Connection refused
--------------------
Description: Connection refused
と表示されてしまいます。

下記に参考になるかわかりませんが、各種起動状態を記載いたします。アドバイスよろしくお願い申し上げます。

◆コマンドプロンプトで
>ping localhostと入力すると、
-----
Pinging yamamoto [127.0.0.1] with 32 bytes of data:

Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

Ping statistics for 127.0.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
-----

と表示されます。また、
>telnet localhost 8080の場合は
-----
接続中: localhost...ホストへ接続できませんでした。 ポート番号 8080: 接続に失敗し
ました
-----
と表示されます。

お手数ですが、よろしくお願い申し上げます。

Tomcatについての質問は多数寄せられておりますが、
それらを参考にしてインストールなど行いますが、
どうしても後一歩のところで私の場合表示できないという、もどかしい状態になっております。
どうかご存知の方いらっしゃいましたらご教示お願い申し上げます。

Tomcat5.0をWindowsXPで起動しております。
Javaはj2sdk1.4.1_02です。
通常インストールした後Startup.batを起動し、IE6.0で
http://localhost:8080もしくは
http://127.0.0.1:8080と入力、Enterキーを押しますが、画面に
Connection re...続きを読む

Aベストアンサー

>Tomcatは起動しますが
とのことですが、Tomcatが起動していないと思います。

pingが通るのはTomcatと無関係で、PCが立ち上がっていれば帰ってくると思います。

telnet localhost 8080
で接続できないとのことなので、Tomcatが起動できていないのではないでしょうか?

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む

Qシンボルが見つかりませんというエラーが理解できません。

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Image[3];
Thread t;
int index1 = 0;
int index2 = 0;
String msg = "";
String msg1 = "";

boolean state = false;
Button b1 = new Button("ぐー");
Button b2 = new Button("ちょき");
Button b3 = new Button("ぱー");

public void init(){
for(int i = 0; i<=2; i++){
img[i] = getImage(getDocumentBase(),"hanabi" + (i+1) + ".JPG");
}
add(b1);
add(b2);
add(b3);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
msg1 = "結果は・・";

}

public void paint(Graphics g){
g.drawImage(img[index1],350,30,this);
g.drawImage(img[index2],695,30,this);
g.drawString("コンピューター",420,300);
g.drawString("あなた",800,300);
g.drawString(msg,630,320);
g.drawString(msg1,550,320);
}

public void start(){
state = true;
t = new Thread(this);
t.start();

}

public void run(){
while(state){
index1++;
if(index1 == 3){
index1 = 0;
}
index2++;
if(index2 == 3){
index2 = 0;
}
repaint();
try {
Thread.sleep(60);
}catch(InterruptedException e) { }
}
}

public void actionPerformed(ActionEvent e){
if(state == false) {
start();
return;

}
state = false;
if(e.getSource() == b1) {
msg = "ぐー";
index2 = 0;
}

else if(e.getSource() == b2){
msg = "ちょき";
index2 = 1;
}

else if(e.getSource() == b3){
msg = "ぱー";
index2 = 2;
}
check();
repaint();
}

public void check() {
if(index1 == index2) msg ="あいこ";


else if (index1 == 0) {
if(index2 == 2) msg="あなたの勝ち";
else msg ="あなたの負け";
}

else if(index1 == 1) {
if(index2 == 0) msg="あなたの勝ち";
else msg="あなたの負け";
}

else if(index1 == 2) {
if(index2 == 1) msg="あなたの勝ち";
else msg="あなたの負け";
}

}
}

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Imag...続きを読む

Aベストアンサー

「シンボルを見つけられません。」というエラーの下に何か表示がありませんでしたか?そこにヒントがあると考えられます。
シンボルを見つけられませんといエラーが表示される主な理由は4つあります。
(1)クラス、メソッド、変数などの綴りミスや定義していない変数を使用している可能性がある。
(2)コンストラクタを呼び出すときに、newを忘れている可能性がある。(3)公開されていないメンバーを呼び出している可能性がある。
(4)必要なimport文を記述し忘れている可能性がある。
ここでのあなたのエラーは(1)番ではないでしょうか?上記ではimageとなっている変数がimgになっていますね。
これはエラー表示をよく見ることで意外と簡単に解決できるのです。
ゆっくり丁寧にエラー表示を見るように心がけることが大事ですよ。

QTomcatでのHTMLの表示

Tomcatで、HTMLファイルをwebappsディレクトリに作って、http://localhost8080/webapps/ファイル名.htmlというアドレスで表示しようとしたんですけど、HTTP404とエラー表示がされます。
http://localhost:8080にはアクセスできるんで、インストールは成功してると思うんですけど、何が原因なのでしょうか?

Aベストアンサー

#2です。。
記載しましたが、まったく間違った情報でした。すみません。
webapps/ROOTがデフォルトルートなので、そこに入れないと、http://localhost:8080/ファイル名.htmlには出来なかったですね。。

http://localhost8080/webapps/ファイル名.html
とするためには、TomcatのServer.xmlファイルに
<Context path="/webapps" workDir="フルパスディレクトリ" />
とか記載しないといけないかもしれません。

そのディレクトリに、ファイル名.htmlを配置になります。 間違った情報を掲載してしまいまして申し訳有りません。

QEclipseでのJDBCドライバについて

Eclipse3.1でデータベース(mysql)にアクセスするプログラムを作ったのですが下記のエラーが出ます。

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

これはJDBCドライバのセットアップがうまく出来ていないからなのでしょうか?
またEclipseでは、~.jarというファイルをプロジェクトのWEB-INFのlibフォルダに入れれば使える印象があるのですが、参考書(EclipseのではなくJAVAなどの)などにあるようにTomcatのインストールフォルダ以下common/libに入れて環境変数を変更しないといけないのでしょうか?

ご存知の方教えてください、よろしくお願いします。

Aベストアンサー

WEB-INF以下に入れると実行はできるのですが、エクリプスが.javaファイルをコンパイルすることができません。projectの一覧を右クリックしてpropertyを選択し、ダイアログ右側からJava Build Pathを選択し、タグからLibrariesを選び、Add JARsボタンをおして.jarファイルを登録して下さい。
たぶんこれでコンパイルできるはずです。

QTomcatプロジェクトの.propertiesファイルの置き場

当方、Tomcat5.0,Eclipseでサーブレットを開発しております。
初歩的な質問で申し訳ありませんが、プロパティファイルの置き場所が
分からず難儀しております。
どなたかご教示願います。

prop.load(new FileInputStream("C:/work/workspace/worktools/mail.properties"));

上記の様にフルパスを指定すると認識するのですが、

prop.load(new FileInputStream("mail.properties"));

この様にパスを省略するとFileNotFoundExceptionが発生してしまいます。WEB-INF直下にファイルを置いてるのですが、間違いなのでしょうか?

Aベストアンサー

FileInputStreamを相対パスで指定した場合は、JVMの起動ディレクトリがルートになります。
記憶があいまいですが、Eclipseから起動した場合は、workspaceがルートとなるじゃなかったでしょうか。
Tomcatのコンソールから起動した場合は、TOMCAT_HOMTがルートとなります。
通常はそういうことはしないので、クラスパスを通すか、WEB-INF/classeに配置し、ClassLoader#getResourceAsStreamを使います。

QOracle(オラクル)で、日付時刻型の検索方法について

質問させていただきます。
データベースはオラクルを使っていて、
SQL文で、抽出するときにエラーが出て困っています。

日付時刻型が「2005/05/26 19:13:00」という感じで入ってます。
2005/05/26 を抽出したいのですが、
BETWEEN '2005/05/26 00:00:00' AND '2005/05/26 23:59:59'

だと、エラーでできません。
どなた様か、ご教授よろしくお願いしますm(_ _)m

Aベストアンサー

日付検索を行う場合は、以下のように書式を含める必要があります。

col BETWEEN TO_DATE('2005/05/26 00:00:00','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('2005/05/26 23:59:59','YYYY/MM/DD HH24:MI:SS')

ただ、厳密には

col >= TO_DATE('2005/05/26', 'YYYY/MM/DD')
AND
col < TO_DATE('2005/05/27', 'YYYY/MM/DD')

と書くべきでしょうね。

QCLASSPATHを設定しても、『ClassNotFound~』になってしまう

はじめまして、質問をさせていただきます。

JDBCを利用して、データベースにアクセスするため、2週間前から
javaを勉強している初心者です。
色々なサンプルを参考にして、javaコードを作成しましたが、
java実行時に『ClassNotFoundException』になってしまいます。

過去の質問から、No.952983やNo.957189を参考にさせていただき、JDBCドライバー
をダウンロードし、CLASSPATHの設定をしてみましたが変わりませんでした。
その後も色々と調べましたが、なぜCLASSPATH設定が有効にならないのか分かりません。
お手数かとは思いますが、御教授のほどよろしくお願いします。

サーバのOS :LINUX(FedoraCore5)
データベース :Postgresql8.1.4(rpmでインストール)
JDKのVer   :1.5.0_08
JDBCドライバー:postgresql-8.1-407.jdbc3.jar

↓.bash_profileの設定
export JAVA_HOME=/usr/java/jdk1.5.0_08
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:/$JAVA_HOME/lib/postgresql-8.1-407.jdbc3.jar

↓『set』コマンドで確認したCLASSPATH
CLASSPATH=.:/usr/java/jdk1.5.0_08/lib/tools.jar://usr/java/jdk1.5.0_08/lib/postgresql-8.1-407.jdbc3.jar

以上

はじめまして、質問をさせていただきます。

JDBCを利用して、データベースにアクセスするため、2週間前から
javaを勉強している初心者です。
色々なサンプルを参考にして、javaコードを作成しましたが、
java実行時に『ClassNotFoundException』になってしまいます。

過去の質問から、No.952983やNo.957189を参考にさせていただき、JDBCドライバー
をダウンロードし、CLASSPATHの設定をしてみましたが変わりませんでした。
その後も色々と調べましたが、なぜCLASSPATH設定が有効にならないのか分かりま...続きを読む

Aベストアンサー

jar xvf jar_filename

で、jarを展開できるので、ファイルの有無は分かるはずです。

ところで、以前の出力ですが

java.lang.ClassNotFoundException: org.postgresql.driver

なんかおかしくないですか?肝心のクラス名は?
パッケージ名しか載っていませんが、importの部分に

import org.postgresql.driver;

なんて書いてません?

Q「httpステータス404」というエラーが出ます。

「httpステータス404」というエラーが出ます。

java初心者です、宜しくお願い致します。
EclipseでServletを書いてやりましたが、以下のようなエラーが出ます、
原因はなんでしょうか、宜しくお願い致します。
「httpステータス404-/Servlet%E7%B7%B4%E7%BF%92/ ServOutput」

Aベストアンサー

Not Found
という意味です。
そのファイルが無い。あるいはリンクが間違っています。
詳しくは参考URLをみてください。

参考URL:http://ja.wikipedia.org/wiki/HTTP_404


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

人気Q&Aランキング