プロが教えるわが家の防犯対策術!

コマンドを使ってjavaを実行しclassファイルを作成しようとしているのですが、実行できません。

実行したいパターンとしてhtml→javaファイルを呼び出す形にしたいのですが、クラスファイルができません。
javaファイルの存在する箇所に設定し,javac srv_escape.javaを記入すると
以下のエラーが出ました。このときの解決策はどのようにすればいいのでしょうか?
Exception in thread "main" java.lang.NoClassDefFoundError:com/sun/tools/javac/Main と出ます。
他のQ&Aを見たりはしてたのですがよくわからなかったので質問しました。
このときの状態としてjavaソースの場所はC:\Program Files\Apache Tomcat 4.0\webapps\jsp10でjavac.exeファイルあり。
htmlファイルはC:\Program Files\Apache Tomcat 4.0\webapps\jsp10\day08-2においています。

ソース内容が
html
<html><head>
<title>予約文字のエスケープ></title>
</head>
<body>
<h1>予約文字のエスケープ</h1>
<form name="POST" action=/jsp/servlet/srv_escape">
入力文字:
<input type="text" name="esc" size="30" />
<input type="submit" value="送信" />
</form>
</html>

java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class srv_escape extends HttpServlet {
int i;
public void doPost(HttpServletRequest request,
HttpServletResponse response )
throws ServletException,IOException {
response.setGontentType("text/html;charset=Shift_JIS");
PrintWriter out=response.getWriter();
out.println("<html><head>");
out.println("<title>予約文字のエスケープ</title>");
out.println("</head><body>");
out.println(<h1>予約文字のエスケープ</h1>");
out.println("入力した文字:");
out.println(strEscape(request.getParameter("esc")));
out.println("</body></html>");
}
private String strEscape(String strEsc){
StringBuffer strResult=new StringBuffer();
for(int i=0;i<strEsc.length();i++){
switch(strEsc.charAt(i)){
case '&':
strResult.append("&amp;");
break;

case '<' :
strResult.append("&lt;");
break;

case '>' :
strResult.append("&gt;");
break;

default:
strResult.append(strEsc.charAt(i));
break;
}
}
return strResult.toString();
}
}
です。
よろしくお願いします。

A 回答 (2件)

>変わりにjavax.servlet/javax.servlet.httpは存在しません、というメーセージが表示されます。



それが、先の回答で書いた「次に必ず出くわすエラー」です。やっぱり、ライブラリを認識してませんね。

クラスパスが正しくないんでしょう。
あるいはJREおよびJDK内のJREのそれぞれのlibにあるextフォルダに、必要なライブラリファイルを全部コピーしてしまえば、クラスパスの指定をしなくても認識できるでしょう。
    • good
    • 0
この回答へのお礼

遅くなって申し訳ありません。
あれから色々試したところbinフォルダでは作成されますが、やはり
それ以外だと作成されないみたいです。
理由はわかりませんが。
丁寧な説明ありがとうございました。
また質問する機会があればよろしくお願いします。
回答ありがとうございました。

お礼日時:2007/09/26 08:07

なんだかよくわからないので、ややあてずっぽうですが・・・。



まず、JDK(Java SE DK)はインストールされていますか?「javac.exeファイルあり」っていう記述が意味不明なのですが・・・。このjavac.exeっていうのは、どこにあるのですか。JDKのインストールされたディレクトリ内のことですか

Javaは、javax.exeだけコピーしても動きません。ちゃんとJDKをインストールしてはじめて動きます。まず、この点をきちんと確認してみてください。どうも標準で組み込まれるはずのクラスライブラリが抜けているように思えるので、インストールが正しく行われていないんじゃないでしょうか。

あと、見たところ、これは普通のJavaのプログラムではなくて、サーブレット
のようですね。ですから、Java EEのJSP/サーブレット関連のライブラリがクラスパスに置かれていないとコンパイルできません。上野店を確認して、javacがきちんと動くようになったら、おそらく必ずこの問題でエラーが起こるはずですので。

また、Tomcat 4というのはけっこう古いので、何かの書籍を参考にされているのかも知れませんが、なるべく新しい、きちんとした参考書などを見たほうがよいかと思います。
    • good
    • 0
この回答へのお礼

丁寧な説明ありがとうございました。
Tomcat5.5/JDK1.5に変更して実行してみました。

何度か試したところ
Exception in thread "main" java.lang.NoClassDefFoundError:com/sun/tools/javac/Main のようなエラーは出なくなったのですが、
変わりにjavax.servlet/javax.servlet.httpは存在しません、というメーセージが表示されます。

これはおそらくservlet/servlet.httpがないということだと思うのですが、原因は何なのでしょうか?
実行したいjavaソースと同じフォルダにないからなのでしょうか?
CLASS_PATHは.;CATALINA_HOME%\common\lib\servlet.jar;%CATALINA_HOME%\common\lib\jsp-\api.jar;%CATALINA_HOME%\webapps\jsp10と設定してます。

よろしくお願いします。

お礼日時:2007/09/11 13:12

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