外出自粛中でも楽しく過ごす!QAまとめ>>

いつもお世話になっております。
当方、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);
}

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

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

A 回答 (1件)

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/doc …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ご指摘の5.にプロパティファイルを配置したら解決いたしました。

お礼日時:2007/02/07 20:59

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

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

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

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

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

QTomcatのクラスパス

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

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

Aベストアンサー

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

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

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を使います。

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は起動しますが初期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が起動できていないのではないでしょうか?

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 servlet 404対処方法

初めて質問させて頂く者です。宜しくお願いします。Java初心者です。
eclipse4.3のtomcatプロジェクトを使い、以下のServletコードを作成しました。
ブラウザアドレスバーに以下アドレスを入れて実行しましたが、HTTPステータス404が表示されます。
どのように改善したら良いかアドバイスをお願い致します。長文申し訳ございません。本当に困っています。

環境:windows8.1 eclipse4.3
ディレクトリ:jwapp(プロジェクト名)
-test(パッケージ名)
-First(ファイル名)
指定アドレス:localhost:8080/jwapp/servlet/test.First

web.xmlファイルはWEB-INFの中に置いています。
記述は以下のとおりです。↓

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app
version="2.5"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd">
<servlet>
<servlet-name>first</servlet-name>
<servlet-class>test.First</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>first</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
</web-app>

Servletのコードは以下のとおりです。↓

package test;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class First01 extends HttpServlet {
public void doGet(HttpServletRequest req,HttpServletResponse res)
throws IOException,ServletException{
res.setContentType("text/html;charset=Shift_JIS");
PrintWriter out=res.getWriter();
out.println("<html)");
out.println("<head>");
out.println("<title>テスト</title>");
out.println("<h1>テスト</h1>");
out.println("</body>");
out.println("</heml>");
}
}

初めて質問させて頂く者です。宜しくお願いします。Java初心者です。
eclipse4.3のtomcatプロジェクトを使い、以下のServletコードを作成しました。
ブラウザアドレスバーに以下アドレスを入れて実行しましたが、HTTPステータス404が表示されます。
どのように改善したら良いかアドバイスをお願い致します。長文申し訳ございません。本当に困っています。

環境:windows8.1 eclipse4.3
ディレクトリ:jwapp(プロジェクト名)
-test(パッケージ名)
-First(ファイル名...続きを読む

Aベストアンサー

publicクラス名は、ファイル名と同じにします。
web.xmlのur-pattern要素が/firstならば、urlは下記になります。

http://localhost:8080/jwapp/first

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(を含む...続きを読む

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

QeclipseとTomcatについて

TOMCAT5.0.28とeclipse2.1.2
j2sdk1.4.2_13
を使ってます。
エクリプスからTOMCATを起動するとすぐに終了になってしまいます。
TOMCATのバージョンとjdkのバージョンを上げる前は起動していたんですが。。
どこの設定が悪いのでしょうか?
また、TOMCAT5.0.28にはservlet.jarはないのでしょうか?

Aベストアンサー

>プラグインもバージョンが絡んでるんですかね。。
>古いとかあるんでしょうか?

もしかしたらあるかもしれませんね。

こちらでは 3.1 finalリリース版を使用しました。
Eclipse2.x系をご利用とのことなのでプラグインも3.0か2.1.1bですよね。


それはさておき、簡易的に環境を作ってプロジェクトの移行を試してみました。
Tomcat 4.1.34 → 5.0.28
JDK 1.5.0_08 → 1.4.2_13

Eclipseプロジェクトを作り変える時に気付いた点を書いておきます。
なお、回線きつくて Eclipse2.x を入手できなかったので 3.2 を使いました。
JDK1.4.1はSUNで見つけられなかったので環境を変えるという意味でダウングレード(1.5アンインストール後1.4インストール)してみました。

項目名に若干違いがあると思うので適当に読み替えてください。

[1]PCの環境確認
[1-1]
 環境変数`JAVA_HOME`をJDK1.4.2_13インストールパスに変更
[1-2]
 環境変数`PATH`に`%JAVA_HOME%bin` が含まれているか確認
 (コマンドプロンプトで `java -version` を実行して`1.4.2`に変わったことを確認。
 `javac`はバージョンチェックコマンドが無いようなので案外ハマり所かもしれない)
[1-3]
 [1-2]でバージョンが変わらない時は
 Windowsフォルダ等のシステム系のパスにjava.exe, javac.exe等が
 入っていないかを確認する
 (自分はJDK1.5.0_08のjava.exe, javac.exeが入っていたので消しました)
[補足]
 なお、自分は開発機を公開用WEBサーバにはしませんので、
 TOMCAT_HOMEやCATALINA_HOMEを環境変数には加えていません。


[2]Eclipseの設定確認

[2-1]
 [ウインドウ→設定], [Java→インストール済みJRE]のJRE定義のロケーションが、
 1.4.2になっていないので、[編集]ボタンでJREのホームディレクトリをJDK1.4.2のパスに変更する
[2-2]
 [ウインドウ→設定], [Tomcat]の`バージョン`を 5.x に変更。
 `Tomcatホーム`を 5.0.28のインストールパス に変更。
 (ちなみに、TOMCAT5.0.28の起動だけならこの時点で可能でした)
[2-3]
 [ウインドウ→設定], [Tomcat→JVMの設定]でJREが[2-1]で定義したJRE名になっているかを確認
[2-4]
 [プロジェクト→プロパティー], [Javaのビルド・パス], [ライブラリ]の
 `JREシステムライブラリ`がJREが[2-1]で定義したJRE名になっているかを確認
[2-5]
 [プロジェクト→プロパティー], [Javaのビルド・パス], [ライブラリ]が
 5.0.28のものになっているかを確認。
 
 ▼TOMCAT4.1.34のライブラリ
  TOMCAT_HOME/common/lib/jasper-runtime.jar
  TOMCAT_HOME/common/lib/servlet.jar

 ▼TOMCAT5.0.28のライブラリ
  TOMCAT_HOME/common/lib/jasper-runtime.jar
  TOMCAT_HOME/common/lib/servlet-api.jar (ファイル名変更されている)
  TOMCAT_HOME/common/lib/jsp-api.jar (新規追加されている)
 
[2-6]
 [プロジェクト→プロパティー], [Tomcat], [全般]の項目を適当に変更してから
 元に戻して[適用]ボタンを押す。
 (Tomcatのserver.xml内に記述されている `<Context path="~" (略)>`を書き直させる為
 もちろん、Eclipseを起動していない状態で(Tomcat)\conf\server.xmlを直接編集してもいい)
[2-7]
 [パッケージエクスプローラ]の`(Eclipseプロジェクト)\work\org\apache\jsp`内の
JSPのキャッシュファイルを削除
[2-8]
 TOMCATプラグインにより、Eclipse上でTomcat起動と`HelloWorld`出力JSPの動作を確認


もし、動作しましたら向学の為にも今回の原因と対策を教えてください。

以上です。

>プラグインもバージョンが絡んでるんですかね。。
>古いとかあるんでしょうか?

もしかしたらあるかもしれませんね。

こちらでは 3.1 finalリリース版を使用しました。
Eclipse2.x系をご利用とのことなのでプラグインも3.0か2.1.1bですよね。


それはさておき、簡易的に環境を作ってプロジェクトの移行を試してみました。
Tomcat 4.1.34 → 5.0.28
JDK 1.5.0_08 → 1.4.2_13

Eclipseプロジェクトを作り変える時に気付いた点を書いておきます。
なお、回線きつくて Eclipse2.x を入手できなかった...続きを読む


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

人気Q&Aランキング