classファイルが作成されない

このQ&Aのポイント
  • コマンドを使ってjavaを実行しclassファイルを作成しようとしているが、実行できない。
  • html→javaファイルを呼び出す形にしたいが、クラスファイルが作成されない。
  • javaファイルの場所やコンパイル時のエラーについての解決策を知りたい。
回答を見る
  • ベストアンサー

classファイルが作成されない

コマンドを使って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(); } } です。 よろしくお願いします。

  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
noname#49664
noname#49664
回答No.2

>変わりにjavax.servlet/javax.servlet.httpは存在しません、というメーセージが表示されます。 それが、先の回答で書いた「次に必ず出くわすエラー」です。やっぱり、ライブラリを認識してませんね。 クラスパスが正しくないんでしょう。 あるいはJREおよびJDK内のJREのそれぞれのlibにあるextフォルダに、必要なライブラリファイルを全部コピーしてしまえば、クラスパスの指定をしなくても認識できるでしょう。

kannitiha
質問者

お礼

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

その他の回答 (1)

noname#49664
noname#49664
回答No.1

なんだかよくわからないので、ややあてずっぽうですが・・・。 まず、JDK(Java SE DK)はインストールされていますか?「javac.exeファイルあり」っていう記述が意味不明なのですが・・・。このjavac.exeっていうのは、どこにあるのですか。JDKのインストールされたディレクトリ内のことですか Javaは、javax.exeだけコピーしても動きません。ちゃんとJDKをインストールしてはじめて動きます。まず、この点をきちんと確認してみてください。どうも標準で組み込まれるはずのクラスライブラリが抜けているように思えるので、インストールが正しく行われていないんじゃないでしょうか。 あと、見たところ、これは普通のJavaのプログラムではなくて、サーブレット のようですね。ですから、Java EEのJSP/サーブレット関連のライブラリがクラスパスに置かれていないとコンパイルできません。上野店を確認して、javacがきちんと動くようになったら、おそらく必ずこの問題でエラーが起こるはずですので。 また、Tomcat 4というのはけっこう古いので、何かの書籍を参考にされているのかも知れませんが、なるべく新しい、きちんとした参考書などを見たほうがよいかと思います。

kannitiha
質問者

お礼

丁寧な説明ありがとうございました。 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と設定してます。 よろしくお願いします。

関連するQ&A

  • classが作られない

    javaをはじめて2日目です。以下がコンパイルしたところ、エラーがでなかったのですが、classが作られていません。何回か試したのですが、参考書には、 >javac Sample2.java とし、もう一度ディレクトリ名が出れば、コンパイル完了とあるのですが、classが作れていないので、実行が出来ません。 すみませんが、教えてください。 //画面に文字を出力するコード class Sample1 { public static void main(String args[]) { System.out.println("ようこそjavaへ!"); System.out.println("javaをはじめましょう!"); } } ちなみに保存名は、Sample2.javaです。

    • ベストアンサー
    • Java
  • Servletが動かない

    下記のようなサーブレットを作成し、web.xmlも記述して動かしてみようとしたところ下記のようなエラーが発生して動きません。(Win2000、Tomcat4.1) ~~~HelloWorldServlet.java package test_servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloWorldServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = res.getWriter(); out.println("<html>"); out.println("<head>"); out.println("</head>"); out.println("<body>"); for (int i = 1; i <= 10; i++) { out.println("Hello World" + Integer.toString(i)); } out.println("</body>"); out.println("</html>"); } } ~~~web.xml <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>HellowWorld</servlet-name> <servlet-class>test_servlet.HelloWorldServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HellowWorld</servlet-name> <url-pattern>/hello/*</url-pattern> </servlet-mapping> </web-app> ~~~http://localhost:8080/hello接続時のスタック javax.servlet.ServletException: クラス test_servlet.HelloWorldServlet はサーブレットではありません

    • ベストアンサー
    • Java
  • submitで日本語をおくりたい

    自分は現在JSPの勉強をしているのですが、JSPからサーブレットにsubmitをつかって、日本語を送信した場合文字化けして表示されてしまうので困っています。 ソースコードで説明させていただくと JSP側ソース <%@ page contentType="text/html;charset=Shift_JIS" pageEncoding="Shift_JIS" %> <html> <head><title>a</title></head> <body> <form action="Hello" method="post"> <textarea rows="10" cols="40" name="comment"> ここにコメントを書いて送信を押すとコメントがつきます </textarea><br> <input type="submit" value="送信"> </form> </body> </html> サーブレット側 import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class hello extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); response.setCharacterEncoding("Shift_JIS"); PrintWriter out = response.getWriter(); String msg = request.getParameter("comment"); out.println("<html>"); out.println("<head>"); out.println("<title>Hello World!</title>"); out.println("</head>"); out.println("<body>"); out.println(msg);//ここで表示 out.println("</body>"); out.println("</html>"); } } この様なソースを書いたのですが、サーブレット側で日本語を表示させようとすると、文字化けしてしまいます(英語は普通に表示されます)。 どのようにすれば、サーブレット側で日本語を表示できるのでしょうか? お返事おまちしております。

    • ベストアンサー
    • Java
  • javaで画像をランダムに表示させたい

    ローカルホストで下の三角形をクリックするとランダムに表示されるのですが、 何も表示されません。どうすればよいでしょうか? jsp <%@page contentType="text/html; charset=Windows-31J"%> <HTML> <BODY> <HR> <H2 td align="center" >くじを引いてください</H2></TR> <P td align="center"></TR> <img src="http://www.kk-mind.com/image/hls.jpg" > <BR> <A HREF="../servlet/input.OmikuziServlet"> <img src="http://www.misedas.net/item_images/item_group/l/5007/1418.jpg" NAME="text1" > </A> <HR> </FORM> </BODY> </HTML> JAVA import java.io.IOException; import java.io.PrintWriter; import java.util.Random; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class OmikuziServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("Windows-31J"); response.setContentType("text/html; charset=Windows-31J"); PrintWriter out = response.getWriter(); String msg = request.getParameter("text1"); try{ int x = Integer.parseInt(msg); x = (int)(Math.random() * 5) + 1; String strResult = ""; //結果格納用 //数値によって画像を決定 switch(x){ case 0: strResult = "車"; out.println("<HTML>"); out.println("<HEAD>"); out.println("<HR>"); out.println("<title>サンプル15-IMG</title>"); out.println("<img src=\"http://www.yousaydo.com/shopimages/yousaydo2nd/016006000239.jpg\">"); out.println("<HR>"); out.println("</BR>"); out.println("</BODY>"); out.println("<HTML>"); break; case 1: strResult = "マグカップ"; out.println("<HTML>"); out.println("<HEAD>"); out.println("<HR>"); out.println("<title>サンプル15-IMG</title>"); out.println("<img src=\"http://image.rakuten.co.jp/world-chara/cabinet/kanai05/img56469445.jpg\">"); out.println("<HR>"); out.println("</BR>"); out.println("</BODY>"); out.println("<HTML>"); break; case 2: strResult = "スリッパ"; out.println("<HTML>"); out.println("<HEAD>"); out.println("<HR>"); out.println("<title>サンプル15-IMG</title>"); out.println("<img src=\"http://item.shopping.c.yimg.jp/i/j/net-shibuya_ky92601\">"); out.println("<HR>"); out.println("</BR>"); out.println("</BODY>"); out.println("<HTML>"); break; case 3: strResult = "コップ"; out.println("<HTML>"); out.println("<HEAD>"); out.println("<HR>"); out.println("<title>サンプル15-IMG</title>"); out.println("<img src=\"http://ec2.images-amazon.com/images/I/31xeukC9NiL._SL500_AA300_.jpg\">"); out.println("<HR>"); out.println("</BR>"); out.println("</BODY>"); out.println("<HTML>"); break; case 4: strResult = "リラック間人形"; out.println("<HTML>"); out.println("<HEAD>"); out.println("<HR>"); out.println("<title>サンプル15-IMG</title>"); out.println("<img src=\"http://www.san-x.co.jp/relaxuma/campaign/img/59/h5_img05.gif\">"); out.println("<HR>"); out.println("</BR>"); out.println("</BODY>"); out.println("<HTML>"); break; case 5: strResult = "筆箱"; out.println("<HTML>"); out.println("<HEAD>"); out.println("<HR>"); out.println("<title>サンプル15-IMG</title>"); out.println("<img src=\"http://www.zakka-bungu.com/site_data/cabinet/py33501-12_1.jpg\">"); out.println("<HR>"); out.println("</BR>"); out.println("</BODY>"); out.println("<HTML>"); break; } } catch (NumberFormatException e){ System.out.println("入力が正しくありません"); } } }

  • サーブレットについて

    こんにちは。 サーブレットに質問したいことがあります。 以下のサンプルソースで、 response.setContentType("text/html;charset=Shift_JIS"); の部分があるのですが、このようにすると日本語が文字化けしてしまいます。 ちなみにresponse.setContentType("text/html); とすると、日本語も文字化けせずに正しく表示されます。 ここで質問なのですが、 サーブレットの場合はJSPと違い、charsetを指定しなくてもよろしいのでしょうか? 何か分かることがありましたらご教授御願い致します。 ---------☆サンプルソース(HelloWorldExample.java)☆---------------- import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorldExample extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html;charset=Shift_JIS"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>ハローワールド</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>HelloWorld ハローワールド</h1>"); out.println("</body>"); out.println("</html>"); out.close(); } } ---------------------------------------------------

    • ベストアンサー
    • Java
  • Fedora10でHelloWorld.javaをコンパイル

    すると以下のようにエラーがでます。 何が原因でしょうか? /root/HelloWorld.java: import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Hello World!</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hello World!</h1>"); out.println("</body>"); out.println("</html>"); } } [root@prime ~]# javac -classpath /usr/share/tomcat6/lib/tomcat6-servlet-2.5-api-6.0.18.jar HelloWorld.java ---------- 1. WARNING in HelloWorld.java (at line 5) public class HelloWorld extends HttpServlet { ^^^^^^^^^^ The serializable class HelloWorld does not declare a static final serialVersionUID field of type long ---------- 1 problem (1 warning) [root@prime ~]# ただし、 /usr/share/tomcat6/lib/tomcat6-servlet-2.5-api-6.0.18.jar に使用したapiクラスは含まれています。 The serializable class HelloWorld does not declare a static final serialVersionUID field of type long の意味を教えてください。

    • ベストアンサー
    • Java
  • eclipseで作ったサーブレットのサーバーへのアップロード方法について

    サーブレットのアップロードについて eclipse(バージョン: 3.1.1) Tomcat5.5 jre1.6.0_01 の環境で、下記のようなプロジェクトexamplesをeclipseで localhost上に作成しました。 これをwebサーバーにアップして、 (DocumentRoot "/usr/local/apache2/htdocs") 動作させたいのですが、 javaファイル、jarファイル、wec.xml等を DocumentRoot配下にどのようなディレクトリ構造を作って、 配置すれば動くのでしょうか。 サーバーは apache-2.2.0 Tomcat-4.1.31 であり、以前より正常に運用しているサーバです。 examples | |--JREシステムライブラリー[jre1.6.0_01] | |---(省略) |--TOMCAT_HOME/common/lib/servlet-api.jar | |---(省略) |--TOMCAT_HOME/common/lib/jasper-runtime.jar | |---(省略) |--TOMCAT_HOME/common/lib/jsp-api.jar | |---(省略) | |--WEB-INF/src | | | |--chap09_servlet02 | | | |--HelloServlet.java | |--WEB-INF | | | |--web.xml 【HelloServletWorld.java】 package chap09_servlet02; 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 HelloServletWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // response.setContentType("text/html; charset=Windows-31J"); response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); out.println("<HTML>"); out.println("<HEAD>"); out.println("<TITLE>Servlet</TITLE>"); out.println("</HEAD>"); out.println("<BODY>"); out.println("<h1>"); out.println("<font color =\"blue\">"); out.println("Hello ServletWorld"); out.println("</font>"); out.println("</h1>"); out.println("</BODY>"); out.println("</HTML>"); out.close(); } } 【web.xml】 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>HelloServletWorld</servlet-name> <servlet-class>chap09_servlet02.HelloServletWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServletWorld</servlet-name> <url-pattern>/HelloServletWorld</url-pattern> </servlet-mapping> </web-app>

    • ベストアンサー
    • Java
  • Class.forNameでエラーになる

    eclipseでjavaのSQL接続を書こうとしているんですが クラスが無いというエラーが出てしまいます。 Class.forNameの所で「処理されない例外の型 ClassNotFoundException」と出ます。 その次の行もエラーになってて、とりあえずClass.forNameだけでもエラー無くそうと思い調べました。 ぐぐったらクラスパス?が悪いとなると書いてあったので eclipseで「プロジェクトを右クリック→プロパティー→Java Build Path→ライブラリタブ」から 「外部jarの追加」で「C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib」に入ってる 「ojdbc5.jar」と「ojdbc6.jar」と「ojdbc6_g.jar」を追加しました。(どれが対象かわからなかったので全部追加) この状態でも同じエラーが出てしまいます。クラスパスの指定の方法が悪いんでしょうか? 入れてるoracleは「Oracle Database Express Edition 11g Release 2」です。 OSは「Windows Vista」になります。接続はローカル接続です。 以下コードです。最初の方の<HTML>らへんは無視して下さい。 import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; public class HelloServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<HTML>"); out.println("<BODY>"); out.println(new java.util.Date()); out.println("</BODY>"); out.println("</HTML>"); Class.forName ("oracle.jdbc.driver.OracleDriver"); Connection connection=DriverManager.getConnection("jdbc:oracle:oci8:@","system","pass"); } }

  • Tomcat6.0 日本語が?に文字化け

    HelloWorld!!はろぅわーるど!! と書いてコンパイルすると、IEの画面で HelloWorld!!????????? と表示されます。 日本語というよりは2バイト文字が文字化けしているのかなと思います。 何が足りないのでしょうか。 どなたかよろしくお願いします。 全文はこんな感じです。 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { PrintWriter out = response.getWriter(); out.println("<html>"); out.println("HelloWorld!!はろぅわーるど!!"); out.println("</html>"); out.close(); } }

  • HTMLからデータを受け取るサーブレットについて

    教本の教え通りにコードを記述してるつもりなんですが,うまくいきません。コンパイルもうまくいきtomcatでHTML画面からデータを送信してもサーブレットはうまく応えてくれません。どなたか教えてください。 (fromhtml_365.java) import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class fromhtml_365 extends HttpServlet{ public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,IOException{ res.setContentType("text/html; charset=shift_JIS"); PrintWriter out = res.getWriter(); out.println("<html><head>"); out.println("<title>サーブレットからパラメータを受信</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>受信したパラメータ</h1>"); out.println("<h2>"); out.println(req.getParameter("param")); out.println("</h2>"); out.println("</hody></html>"); } } (html_366.html) <HTML> <HEAD><TITLE>サーブレットにパラメータを送信</TITLE></HEAD> <BODY> <H1>サーブレットにパラメータを送信</H1> <FORM ACTION="/examples/servlet/fromhtml_365"> 送信パラメータ<INPUT TYPE="TEXT" NAME="param"><BR> <INPUT TYPE="SUBMIT" value="送信"> </FORM> </BODY> </HTML>

    • ベストアンサー
    • Java