JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 新手區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 請問一下繼承對package的問題..
hyjude





發文: 16
積分: 0
於 2003-09-12 16:22 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我有兩支class都放在Bean的目錄下,內容如下:
aaa.java:
1
2
3
4
public class aaa{
xxxxx
xxxxx
}


bbb.java:
1
2
3
4
public class bbb extends aaa{
xxx
xxx
}

這樣子在Bean目錄下去compiler並沒有問題....但是在jsp要使用時就出問題了...
在jsp中的寫法是這樣:
<jsp:useBean id="bbb" scope="page" class="Bean.bbb" />
隨後跑出來的error message就是這樣:
Note: sun.tools.javac.Main has been deprecated.
D:\resin-2.1.10\webapps\java_demo\WEB-INF\classes\Bean\bbb.java:4:
Superclass aaa of class bbb not found.
public class bbb extends aaa{
^
1 error, 1 warning

我是覺得class都沒問題,那是不是在jsp的寫法要改變一下呢?


tekwei edited on 2005-08-21 20:39
reply to postreply to post
作者 Re:請問一下繼承對package的問題.. [Re:hyjude]
黑輪





發文: 42
積分: 0
於 2003-09-12 16:36 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
D:\resin-2.1.10\webapps\java_demo\WEB-INF\classes\ <--把你的.class放到這裡來

還有
在jsp中的要改寫成這樣:
<jsp:useBean id="bbb" scope="page" class="bbb" />

順便建議你先瞭解一下package的設定問題
因為這些都還蠻基本的


黑輪 edited on 2003-09-12 16:39
reply to postreply to post
作者 Re:請問一下繼承對package的問題.. [Re:hyjude]
hyjude





發文: 16
積分: 0
於 2003-09-12 16:44 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
ㄟ....我的本意就是想把這兩支放在Bean目錄下耶...
然後用jsp去D:\resin-2.1.10\webapps\java_demo\WEB-INF\classes\Bean
去執行他們,而且我也看過有人用<jsp:useBean id="bbb" scope="page" class="Bean.bbb" />的用法,只是沒有用過繼承的方式去使用罷了,所以我的問題
是當遇到有繼承的class時,jsp要使用使用繼承的class會有什麼問題...


reply to postreply to post
作者 Re:請問一下繼承對package的問題.. [Re:hyjude]
黑輪





發文: 42
積分: 0
於 2003-09-12 17:25 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
你的錯誤是位置放錯了
或者是說
你的 bbb.java 和 aaa.java 都不是在Bean這一個package裡面, 所以你那樣的使用方法當然會錯


reply to postreply to post
作者 Re:請問一下繼承對package的問題.. [Re:hyjude]
hyjude





發文: 16
積分: 0
於 2003-09-12 17:28 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
使用方法錯了?如果不使用Bean目錄,放在classes中是對的,你指的是這
個意思嗎?


reply to postreply to post
作者 Re:請問一下繼承對package的問題.. [Re:hyjude]
黑輪





發文: 42
積分: 0
於 2003-09-12 18:21 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
package 的介紹http://www.javaworld.com.tw/jute/post/view?bid=29&id=9552&sty=1&tpg=3&age=0

reply to postreply to post
作者 Re:請問一下繼承對package的問題.. [Re:hyjude]
Yoshi

塵世中一個迷途小書僮

版主

發文: 874
積分: 22
於 2003-09-13 00:30 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
hyjude wrote:
使用方法錯了?如果不使用Bean目錄,放在classes中是對的,你指的是這
個意思嗎?


你想把class檔放在WEB-INF/classes/bean/中, 就應該要把class設上package bean;
這樣這個類別的完整名稱就是 bean.AAAClass
不然你class愛放在哪個目錄就哪個目錄, 你要是放在bean/bean/bean/bean/裡面
你卻只說了你要使用 AAAClass, 它怎麼知道要去哪裡找?

還有, 不建議直接放在 WEB-INF/classes中, 雖然這在Resin可以正常執行
但是現在新的tomcat使用default package(也就是不指定package)已經無法正常運作了
我記得我看specification裡提到, 原因是因為jdk1.4已經不支援import指令直接import classname, 強迫一定要有package(也就是一定要有一個".")才行.

說了那麼多, 你應該做的事是
1.把你寫的class最前面加上
1
package bean;

2.把你的bean放在 WEB-INF/classes/bean裡
3.在使用這個bean時, 語法是
<jsp:useBean id="myBean" class="bean.AAAClass" />


reply to postreply to post
YOSHI!
作者 Re:請問一下繼承對package的問題.. [Re:hyjude]
hyjude





發文: 16
積分: 0
於 2003-09-13 01:58 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
to Yoshi:
您說的方法我知道,但你們誤解我的意思了..我的bbb.class有繼承aaa.class,
當然我在aaa.class跟bbb.class都有加"package bean;",aaa.class可以compiler
過去,但是bbb.class卻不行,兩個class都是放在同一個目錄bean下面的...
我想說的是這樣子的問題.....


reply to postreply to post
作者 Re:請問一下繼承對package的問題.. [Re:hyjude]
Duncan

還隱隱作痛

版主

發文: 7816
積分: 39
於 2003-09-13 02:04 user profilesend a private message to usersend email to Duncanreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
hyjude wrote:
to Yoshi:
您說的方法我知道,但你們誤解我的意思了..我的bbb.class有繼承aaa.class,
當然我在aaa.class跟bbb.class都有加"package bean;",aaa.class可以compiler
過去,但是bbb.class卻不行,兩個class都是放在同一個目錄bean下面的...
我想說的是這樣子的問題.....


我大概看懂你的意思了。

假設你的 aaa.class/bbb.class 是產生在 %HOME%/bean 目錄下,那麼請你到 %HOME% 這個目錄去執行你的程式,或是讓 classpath 包含 %HOME% 這個目錄,但是不要有目前目錄 . 為 classpath 的一個 entry,那麼就可以在 %HOME%/bean 目錄下執行你的程式。


reply to postreply to post

給我
辣味豆腐 其餘免談
作者 Re:請問一下繼承對package的問題.. [Re:hyjude]
hyjude





發文: 16
積分: 0
於 2003-09-13 02:23 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
意思就是我要這樣子設囉:
set classpath=.;D:\resin-2.1.10\webapps\java_demo\WEB-INF\classes
然後我在兩個class中都加入package bean;
接著我在jsp中的javabean tag用<jsp:useBean id="bbb" scope="page" class="bean.bbb" />
是這樣子的嗎?


reply to postreply to post
作者 Re:請問一下繼承對package的問題.. [Re:hyjude]
Yoshi

塵世中一個迷途小書僮

版主

發文: 874
積分: 22
於 2003-09-13 02:28 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
hyjude wrote:
意思就是我要這樣子設囉:
set classpath=.;D:\resin-2.1.10\webapps\java_demo\WEB-INF\classes
然後我在兩個class中都加入package bean;
接著我在jsp中的javabean tag用<jsp:useBean id="bbb" scope="page" class="bean.bbb" />
是這樣子的嗎?


節錄自某本書
1
2
3
4
5
• classes directory. The servlet class files and the class files needed to support the
servlets or JSP pages of this web application go in this directory if they have not
been included in a JAR file. The class files should be organized according to their
packages. At runtime, the servlet container adds this directory to the 
classpath for this web application.


我還是覺得很奇怪, 我剛剛使用了resin2.1.10做實驗
我也只是照著我說的步驟, 也模擬了你的繼承情況
我卻一點問題都沒有遇到?
能不能把你的二個.java檔post出來?


reply to postreply to post
YOSHI!
作者 Re:請問一下繼承對package的問題.. [Re:hyjude]
Duncan

還隱隱作痛

版主

發文: 7816
積分: 39
於 2003-09-13 02:50 user profilesend a private message to usersend email to Duncanreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
hyjude wrote:
意思就是我要這樣子設囉:
set classpath=.;D:\resin-2.1.10\webapps\java_demo\WEB-INF\classes
然後我在兩個class中都加入package bean;
接著我在jsp中的javabean tag用<jsp:useBean id="bbb" scope="page" class="bean.bbb" />
是這樣子的嗎?


classpath 其實不難,你在一個 class source file 裡若是有宣告 package 比如:
package bean;

那麼在編譯時或執行程式時需要參考這個 class,那麼 classpath 裡必定要有一個指定的目錄,其下有個 bean 子目錄,而此 class 的 bytecode file .class 在這個 bean 目錄下(但要注意搜尋的順序,即 classpath entry 的先後順序),或是 classpath 所指定的 jar file 裡,有個 bean/ClassName.class 檔案。


reply to postreply to post

給我
辣味豆腐 其餘免談
作者 Re:請問一下繼承對package的問題.. [Re:hyjude]
hyjude





發文: 16
積分: 0
於 2003-09-13 03:18 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
dbconn.class:
package Bean;
import java.sql.*;
import java.io.*;
 
public class dbconn{
  public Connection myConn = null;
 
  // 連結資料庫
//  public void makeConnection(String myDriver, String myURL, String myID, String myPassword) throws Exception{
//    Class.forName(myDriver);
//    myConn = DriverManager.getConnection(myURL, myID, myPassword);
//  }
  public void makeConnection() throws Exception{
    String myDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
    String myURL = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test_db";
    String myID = "test",myPassword = "test";
 
    Class.forName(myDriver);
    myConn = DriverManager.getConnection(myURL, myID, myPassword);
  }
}
 
SqlCmdClass.class:
package Bean;
import java.io.*;
import java.sql.*;
 
public class SqlCmdClass extends dbconn{
  ResultSet rst = null;
  Statement smt = null;
 
  public SqlCmdClass(){}
 
  public boolean getSmt(String mySQL) throws Exception{
    makeConnection();
    smt = myConn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
    rst = smt.executeQuery(mySQL);
    return (rst != null);
  }
 
  // 取得Field資料,以分頁方式表示
  public boolean getNextRs(int StartRow,int EndRow) throws Exception{
    if(StartRow<=EndRow){
      if(StartRow==1){
        return rst.next();
      }else{
        rst.absolute(StartRow-1);
        return rst.next();
      }
    }else{
      return false;
    }
  }
 
  // 取得資料總筆數
  public int TotalRow(String mySQL) throws Exception{
    makeConnection();
    smt = myConn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
    rst = smt.executeQuery(mySQL);
 
    if(rst.isAfterLast() || rst.isBeforeFirst()){
        rst.last();
        return rst.getRow();
    }else{
        return rst.getRow();
    }
  }
 
  // 取得Column欄位資料
  public String getColumn(String colName) throws Exception{
    return rst.getString(colName);
  }
 
  // 新增,刪除,修改 資料的 SQL Function
  public boolean SqlFun(String myDriver, String myURL, String myID, String myPassword, String SqlCmd) throws Exception {
    makeConnection();
    Statement smt = myConn.createStatement();
    boolean x;
 
      if(smt.executeUpdate(SqlCmd)!=0){
        x = true;
      }else{
        x = false;
      }
      smt.close();
      myConn.close();
      return x;
  }
 
  // 關閉所有的連結資源
  public void dbclose() throws Exception{
    smt.close();
    myConn.close();
  }
}


tekwei edited on 2005-08-21 20:39
reply to postreply to post
作者 Re:請問一下繼承對package的問題.. [Re:hyjude]
Yoshi

塵世中一個迷途小書僮

版主

發文: 874
積分: 22
於 2003-09-13 04:48 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
hyjude wrote:

// 關閉所有的連結資源
public void dbclose() throws Exception{
smt.close();
myConn.close();
}
}


Sorry, 我已經盡力了, 真的幫不了你..
我把你的code直接複製下來並且放到該放的位置
useBean也沒有出現任何的錯誤訊息...Black Eye


reply to postreply to post
YOSHI!
作者 Re:請問一下繼承對package的問題.. [Re:hyjude]
hyjude





發文: 16
積分: 0
於 2003-09-13 17:29 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我解決了...應該要這麼說:在同一個目錄下可以不用package的用法,但是這樣會造成jsp在使用其目錄下的class時會有找不到的情況發生,所以我在classpath加入"D:\resin-2.1.10\webapps\java_demo\WEB-INF\classes",這樣子jsp就可以很順利的跑了,但是我有個疑問就是,如果我又在Bean目錄下建目錄呢?那我不就得一直加path給classpath嗎?這樣子做法不是很不方便....各位懂我說的意思嗎?

reply to postreply to post
作者 Re:請問一下繼承對package的問題.. [Re:hyjude]
hyjude





發文: 16
積分: 0
於 2003-09-13 17:42 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我剛試了幾個方式,結果是以下這個方法一定正確:
一開始把"D:\resin-2.1.10\webapps\java_demo\WEB-INF\classes"加到classpath,這樣一來不管在底下建立多少目錄都可以compiler,但是所有class一定要用package才行,不然jsp會找不到指定的class去使用的...

我解釋的意思是這樣子,不知各位還有要加的解釋嗎?


reply to postreply to post
作者 Re:請問一下繼承對package的問題.. [Re:hyjude]
Duncan

還隱隱作痛

版主

發文: 7816
積分: 39
於 2003-09-14 00:30 user profilesend a private message to usersend email to Duncanreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
hyjude wrote:
我剛試了幾個方式,結果是以下這個方法一定正確:
一開始把"D:\resin-2.1.10\webapps\java_demo\WEB-INF\classes"加到classpath,這樣一來不管在底下建立多少目錄都可以compiler,但是所有class一定要用package才行,不然jsp會找不到指定的class去使用的...

我解釋的意思是這樣子,不知各位還有要加的解釋嗎?


這跟我最後一篇講的有什麼不一樣?


reply to postreply to post

給我
辣味豆腐 其餘免談
» JWorld@TW »  Java 新手區

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8