出産前後の痔にはご注意!

JAVA初心者です。
Tomcat5.0をインストールしてサーブレットをコンパイルしようとするのですが以下のようなコメントが出て上手くいきません。
PATHの設定が原因だと思うのですがインターネットで色々調べたのですが分かりません。PATHの意味がいまいち分かっていませんがよろしくお願い致します。

システム環境変数は
CATALINA_HOME
C:\Program Files\Apache Software Foundation\Tomcat 5.0
JAVA_HOME
C:\Program Files\Java\jdk1.6.0_15

ユーザー変数は
変数名
path
変数値
c:\j2sdk1.4.2\bin

エラー内容が
c:\javasrc>javac HelloServlet.java
HelloServlet.java:5: パッケージ javax.servlet は存在しません。
import javax.servlet.*;
^
HelloServlet.java:6: パッケージ javax.servlet.http は存在しません。
import javax.servlet.http.*;
^
HelloServlet.java:8: シンボルを見つけられません。
シンボル: クラス HttpServlet
public class HelloServlet extends HttpServlet{
^
HelloServlet.java:10: シンボルを見つけられません。
シンボル: クラス HttpServletRequest
場所 : HelloServlet の クラス
public void doGet(HttpServletRequest req,HttpServletResponse res)
^
HelloServlet.java:10: シンボルを見つけられません。
シンボル: クラス HttpServletResponse
場所 : HelloServlet の クラス
public void doGet(HttpServletRequest req,HttpServletResponse res)
^
HelloServlet.java:11: シンボルを見つけられません。
シンボル: クラス ServletException
場所 : HelloServlet の クラス
throws IOException,ServletException {
^
エラー 6 個

になります。

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

A 回答 (5件)

#4です。

誤りがあったので訂正します。

例2)
誤 c:\javasrc><JAVA_HOME>\javac -classpath ......

正 c:\javasrc><JAVA_HOME>\bin\javac -classpath ......

<JAVA_HOME>はご自身の環境のjavaのインストールフォルダに置き換えて使用してくださいね
    • good
    • 1
この回答へのお礼

色々とご迷惑をお掛けしました。なんとか出来るようになったようです。おそらく再起動をかけたことによるのではないかと思っています。皆様、色々とご尽力頂き誠にありがとうございました。

お礼日時:2009/11/17 23:12

※説明の便宜上、sdkのインストールフォルダを<JAVA_HOME>としています。



>色々と試していたらjavacが認識されなくなりました。
>c:\javasrc>javac
>'javac' は、内部コマンドまたは外部コマンド、
>操作可能なプログラムまたはバッチ ファイルとして認識されていません。

何をしたのかわからないと認識されなくなった原因までははっきりしませんが
少なくとも言えるのは環境変数pathできられているフォルダに
javac.exeファイルが存在しない(あるいはそのフォルダ自体存在していない)ということです。
直すには環境変数pathに正しくjavac.exeファイルの存在するフォルダ(即ち「<JAVA_HOME>\bin」)を示してやる必要があります。

まぁ取り急ぎコンパイルするだけならわざわざPATHは通さなくてもよいですが‥。
例えば、cdコマンドで<JAVA_HOME>\binまで移動してjavac.exeを使用してもいいですし、
javac.exeを絶対パスで指定してもコンパイルできます。

例1)
<JAVAHOME>\bin>javac -classpath "C:\Program Files\Apache Software Foundation\Tomcat 5.0\common\lib\servlet-api.jar" "C:\javasrc\HelloServlet.java"
※コンパイルされたファイル(HelloServlet.class)は「<JAVAHOME>\bin」に作成されます。

例2)
c:\javasrc><JAVA_HOME>\javac -classpath "C:\Program Files\Apache Software Foundation\Tomcat 5.0\common\lib\servlet-api.jar" HelloServlet.java
※コンパイルされたファイル(HelloServlet.class)は「d:\javasrc」に作成されます。

例1、例2ともにtomcatのインストールフォルダが「C:\Program Files\Apache Software Foundation\Tomcat 5.0」の場合の話です。
    • good
    • 1

CATALINA_HOMEから想像するに、



javac -classpath "C:\Program Files\Apache Software Foundation\Tomcat 5.0\common\lib\servlet-api.jar" HelloServlet.java

でいけると思います、たぶん。
もしダメだったらTOMCATのインストール配下でservlet-ap.jarを探してその場所をclasspathに指定してください。

あと、
JAVA_HOMEのC:\Program Files\Java\jdk1.6.0_15

PATHのc:\j2sdk1.4.2\bin
から、少なくともJDKが2つ(1.6.0と1.4.2)インストールされているようですが、TOMCATはどちらで動くのでしょうか。
TOMCATを1.6.0で動かすならコンパイルも1.6.0でしておくべきです。
    • good
    • 1
この回答へのお礼

ありがとうございます。

色々と試していたらjavacが認識されなくなりました。
c:\javasrc>javac
'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

ユーザー環境変数が
path
C:\j2sdk1.4.2_04\bin

JAVA_HOME
C:\j2sdk1.4.2_04

システム環境変数が
Path
%SYSTEMROOT%\system32;%SYSTEMROOT%;%SYSTEMROOT%\COMMAND;%SYSTEMROOT%\system32\WBEM;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;c:\borland\bcc55\bin;%JAVA_HOME%\bin

私が思うにシステム環境変数の「JAVA_HOME」で
ユーザー環境変数の「JAVA_HOME」に飛んで「C:\j2sdk1.4.2_04」が認識されると思うのですがされません。また、そうであるならばユーザー環境変数のpathは必要ないと思うのですが・・。

振り出しに戻りましたがなかなか解決しません。どなたかお知恵を拝借出来ればと思います。

お礼日時:2009/11/15 22:28

javaxから始まるパッケージはjavaの拡張パッケージ(eXtended package)を表すので


基本的にはjdkに含まれていません。
※jdk 1.6ではjavax.jwsなどが含まれており、必ずしも含まれないわけではないようなんですが‥
 javax.jwsはJAX-WSの担当でJ2SEとは違うってことで、SUNの中では拡張として扱っているのかなぁ。わかりにくい。。

servletやjspなどはj2ee(=Java EE)の担務なので通常はAPサーバで提供しているjarを利用します。
tomcatの場合、servlet関連のパッケージはservlet-api.jarといった名前で提供されているので
それをクラスパスに含めればコンパイルが通るようになるはずです。

> 環境設定はなんでこんなに難しいのでしょうか。

慣れの問題でしょうが、TOMCATは文献も多いですし比較的楽なほうですよ。
PATHとかは必ずしもきる必要はないですし。(ていうかEclipseなどを使っていると
コンパイラやクラスパス(ビルドパス)はEclipse上で設定するから
最近はいちいち設定するほうが少ないと思いますよ)

これを生業としているのかは存じませんが、これで音をあげていると
後々もちませんよ。
    • good
    • 0
この回答へのお礼

ご協力ありがとうございます。

このままでは後々もたないかもしれません。家庭にも悪影響が出始めてきました。これを生業にはしていないのがせめてもの救いです。

お礼日時:2009/11/15 22:31

PATHは関係ありません。


PATHに「c:\j2sdk1.4.2\bin」と設定するのは、コマンドプロンプトで
c:\javasrc>javac HelloServlet.java
と打ったときに、"javac"というプログラムを見つけるためです。
c:\j2sdk1.4.2\binにPATHが通っているので、c:\j2sdk1.4.2\bin\javac.exeが見つかり、コンパイルができるわけです。PATHがないと「javacって何よ?」となります。

パッケージ javax.servlet は存在しません。
となるのはPATHではなくCLASSPATHの問題です。
質問者さんのプログラムは
import javax.servlet.*;
のようにjavax.servletパッケージを使用しているのに、それがどんなパッケージなのかをjavacに伝えていないからです。
CLASSPATHをキーワードにもう一度調べてみましょう。

参考URL:http://java-house.jp/ml/archive/j-h-b/021880.html

この回答への補足

システムの復元をして、何とか振り出しに戻りました。
相変わらずエラー6個の壁が高い・・。

補足日時:2009/11/12 23:48
    • good
    • 0
この回答へのお礼

ありがとうございます。

システム環境変数を変更していたら症状が悪化しました。
コンパイルが出来なくなり下記のメッセージが出るようになりました。
基に戻しても治らないようです。

c:\javasrc>javac HelloServlet.java
'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

ユーザー変数は
path
c:\j2sdk1.4.2\bin

システム環境変数は
CATALINA_HOME
C:\Program Files\Apache Software Foundation\Tomcat 5.0

JAVA_HOME
C:\Program Files\Java\jdk1.6.0_15

環境設定はなんでこんなに難しいのでしょうか。

お礼日時:2009/11/12 23:10

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

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

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

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

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

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になっていますね。
これはエラー表示をよく見ることで意外と簡単に解決できるのです。
ゆっくり丁寧にエラー表示を見るように心がけることが大事ですよ。

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同一パッケージにあるクラスが見つからないエラー

Tomcatとeclipseを用いてjspによるウェブアプリ開発の勉強をしているものです。

tagsrch.java内のメソッドに、同一パッケージ(フォルダ名:mangasearch)内のmangalist.javaで定義したmangaクラスというクラスを使いたいのですが、以下のように、シンボルが見つけられないというエラーが出てしまいます。

C:\(中略)\mangasearch>javac tagsrch.java
tagsrch.java:11: エラー: シンボルを見つけられません
public static List<manga> searchByKey(String k[]) throws IOException{
^
シンボル: クラス manga
場所: クラス tagsrch
tagsrch.java:14: エラー: シンボルを見つけられません
manga[] list = new manga[cnum];


同一パッケージ内に置かれている以上、tagsrch.javaにおいてmangaクラスが使えるはずだと思います。
ですが、いろいろなサイトを参考にして試してもmangaクラスが見つからないまま、tagsrch.javaがコンパイルできません。

初歩的質問で申し訳ありませんが、よろしくお願いいたします。


-参考-
1.いろいろ試したこと
 1-1.カレントディレクトリを保存している場所より1つ上の場所でコンパイルする。
 eclipseでtomcatプロジェクトを作成したため、どのクラスファイルにもpackage mangasearch;が含まれていました。なので1-1.を行い「javac パッケージ名/ファイル名」でコンパイルしてみました。

 1-2.クラスパスを入れてコンパイルしてみる。
 同一パッケージ内なので、この必要はないはずですが、
 C:\(中略)\mangasearch>javac -classpath C:\(中略)\mangasearchでコンパイルしてみました。
 
下記のURLを参考にこの対策を講じましたが、エラーは変わりませんでした。
 1-1.1-2.の参考URL:http://oshiete.goo.ne.jp/qa/2520327.html

 1-3.メソッドをmangalist.java(mangaクラス)上で定義してしまう。
 分割をあきらめ、tagsrch.java上のメソッドをmangalist.javaのmangaクラス上に定義してみました。
publicつけたままだと、
C:\(中略)\mangasearch>javac mangalist.java
mangalist.java:76: エラー: クラスtagsrchはpublicであり、ファイルtagsrch.javaで宣
言する必要があります

となったため、publicをとりました。するとコンパイルは出来ましたが、おそらく異なるパッケージからは使えないクラスとなったため、jsp上でアクセスできないというエラーが発生しました。
org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.IllegalAccessError: mangasearch/tagsrch

このため、分割してtagsrch.javaを宣言する必要があり、1-3.の対策では最初にあげたmangaクラスを認識する問題に帰着すると思われます。


2.mangalist.java/tagsrch.javaについて
mangalist.javaのコンパイルはできています。
mangalist.javaは、ただ単にmangaクラスとそれに付随するフィールド、コンストラクタを記述しただけのファイルです。

■mangalist.java
package mangasearch;
class manga{
フィールド名
・・・
   manga(){
   //コンストラクタ
   }
}

■tagsrch.java
public class tagsrch extends manga{
メソッド{
    }
}

Tomcatとeclipseを用いてjspによるウェブアプリ開発の勉強をしているものです。

tagsrch.java内のメソッドに、同一パッケージ(フォルダ名:mangasearch)内のmangalist.javaで定義したmangaクラスというクラスを使いたいのですが、以下のように、シンボルが見つけられないというエラーが出てしまいます。

C:\(中略)\mangasearch>javac tagsrch.java
tagsrch.java:11: エラー: シンボルを見つけられません
public static List<manga> searchByKey(String k[]) throws IOException{
...続きを読む

Aベストアンサー

> 1-2.クラスパスを入れてコンパイルしてみる。
>  同一パッケージ内なので、この必要はないはずですが、
>  C:\(中略)\mangasearch>javac -classpath C:\(中略)\mangasearchでコンパイルしてみました。

javacでコンパイルするなら、
classpath/パッケージ/クラス
と探すので、これだと、
C:\(中略)\mangasearch/mangasearch/manga.class
を探しにいっちゃいますよ。
classpathに指定するディレクトリを、もう1つ上の階層にしてみてください。

eclipseとjavacとどっちを使いたいのはわからないのですが、
eclipseなら
プロジェクト名/src/mangasearch/mangalist.java
プロジェクト名/src/mangasearch/tagsrch.java
になってますか?

Qサーブレットをeclipseで作りたい

ですが

////////////////////////////////////////
package member;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
・・・・・・・・・・・・・・・・・・・・・・・
////////////////////////////////////////

をeclipseのエディタに書くと

import javax.servlet.*;

import javax.servlet.http.*;

javax.servlet
の下に赤の波線がつきます。
どうも
javax.servlet.*;

javax.servlet.http.*;
を認識できないようです。
これらを認識できるようにするにはどうしたらいいのでしょうか?

Aベストアンサー

#2です。
「tomcatPluginV31.zip」
内に「servlet.jar」(若しくはjavax.servletパッケージなど)が入っているのか分かりませんが、
調べたところ「tomcatPluginV31.zip」は
Eclipseとtomcatを連携するためのものです。

即ち、別途tomcatが必要みたいです。
※参照サイトにも書かれていました。

また、仮にコンパイルできたとしても、
試験を行うにはtomcat(またはWebApplicationServer)が必要になります。

参考URL:http://www.develop-memo.com/java/eclipseplugin/tomcatplugin.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

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は、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

Qservletのコンパイルエラーについて

Apache Tomcat 5.5.12にてサンプルプログラムHelloWorld .javaをコンパイルするとエラーが出てしまいます。

HelloWorldServlet.java
HelloWorldServlet.java:2: ';' がありません。
import javax.servlet-api.*;
^

CLASSPATHなどの設定も一通りサイトを参照して設定してみました。

CLASSPATH
.;C:\Program Files\Java\jdk1.5.0_07\lib\tools.jar;C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib\servlet-api.jar

CATALINA_HOME
C:\Program Files\Apache Software Foundation\Tomcat 5.5

PATH
C:\Program Files\Java\jdk1.5.0_07\bin

JAVA_HOME
C:\Program Files\Java\jdk1.5.0_07

JAVA初心者なので調べてみましたが解決にはいたりませんでした。
よろしかったらご教授のほどよろしくお願い致します。

Apache Tomcat 5.5.12にてサンプルプログラムHelloWorld .javaをコンパイルするとエラーが出てしまいます。

HelloWorldServlet.java
HelloWorldServlet.java:2: ';' がありません。
import javax.servlet-api.*;
^

CLASSPATHなどの設定も一通りサイトを参照して設定してみました。

CLASSPATH
.;C:\Program Files\Java\jdk1.5.0_07\lib\tools.jar;C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib\servlet-api.jar

CATALINA_HOME
C:\Program Files\Apache...続きを読む

Aベストアンサー

こんばんわ
>Apache Software Foundation\Tomcat 5.5\common\libの配下には
>servlet.jarは無くservlet-api.jarならあります、
Tomcat5からはservlet-api.jarになったのは知っていますが
APIのパッケージまで変わったという記憶はありません。
servlet-api.jarをzip解凍して、本当にjavax\servlet-api\という
フォルダが含まれているか一度確認したほうがいいのではないでしょうか。
ちなみに当方のTomcat5.5.17にはcommon\lib\servlet-api.jarはありますが
その中にjavax.servlet-apiというパッケージは含まれておりません。

ソースも以下で動くと思います。

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

public class HelloWorldServlet extends HttpServlet {
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// ContentTypeを設定
response.setContentType("text/html; charset=Shift_JIS");
// 出力用PrintWriterを取得
PrintWriter out = response.getWriter();
// 出力
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("Hello World");
out.println("</body>");
out.println("</html>");
}
}

こんばんわ
>Apache Software Foundation\Tomcat 5.5\common\libの配下には
>servlet.jarは無くservlet-api.jarならあります、
Tomcat5からはservlet-api.jarになったのは知っていますが
APIのパッケージまで変わったという記憶はありません。
servlet-api.jarをzip解凍して、本当にjavax\servlet-api\という
フォルダが含まれているか一度確認したほうがいいのではないでしょうか。
ちなみに当方のTomcat5.5.17にはcommon\lib\servlet-api.jarはありますが
その中にjavax.servlet-apiというパッケージは...続きを読む

QJava-jspの画面入力値保持について

画面にテキスト、ラジオボタン、リストボックス とボタンがあります。
ボタンを押すと、JAVAで処理を行い、jspのviewで表示します。

1.テキスト、ラジオボタン、リストボックスなどに値が入力、設定されている状態で
ボタンを押して処理後にテキスト、ラジオボタン、リストボックスの値が
変わらないようにしたいのですが、
その場合、たとえば、入力、設定値をセッションになどに格納しておき
jspの所で、セッションから値を設定すると言うような方法になるのでしょうか?

2.ボタン押して処理後、ラジオボタン、リストボックスの選択値も
  変えないようにしたいのですが、
  これはどのように実現するのが、適切なのでしょうか?


以上、よろしくお願いします。

Aベストアンサー

ボタンというのはフォームのサブミットボタンのことですよ?
つまり、画面遷移が起きることを前提とすると(元の同じ画面に戻るのも含みます)

テキスト、ラジオボタン、リストボックスの状態を「要求パラメータ」として
送信し、それを次画面に反映するというのが最も一般的な方法です。

フレームワーク struts のアクションフォーム&JSPカスタムタグを使うと比較的楽に
そういう画面が作れますが、多くのフレームワークでも大差ありません。
簡単な画面なら素のサーブレート+JSPでも十分作れます。

セッションでもできますが、 セッションはログイン情報などの保持など、
限定された範囲で使うのが普通です。また、結局セッションに最新の
テキスト、ラジオボタン、リストボックスの状態を送るには、「要求パラメータ」
を送信する必要があります。

AJAXを使うという方法もあります。この場合、ボタンは AJAX 処理だけを行い
画面遷移を起こさないので、サーバ側で画面のテキスト、ラジオボタン、
リストボックスの状態をもつ必要はありません。

QJSPの処理の途中で、JavaScriptの処理をしたい

プログラムをJSPで記述している(<% %>タグ)のですが、
JavaScriptのalertやconfirmなどのポップアップするダイアログを
表示したいのです。それは可能なのでしょうか?

Aベストアンサー

No.2の回答に対する回答(変な日本語ですが)です。

JSPとJavaScriptの処理の行われる順番について考えていないと
エラーになることがありますよ。
大まかな流れは、
 JSPのソースをサーバ側で解釈、実行する(HTMLのソースを吐き出す)
  ↓
 クライアントに生成したソースを送信する
  ↓
 クライアント側のブラウザがソースを解釈する
  ↓
 ソースの中のJavaScriptを、ソースの上のほうから順次実行する
  ↓
 同時に、通常の表示(HTMLの解釈)も実行される

 と、こういう流れですので、例えば、JavaScriptで値を入力し、
JSPでその値を使おうとすると、エラーとなります。

 具体的にやりたいこと(やろうとしていること)を書いていただいたほうが
適切に回答できますが、上記が今考えられるエラーの原因です。

Qinterface,extend,implementのちがい

お世話になります、

Javaを勉強しているのですが、
interface,extend,implementの使い分けがわかりません。

私の解釈としては、
(1)interfaceは、グローバル変数の定義、グローバルメソッドの定義(実装はしない)。

(2)extendは、extendクラスを親クラスとして親クラスの機能を使用できる。

(3)implementは…,implementもextendと同じような意味だと解釈しているんですが、違う点は、implementで定義してあるメソッドは、使用しなくても、実装しなければならないという点でしょうか?

とにかくこの3つのを使い分けるコツとかあれば教えてください。
よろしくお願いします。

Aベストアンサー

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば、getStringLength()メソッドなどが
あったほうが良いでしょうか。
このgetStringLength()メソッドは、2バイト文字も1バイト文字も「1文字」
と数えてくれると言う点で、まさに、日本語クラス用のメソッドだと言えるでしょう。

例えば、Java的に記述すると、、、
class Japanese {
public int getStringLength() {
  ・・・
return strlength;
 }
 ・・・
}

class TextField {
・・・
}

class JTextField extends TextField, extends Japanese {
・・・・
}

C++ではそのように実装するでしょう。
しかし、Javaにはこのような高度な機能はありません。

そこで、生まれた苦肉の策が、「interfaceとimplements」です。

interface Japanese {
public int getStringLength(); // interfaceは実装を含まない!
                 // すなわち「実装の継承」ができるわけではない。
}

class TextField {
・・・
}

class JTextField extends TextField implements Japanese {
・・・・
public int getStringLength() {
  ・・・
return strlength; //implementsの実装を「各クラスで」実装してやる必要がある。
 }
}


結局のところ、Javaでは、複数のクラスを親クラスには持ち得ないため、継承できなかったクラスは「各クラスで実装してやる必要性」があるのです。


ではどのように使うのが効果的か?

なまえのままです。「代表的なインターフェイス」にたいしてinterfaceを使うのが良いと思います。

例えば、プレイヤー系であれば、ビデオ・コンポ・ウォークマン・などにかかわらず、
interface controlpanel {
public play();
public stop();
public next();
public back();
}
というような基本的インターフェイスを「持っているべき」です。

こうすることで、それぞれのクラス宣言の際に、これらの「インターフェイスを持っているべきであり、実装されるべきである」ということを「強く暗示」することができます。
class videoplayer extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

こうすることで、同様のクラスを作成するユーザーは、
「プレイヤー系は、4つ操作が出来るコントロールパネルをインターフェイスとして持つべきなのだな!?」という暗示を受け取り、自分のクラスでもそれを模倣するでしょう。

class mp3player extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

また、これらのクラスを使用するユーザーも、「implements controlpanel」という
表記を見て、「4つの基本操作は押さえられているのだな!」という基本中の基本動作を抑えることが出来ます。

まとめると、クラスに「こういう特徴もたしてください!」「こういう特徴持ってますよ!」という一種の暗示的警告や方向性を与えることができるわけですね。

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば...続きを読む


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

人気Q&Aランキング