2005年9月27日
#
http://www.hibernate.org/hib_docs/reference/zh-cn/html/queryhql.html#queryhql-select
查詢可以返回任何值類型的函數(shù),
select子句選擇在結(jié)果集中返回哪些對象和屬性。思考一下下面的例子:
select mate
from eg.Cat as cat
inner join cat.mate as mate
這個查詢會選擇出作為其它貓(Cat)朋友(mate)的那些貓。當(dāng)然,你可以更加直接的寫成下面的形式:
select cat.mate from eg.Cat cat
你甚至可以選擇集合元素,使用特殊的elements功能。下面的查詢返回所有貓的小貓。
select elements(cat.kittens) from eg.Cat cat
查詢可以返回任何值類型的屬性,包括組件類型的屬性:
select cat.name from eg.DomesticCat cat
where cat.name like 'fri%'
select cust.name.firstName from Customer as cust
查詢可以用元素類型是Object[]的一個數(shù)組返回多個對象和/或多個屬性。
select mother, offspr, mate.name
from eg.DomesticCat as mother
inner join mother.mate as mate
left outer join mother.kittens as offspr
或者實際上是類型安全的Java對象
select new Family(mother, mate, offspr)
from eg.DomesticCat as mother
join mother.mate as mate
left join mother.kittens as offspr
上面的代碼假定Family有一個合適的構(gòu)造函數(shù)。
1.BCPの引數(shù)
bcp ユーティリティは、ユーザーが指定した形式で、データを Microsoft? SQL Server? 2000 とデータ ファイルとの間でコピーします。
構(gòu)文
bcp {[[database_name.][owner].]{table_name | view_name} | "query"}
{in | out | queryout | format} data_file
[-m max_errors] [-f format_file] [-e err_file]
[-F first_row] [-L last_row] [-b batch_size]
[-n] [-c] [-w] [-N] [-V (60 | 65 | 70)] [-6]
[-q] [-C code_page] [-t field_term] [-r row_term]
[-i input_file] [-o output_file] [-a packet_size]
[-S server_name[\instance_name]] [-U login_id] [-P password]
[-T] [-v] [-R] [-k] [-E] [-h "hint [,...n]"]
使用法 : bcp {dbtable | query} {in | out | queryout | format} datafile
[-m maxerrors] [-f formatfile] [-e errfile]
[-F firstrow] [-L lastrow] [-b batchsize]
[-n native type] [-c character type] [-w wide character type]
[-N keep non-text native] [-V file format version] [-q quoted identifier]
[-C code page specifier] [-t field terminator] [-r row terminator]
[-i inputfile] [-o outfile] [-a packetsize]
[-S server name] [-U username] [-P password]
[-T trusted connection] [-v version] [-R regional enable]
[-k keep null values] [-E keep identity values]
[-h "load hints"]
大切な引數(shù)の説明:
① [-S server name]
-S server_name[\instance_name]
接続先の SQL Server のインスタンスを指定します。
サーバー上の SQL Server の既定のインスタンスに接続する場合は、server_name を指定します。
サーバー上の SQL Server 2000 の名前付きインスタンスに接続する場合は、server_name\instance_name
を指定します。サーバーが指定されない場合は、ローカル コンピュータ上の SQL Server の既定の
インスタンスに接続されます。ネットワーク上のリモート コンピュータから bcp を?qū)g行するときは、このオプションが必要です。
② [-U username]
-U login_id
SQL Server への接続に使用されるログイン ID を指定します。
③ [-P password]
-P password
ログイン ID のパスワードを指定します。このオプションを指定しないと、bcp はパスワードを問い合わせます。
また、このオプションをコマンド プロンプトの最後にパスワードなしで使用すると、デフォルトのパスワード (NULL) が使用されます。
④ {in | out | queryout | format} datafile
in | out | queryout | format
一括コピーする方向を指定します。
in は、ファイルからデータベース テーブルまたはビューにコピーします。
out は、データベース テーブルまたはビューからファイルにコピーします。
queryout は、クエリからデータの一括コピーを行う場合に指定します。
format オプションは、指定したオプション (-n、-c、-w、-6、-N のいずれか) とテーブルまたはビューの區(qū)切り記號に
基づいてフォーマット ファイルを作成します。format を使用する場合、-f オプションも指定する必要があります。
注 Microsoft SQL Server 6.5 の bcp ユーティリティの場合、sql_variant 型または bigint 型のデータを含む
テーブルへの一括コピーはサポートされません。
⑤ [-c character type]
2.例
setEnv.cmdの內(nèi)容:
set DBUSER=lamsec
set DBPASSWORD=lamsec
set DBSERVER=lam-test-server
入力のコマンドファイルの內(nèi)容:
call setEnv.cmd
bcp tempdb..custom IN F:\bcp\CZYTAB.TXT -U%DBUSER% -P%DBPASSWORD% -S%DBSERVER% -c
出力コマンドファイルの內(nèi)容:
call setEnv.cmd
bcp tempdb..custom OUT F:\bcp\CZYTAB.TXT -U%DBUSER% -P%DBPASSWORD% -S%DBSERVER% -c
開始Tomcat用的是mail.jar的1.3.1的版本,但是單獨跑的時候用的1.3.3的版本
結(jié)果就不一樣了:S
當(dāng)今mail服務(wù)器大多都是通過認(rèn)證才能發(fā)信的,現(xiàn)在的網(wǎng)上介紹javamail發(fā)信的文章都沒有深入到有關(guān)認(rèn)證的方面,除非自己裝一個open
relay的mail服務(wù)器,但是這樣有很危險,本人根據(jù)自己工作中用的javamail的方法說一下自己的用法,不對的地方請大家多指教.
首先設(shè)置屬性Properties props = new Properties();
props.put("mail.smtp.host",host);
props.put("mail.smtp.auth","true");注意的是此處必須加上true要不然stmp連接的時候不會認(rèn)證
用Authenticator寫認(rèn)證類下面是本人的認(rèn)證類
package org.xxx;
import javax.mail.*;
import javax.mail.internet.*;
public class PopupAuthenticator extends Authenticator{
String username=null;
String password=null;
public PopupAuthenticator(){}
public PasswordAuthentication performCheck(String user,String pass){
username = user;
password = pass;
return getPasswordAuthentication();
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
}
認(rèn)證類寫完后,在發(fā)信的程序中加上
PasswordAuthentication pop = popAuthenticator.performCheck(username,password);
Session mysession=Session.getInstance(props,popAuthenticator);
mailsession加的popAuthenticator
其他的方法和javamail發(fā)信的用法相似,在此不累述。
http://www.cn-java.com/target/news.php?news_id=1511
JavaMail常見問題
一般問題
安裝和配置
編程
閱讀郵件——IMAP
發(fā)送郵件——SMTP
POP3
servlet 中的 JavaMail
applet 中的 JavaMail
一般問題
問. 什么是 JavaMail API?
答:JavaMail
API 是一組抽象的 API,它可用于構(gòu)建郵件系統(tǒng)。API 提供了一個平臺無關(guān)以及協(xié)議無關(guān)的框架,用于構(gòu)建基于 Java
技術(shù)的電子郵件客戶端應(yīng)用程序。JavaMail API 提供了一些工具,用于閱讀和發(fā)送電子郵件。服務(wù)提供程序?qū)崿F(xiàn)了特定的一些協(xié)議。在
JavaMail API 軟件包中,包括了幾個服務(wù)提供程序;另外還有其他的一些服務(wù)提供程序可供使用。JavaMail API 是作為 Java
可選包實現(xiàn)的,它可用在 JDK 1.1.6 中,以后還可用在任何操作系統(tǒng)上。JavaMail API 也是 Java 2 Platform, Enterprise Edition (J2EE) 中的必需部分。
問. 我如何獲得 JavaMail API 的實現(xiàn)?
答: Sun 提供了無版權(quán)的參考實現(xiàn)(二進(jìn)制形式),開發(fā)人員可以使用和發(fā)行。參考實現(xiàn)包括核心的 JavaMail 包 和 IMAP、POP3 和 SMTP 服務(wù)提供程序。
問. 我如何發(fā)送反饋或評論?
答:發(fā)送電子郵件到 javamail@Sun.COM。也可以考慮加入我們的低容量通告郵件列表 (low-volume announce mailing list) javamail-announce@java.sun.com。在我們的 Web 頁 http://java.sun.com/products/javamail 中有關(guān)于如何加入的說明。
問. javax.activation 在哪里?
答: javax.activation
是 JavaBeans Activation Framework (JAF) 的一部分。JAF 是 JavaBeans "Glasgow" 規(guī)范的一部分(參見 http://java.sun.com/beans/glasgow/jaf.html)。JavaMail API 將 JAF 用于數(shù)據(jù)內(nèi)容處理。
問. JavaMail API 需要什么 JDK?
答:JavaMail
API 要求 JDK/JRE 1.1.x 或更高版本。我們已經(jīng)在 Sun Microsystems JDK 1.1.6 至 JDK 1.1.7
上測試過這個實現(xiàn),而這些 JDK 運行于 Solaris SPARC、Microsoft Windows 95/NT 和 RedHat
Linux 4.2。我們也已經(jīng)在 Java 2 SDK, Standard Edition (J2SE SDK) 版本 1.2、1.3 和 1.4 上做過測試,而這些 JDK 運行于 Solaris SPARC。JavaMail API 是 Java 的可選包,它們不是核心 J2SE 的一部分,但在 J2EE 中卻包括了它。參見 http://java.sun.com/j2se,獲取關(guān)于 JDK 1.1 和 J2SE 的進(jìn)一步信息。
問. 從哪里能找到我喜歡的操作系統(tǒng)的 JavaMail 版本?
答:JavaMail 是完全用 Java 編寫的,并將運行在特定的操作系統(tǒng)上,該操作系統(tǒng)支持所需版本的 JDK。對于不同的操作系統(tǒng),不需要任何特殊的版本。
問. JavaMail API 可以在瀏覽器中工作嗎?
答:在 Netscape 和 Internet Explorer 中,我們已經(jīng)成功運行過 JavaMail 1.3。
問. 我可以使用 JavaMail 來從 Web 郵件賬戶(比如 Yahoo 或 Hotmail)中閱讀郵件嗎?
答:不
一定。許多基于 Web 的電子郵件服務(wù)只提供在瀏覽器中用 HTTP 進(jìn)行訪問。這些服務(wù)不能使用 JavaMail 來訪問。如果服務(wù)也提供
POP3 或 IMAP 訪問,可能不可以使用 JavaMail 來訪問它。 聯(lián)系你的 Web 電子郵件服務(wù)提供商,獲取更詳細(xì)的信息。也可參閱 JHTTPMail 項目,獲得 JavaMail 的開放源代碼提供程序,它提供了對 Hotmail 的訪問。另一個有用的工具是 MrPostman——提供到 Hotmail 和 Yahoo! Mail 的 POP3 訪問的代理服務(wù)器,這個工具可從如下站點獲得:http://mrbook.org/mrpostman/。
問. 什么是 IMAP?
答:IMAP
是 Internet 消息訪問協(xié)議 (Internet Message Access
Protocol)。它是訪問電子郵件消息的一種方法,而這些消息存儲在(可能是共享的)郵件服務(wù)器上。換句話說,它允許“客戶端”電子郵件程序訪問遠(yuǎn)程
的消息存儲,并且在訪問時,就像它們就在本地一樣。IMAP 由 RFC2060 定義。有關(guān)進(jìn)一步信息,請參閱 http://www.imap.org/。
問. 什么是 SMTP?
答:SMTP
就是簡單郵件傳輸協(xié)議 (Simple Mail Transfer Protocol)。它可用于不同郵件主機間 RFC822
樣式的消息的傳輸,以及用于將新消息提交給一臺主機,然后由它來傳送該消息。SMTP 在廣泛使用中(起源于 1982 年),并由 RFC821 定義。
問. 什么是 MIME?
答:MIME 和 RFC822 是一些標(biāo)準(zhǔn),它們用于描述電子郵件消息,而這些消息是跨 Internet 進(jìn)行發(fā)送的。javax.mail.internet 子包(它是 JavaMail API 的一部分)提供了這兩個包的完整實現(xiàn)。MIME 是由下述 RFC 指定的:RFC2045、RFC2046 和 RFC2047。
問. 什么是 POP3?
答:POP3 是郵局協(xié)議 (Post Office Protocol V3)。POP3 是一個非常有限的協(xié)議,用于訪問單個郵箱。它在功能上比 IMAP 差了許多。POP3 應(yīng)用非常廣泛,并由 RFC1939 定義。
問. 對 MAPI、NNTP、Lotus Notes 和其他服務(wù)提供程序的支持怎樣?
答:目前我們還沒有計劃實現(xiàn)這些提供程序中的任何一個。不過,JavaMail API 的體系結(jié)構(gòu)提供一些功能,可以容易地插入第三方服務(wù)提供程序。我們的希望是第三方將通過編寫針對其他標(biāo)準(zhǔn)和專有協(xié)議的提供程序來包括 JavaMail API。 參閱 第三方產(chǎn)品 頁面,獲取這些提供程序的最新列表。
問. 我如何在本地磁盤上存儲郵件消息?
答:“本地存儲提供程序”可用于將郵件消息存儲在本地磁盤中。JavaMail API 不包括這一提供程序,但有幾個提供程序可從第三方獲得,它們針對不同的本地存儲格式,比如 MH 和 Mbox。參閱我們的 第三方產(chǎn)品 頁面,獲取這些提供程序的最新列表。
問. 我可以從哪里找到有關(guān) Sun 協(xié)議提供程序的文檔?
答:針對 IMAP、POP3 和 SMTP 的 Sun 協(xié)議提供程序支持許多特性,它們不是 JavaMail API 規(guī)范的一部分。在 JavaMail 1.3 下載包中包括了這些協(xié)議提供程序的文檔,這些文檔是以 javadoc 格式包括的,并位于 docs/javadocs
目錄。針對每個協(xié)議提供程序包的包級文檔描述了一些屬性,這些屬性由協(xié)議提供程序支持。此外,協(xié)議提供程序包括了一些類和方法,應(yīng)用程序可以使用它們來利用特定于提供程序的特性。注意,這些屬性、類和方法的使用使得程序不可移植;它可能只與 Sun 的 JavaMail API 實現(xiàn)一起工作。
問. JavaMail API 實現(xiàn)是否完全免費?我可以把它與我的產(chǎn)品一起發(fā)行嗎?
答:可以。當(dāng)前版本的 JavaMail API 實現(xiàn)是完全免費的,你可以在產(chǎn)品中包括它。這一版本也包括 IMAP、POP3 和 SMTP 提供程序。請一定閱讀 許可,并保證理解它。JavaBeans Activation Framework 也是在類似的許可下免費使用的。
問. 我可以獲得 JavaMail API 實現(xiàn)的源代碼嗎?
答:在 SCSL 許可下,現(xiàn)在 JavaMail API 參考實現(xiàn)源代碼可作為 J2EE 的一部分獲得。可從 這里 下載它。
問. JavaMail 是否符合 Y2K?
答:是的。 Sun 的 JavaMail 實現(xiàn)是符合 Option-3 Y2K 的。請參看 JavaMail 包中的 NOTES.txt 文件,獲取進(jìn)一步信息。
問. 我的問題不在這里,我應(yīng)該在哪里查找?
答:除 JavaMail API 規(guī)范和 javadocs 外(可從 我們的 Web 主頁 獲得并且是包括在下載包中的),不要忘記查閱 JavaMail API 包中包括的 README.txt 和 NOTES.txt 文件,獲取其他的重要信息。
javamail-interest mailing list 是另一個信息來源。參閱 我們的 Web 主頁,獲取有關(guān)如何訂閱的說明以及指向文檔的鏈接。
Java Developer Connection 維護(hù) JavaMail 論壇,請參閱 http://forum.java.sun.com。注意,JavaMail 團隊管理 javamail-interest 郵件列表,但不管理 JavaMail 論壇。
jGuru 也維護(hù) JavaMail FAQ,可在如下地址找到它:http://www.jguru.com/faq/JavaMail。
安裝和配置
問. 我如何安裝 JavaMail API 實現(xiàn)?
答:解
壓縮分發(fā)的 zip 文件,并編輯 CLASSPATH 環(huán)境變量以包含 mail.jar 文件,該文件包括在 JavaMail API
分發(fā)中。你也需要 JavaBeans Activation Framework(參見下面)的實現(xiàn)。參閱 README
文件(在分發(fā)中),獲得其他細(xì)節(jié)和例子。
問. JavaMail 是否包括所有必要的郵件服務(wù)器?
答:不
是,JavaMail API 包不包括任何郵件服務(wù)器。為了使用 JavaMail API 包,你將需要訪問 IMAP 或 POP3
郵件服務(wù)器(用于閱讀郵件)和/或 SMTP 郵件服務(wù)器(用于發(fā)送郵件)。這些郵件服務(wù)器通常由 Internet
服務(wù)提供商提供,或者作為組織網(wǎng)絡(luò)基礎(chǔ)結(jié)構(gòu)的一部分。如果你不必訪問這樣的郵件服務(wù)器,請往下看。
問. 從哪里可以獲得必要的郵件服務(wù)器?
答:Sun Java System Messaging Server 可用于 Solaris 和 Windows 平臺。華盛頓大學(xué)的 IMAP 服務(wù)器支持多種平臺 (UNIX、32 位 Windows 等)。可從如下地址獲取源代碼:ftp://ftp.cac.washington.edu/imap/imap.tar.Z。其他的許多供應(yīng)商提供了支持 Internet 標(biāo)準(zhǔn)的郵件服務(wù)器。可以從 IMAP Connection 和 Internet Mail Consortium 獲得更多信息。
問. 我應(yīng)該使用什么主機名、用戶名或密碼?
答:我們不提供郵件服務(wù)器讓你使用。你必須使用自己的郵件服務(wù)器,或者使用 Internet 服務(wù)提供商或你所工作的公司提供的郵件服務(wù)器。網(wǎng)絡(luò)管理員可能給你一些必要的信息用于配置 JavaMail,以便同郵件服務(wù)器一起工作。
問. 我如何配置 JavaMail 通過代理服務(wù)器工作?
答:大
多數(shù)代理服務(wù)器只支持 HTTP 協(xié)議。JavaMail 沒有使用 HTTP
協(xié)議來閱讀或發(fā)送郵件。使用代理服務(wù)器的一個主要原因是為了允許企業(yè)網(wǎng)絡(luò)中的 HTTP 請求通過企業(yè)防火墻。防火墻通常會阻止對 Internet
的大多數(shù)訪問,但允許來自代理服務(wù)器的請求通過。此外,企業(yè)網(wǎng)絡(luò)內(nèi)部的郵件服務(wù)器將為郵件執(zhí)行類似的功能,通過 SMTP 接收消息,然后將它們轉(zhuǎn)發(fā)到
Internet 上的最終目的地,以及接收傳入的消息,然后將它們發(fā)送到合適的內(nèi)部郵件服務(wù)器。
如果你的代理服務(wù)器支持 SOCKS V4 或 V5 協(xié)議 (http://www.socks.nec.com/aboutsocks.html, RFC1928),并允許匿名連接,可以告訴 Java 運行時把所有的 TCP socket 直接連接到 SOCKS 服務(wù)器。參閱 http://java.sun.com/j2se/1.4/docs/guide/net/properties.html,獲取 socksProxyHost
和 socksProxyPort
屬性的最新文檔。這些是系統(tǒng)級屬性,而不是 JavaMail 會話屬性。當(dāng)調(diào)用應(yīng)用程序時,它們可以從命令行中設(shè)置,例如:java -DsocksProxyHost=myproxy ...
。這個工具可用于指出從 JavaMail 到 SOCKS 代理服務(wù)器進(jìn)行 SMTP、IMAP 和 POP3 通信。注意,設(shè)置這些屬性將告訴 所有 TCP socket 連接到 SOCKS 代理,在應(yīng)用程序的其他方面上,這可能會帶來負(fù)面影響。
假如沒有這樣的 SOCKS 服務(wù)器,如果想使用 JavaMail 來直接訪問防火墻外部的郵件服務(wù)器,那將需要配置防火墻來允許這一訪問。一個簡單的 HTTP 代理 Web 服務(wù)器是足夠的。
問. 如何在 Windows NT 中設(shè)置 CLASSPATH?
答:詳細(xì)說明可從 這里 獲得。
問. 當(dāng)試圖在 Linux 中運行程序時,得到了非常奇怪的錯誤消息,而且程序運行失敗了。錯誤在哪里?
答:通常,錯誤消息看起來像下面這樣:
Exception in thread "main"
java.lang.VerifyError:(Class:com/sun/mail/pop3/POP3Store,
method: finalize Signature :()V)
Illegal use of nonvirtual function call
問題是由于在 Linux 上,使用的 unzip 命令是有 bug 的版本,這樣解壓縮 JavaMail 下載包時,unzip 命令破壞了 mail.jar 文件。獲取更新版本的 unzip 命令或使用 JDK 的 jar 命令來解壓縮下載包。
問. 在運行于 SecurityManager 下面的應(yīng)用程序中,我如何使用 JavaMail;我必須授予應(yīng)用程序和 JavaMail 什么權(quán)限?
答:在
具有 SecurityManager 的 JDK 1.2(或更新版本)中,當(dāng)使用 JavaMail 時,JavaMail 讀取
mail.jar 文件中的配置文件有時會失敗。在從 activation.jar 文件中讀取配置文件時,JavaBeans
Activation Framework 可能也有相同的問題。這些默認(rèn)配置文件是作為“資源”文件存儲的,并且存儲在 jar 文件的
META-INF 目錄中。
有許多調(diào)試技術(shù)可用于決定這是否是個問題。設(shè)置 Session 屬性“mail.debug”為 true(或調(diào)用 session.setDebug(true)
),
將導(dǎo)致 JavaMail 在試圖加載各個配置文件時打印調(diào)試消息。形如“DEBUG: can't load default providers
file”(DEBUG: 不能加載默認(rèn)提供程序文件) 的消息指出這個問題可能存在。同樣,設(shè)置 System
屬性“javax.activation.debug”為“true”(例如,通過使用 "java
-Djavax.activation.debug=true ..." 來運行程序),將導(dǎo)致 JAF
在試圖加載各個資源文件時打印調(diào)試消息。最后,通過設(shè)置 system 屬性“java.security.debug”
為“access:failure”(例如,通過使用“java -Djava.security.debug=access:failure
...”來運行程序),JDK 可以產(chǎn)生有用的調(diào)試輸出。
除了讀取配置文件的必要權(quán)限外,應(yīng)用程序(和 JavaMail)也將需要一定的權(quán)限才可以連接到它使用的郵件服務(wù)器。如果應(yīng)用程序使用 System 屬性來配置 JavaMail(例如,像許多 JavaMail 演示程序所做的那樣,通過傳遞從 System.getProperties()
中返回的 Properties 對象到 Session 構(gòu)造函數(shù)),它也將需要一定的權(quán)限才可以使用 System Properties
對象。另外,應(yīng)用程序可以使用自己的 Properties 對象,以及確信設(shè)置 "mail.from" 屬性 或 "mail.user" 和
"mail.host" 屬性(參見 InternetAddress.getLocalAddress() 方法)。
在
JDK 1.2 SecurityManager 中,為了使應(yīng)用程序能夠使用 JavaMail,應(yīng)用程序、JavaMail 和 JAF
將需要某些權(quán)限,比如下面的一些權(quán)限(一定要使用適當(dāng)?shù)闹堤鎿Q主機名和路徑名);把這些權(quán)限添加到應(yīng)用程序使用的安全策略文件中。
grant { // following two permissions allow // access to default config files permission java.io.FilePermission "/path/to/mail.jar", "read"; permission java.io.FilePermission "/path/to/activation.jar", "read"; // following to use SMTP permission java.net.SocketPermission "SMTPHOST:25", "connect,resolve"; // following to use IMAP permission java.net.SocketPermission "IMAPHOST:143", "connect,resolve"; // following to use POP3 permission java.net.SocketPermission "POP3HOST:110", "connect,resolve"; // following needed if System.getProperties() is used permission java.util.PropertyPermission "*", "read,write"; };
|
問. 如何配置 Web 服務(wù)器來運行 JavaMail 演示 servlet?
答:針對以下 Web 服務(wù)器的指導(dǎo)說明可從這里獲得:
問. 當(dāng)在 servlet 中使用 JavaMail 時,未找到任何的 JavaMail 類。我已經(jīng)在服務(wù)器的 CLASSPATH 中添加了 mail.jar?
答:當(dāng)改變 CLASSPATH 時,通常有必要完全重啟 Web 服務(wù)器。
問. 我的 servlet 可以找到 JavaMail 類,但 JavaMail 抱怨它不能找到針對“smtp”或“imap”的服務(wù)提供程序或地址類型“rfc822”。
答:通常這是因為 JavaMail 無法訪問 mail.jar 中的配置文件,而這可能是由于安全權(quán)限問題造成的;參見 本條目,獲取更多的細(xì)節(jié)。也保證你沒有提取 mail.jar 內(nèi)容;在服務(wù)器的 CLASSPATH 中,應(yīng)該包括未更改的 mail.jar 文件。
問. 在哪里可以找到 jws.jar?我已經(jīng)安裝了 Java Web Server 2.0,并試圖運行 JavaMailServlet。README 文件指示我在 CLASSPATH 中添加 jws.jar。
答:jws.jar
不再與 Java Web Server 一起發(fā)行(在以前版本中,它們是一起發(fā)行的),因此不需要在 CLASSPATH 中添加它。只要在
CLASSPATH 中添加 mail.jar 和 activation.jar,然后重啟 Java Web Server。
編程
問. 從哪里可以學(xué)習(xí)有關(guān) Internet 郵件的基礎(chǔ)知識,它是我高效編寫 JavaMail 程序需要知道的?
答:參見我們的 Web 頁中提及的 參考圖書 中的一本,獲得有關(guān) Internet 電子郵件、MIME、SMTP、IMAP 和 POP3 等的背景信息。
問. 如何調(diào)試使用 JavaMail API 的應(yīng)用程序?
答:可通過在代碼中調(diào)用 Session 對象上的 setDebug(true)
方法來打開調(diào)試模式。這將造成在控制臺中打印調(diào)試消息,包括協(xié)議跟蹤信息。如果您認(rèn)為在 JavaMail 中發(fā)現(xiàn)了
bug,就將這個跟蹤及以下信息發(fā)送給我們:重生成問題的測試用例、使用的平臺、使用的 JDK 的版本和使用的郵件服務(wù)器 (IMAP, SMTP)
的名稱和版本。
問. 如何發(fā)送帶有附件的消息?
答:帶有附件的消息采用 MIME 多部分消息來表示,其中第一部分是消息的主體,其他的部分是附件。有大量的例子,它們展示了如何在演示程序中構(gòu)建這種消息,JavaMail 下載包包含了這些演示程序。
問. 如何閱讀帶有附件的消息并保存附件?
答:如前面描述,在 MIME 中,帶有附件的消息是作為多部分消息表示的。在簡單的例子中,Message
對象的 getContent
方法的結(jié)果將是一個 MimeMultipart
對象。多部分對象的第一個主體部分將是消息的主文本。其他的主體部分將是附件。msgshow.java
演示程序展示了如何在消息中遍歷所有的多部分對象,并提取各個主體部分?jǐn)?shù)據(jù)。getDisposition
方法將給你一個提示,指出主體部分是否應(yīng)該內(nèi)嵌顯示,或者應(yīng)該將其考慮成附件(但請注意,不是所有的發(fā)件人都提供這一信息)。
為了將主體部分中的數(shù)據(jù)保存到文件(比如),請使用 getInputStream
方法來訪問附件內(nèi)容,并將數(shù)據(jù)復(fù)制到 FileOutputStream
。
注意,也有一些更復(fù)雜的情形也要處理。例如,一些發(fā)件人把主體作為純文本和 html 發(fā)送。通常,這將作為 multipart/alternative
內(nèi)容(和 MimeMultipart
對象)出現(xiàn)在簡單的文本主體部分的位置中。經(jīng)過數(shù)字簽名或加密的消息甚至?xí)鼜?fù)雜。處理所有的這些情形可能具有挑戰(zhàn)性。請參考各種 MIME 規(guī)范和我們主頁上列出的其他 參考資料。
問. 什么是“中斷支持”(disconnected support)?
答:支
持中斷操作的郵件客戶端將允許用戶訪問遠(yuǎn)程消息存儲(比如
IMAP)中消息,緩存這些消息中的一些消息的(部分)到本地,然后斷開到服務(wù)器的連接。當(dāng)處在斷開連接狀態(tài)中,郵件客戶端可以訪問已經(jīng)緩存的消息,可能
也可以刪除它們或?qū)⑺鼈儽4娴狡渌募A。當(dāng)郵件客戶端下一次連接到遠(yuǎn)程消息存儲時,本地所做變更會與遠(yuǎn)程存儲同步。同樣,中斷支持可以允許客戶端在斷開
與服務(wù)器連接時“發(fā)送”消息,在到服務(wù)器的連接可用前,消息會進(jìn)行排隊。也請參閱 RFC1733。
問. 如何使用 JavaMail API 來支持中斷操作?
答:JavaMail API 規(guī)范定義了一些接口,郵件客戶端可以使用這些接口來支持中斷操作。我們的 IMAP 提供程序?qū)崿F(xiàn)了這些接口(UIDFolder 接口)。
問. 我如何使用 JavaMail API 來發(fā)送安全的電子郵件?
答:JavaMail API 目前不支持發(fā)送或接收安全電子郵件。JavaMail API 的體系結(jié)構(gòu)使得可以在以后很容易地添加這一支持,我們可以添加支持,第三方也可以添加支持。有關(guān)當(dāng)前電子郵件安全標(biāo)準(zhǔn)(S/MIME 和 PGP)的信息,可以從如下站點找到: http://www.imc.org/smime-pgpmime.html。 請瀏覽我們的 第三方產(chǎn)品 頁,獲取來自其他供應(yīng)商的解決方案。
問. writeTo() 方法生成了消息文件,但消息中的一些行既不是數(shù)據(jù)的規(guī)范 MIME 表示(即使用 CRLF 來結(jié)束行),又沒有使用我的平臺的規(guī)范行分隔符(例如 UNIX 上的“\n”)。如果我需要這些表示時,如何獲得它們當(dāng)中的任何一種表示?
答:不管是哪種情形,你都將需要創(chuàng)建合適的 FilterOutputStream 對象來傳遞給 writeTo()
。FilterOutputStream 將需要接受特定的一些行,它們具有任何常見終止符,然后寫出另外的一些特定行,它們只具有期望的行終止符。下面是這種過濾器的一些例子。NewlineOutputStream
轉(zhuǎn)換到本地平臺的行終止符,當(dāng)將消息寫到文件時,它是有用的。CRLFOutputStream
轉(zhuǎn)換到 MIME 規(guī)范 CRLF 終止符,當(dāng)需要規(guī)范 MIME 格式時(比如計算數(shù)字簽名),它是有用的。
問. 我可以使用 JavaMail API 來實現(xiàn)郵件服務(wù)器嗎?
答:JavaMail
API 設(shè)計目的不是幫你實現(xiàn)郵件服務(wù)器。但是,對你來說,一些實用工具類,比如 MIME
消息解析類,可能是有用的。通常您會發(fā)現(xiàn),JavaMail API
是在“簡單”而不是在“強有力”方面出錯。對于郵件客戶端,那是合適的,但對于郵件服務(wù)器,結(jié)果可能是不同的。
問. 我可以使用 JavaMail API 在我的郵件服務(wù)器上添加新的用戶賬戶、刪除用戶賬戶或改變用戶賬戶的密碼嗎?
答:JavaMail API 不包括任何工具,用于添加、刪除或修改用戶賬戶。在這一方面是沒有標(biāo)準(zhǔn)的,每個郵件服務(wù)器對它的處理是不同的。
問. 為什么 MimeMessage 類沒有實現(xiàn) Serializable,這樣我就可以將消息序列化到磁盤,并在以后讀回它?
答:JavaMail API 是在現(xiàn)有電子郵件系統(tǒng)上面設(shè)計的,并使用了現(xiàn)有的消息格式。對于這樣的一些實現(xiàn),使用 Java 序列化能力既不是必要的,也不是有用的,因此,不能將它作為 JavaMail API 的目標(biāo)來考慮。
有關(guān)序列化 Message 的困難部分是保留某些指針,它們指向 Folder(文件夾)、Store(存儲)和 Session(會話)。如果只想保存消息的內(nèi)容,而不是對象本身,消息的 writeTo
方法將為你完成這一切。如果想根據(jù)序列化消息創(chuàng)建整個電子郵件系統(tǒng),您應(yīng)該能夠編寫 Message 等的子類,并在子類中實現(xiàn) Serializable。
如果想序列化自己的引用了 MimeMessages的其他對象,那么你的對象的 writeObject
方法可以使用 MimeMessage 的 writeTo
方法,對象的 readObject
方法可以使用 MimeMessage 構(gòu)造函數(shù),該構(gòu)造函數(shù)會得到 InputStream。在構(gòu)造 MimeMessage 時,你的類將需要提供一個 Session。
問. 我如何編寫服務(wù)提供程序?
答:請閱讀服務(wù)提供程序文檔,獲取一些細(xì)節(jié)信息。通常,如果想編寫 Store 提供程序,那就編寫 javax.mail.Store
和 javax.mail.Folder
的子類,也可能要編寫 javax.mail.Message
及其他一些類的子類。對于 Transport 提供程序,編寫 javax.mail.Transport
的子類,也可能需要編寫 javax.mail.Message
及其他的一些類的子類。然后在 javamail.providers
注冊表中,添加描述提供程序的條目。如果對編寫特別的服務(wù)提供程序感興趣,并且它所針對的協(xié)議或郵件系統(tǒng)目前沒有得到 JavaMail API 實現(xiàn)的支持,請通過 javamail@Sun.COM 聯(lián)系我們。
問. 我在登錄 Microsoft Exchange 服務(wù)器時碰到了麻煩,我確信正在使用的用戶名和密碼是正確的,我做錯了什么?
答:當(dāng)?shù)卿?Exchange 時,需要使用比簡單登錄名更多的用戶名。例如,如果你的電子郵件地址是“J.User@server.com”,Windows NT 登錄名是“juser”,NT 域名是“dom”,而且 Exahange 郵箱名是“Joe User”,那么在使用 JavaMail 登錄時,你將需要使用用戶名 “dom\juser\J.User”。
問. 在發(fā)送二進(jìn)制文件前,我如何編碼它?當(dāng)收到它時,我又如何解碼它?
答:你不必這樣的做!JavaMail 將自動決定合適的編碼用于消息部分,然后才發(fā)送消息。而且當(dāng)讀取它們時,將自動解碼消息部分。getInputStream
方法將返回解碼數(shù)據(jù)。
問. 如果我不需要自己編碼和解碼附件,我應(yīng)該何時使用 MimeUtility 方法?
答:在 JavaMail 沒有自動處理的情況下,MimeUtility
方法是有用的。經(jīng)常發(fā)生的這樣的一種情形是文件名的編碼。基本的 MIME
spec(規(guī)范)不允許按某種方式編碼標(biāo)題參數(shù)值(比如文件名參數(shù)),該方式與(比如)編碼
Subject(主題)標(biāo)題相同。這限制了參數(shù)值,從而限制了文件名到 ASCII。但一些發(fā)件人卻實際使用 MIME 文本編碼來做非 ASCII
文件名的編碼工作。想與這種非標(biāo)準(zhǔn)發(fā)件人互操作的應(yīng)用程序可以使用 encodeText
方法來編碼文件名,然后調(diào)用 MimeBodyPart
setFileName
方法,而且可以使用 decodeText
方法來解碼返回的文件名。
問. 盡管 JavaMail 完成了所有的編碼和解碼工作,但我仍需要手動控制一些主體部分的編碼。
答:在少數(shù)的場合需要控制編碼,這里有幾個方法來重寫 JavaMail 的默認(rèn)行為。下面是一個簡單的方法。在創(chuàng)建整個消息后,調(diào)用 msg.saveChanges(),
然后使用像 mbp.setHeader("Content-Transfer-Encoding", "base64")
的語句來強制對指定主體部分做 base64 編碼。
另一種辦法是編寫 MimeBodyPart
的子類,并重寫 updateHeaders
方法,讓它首先調(diào)用 super.updateHeaders()
,然后像上面那樣設(shè)置 Content-Transfer-Encoding
標(biāo)題。
問. 為什么 JavaMail 沒有在非 ASCII 字符集中正確編碼和解碼文件名?
答:文件名是作為參數(shù)存儲在 MIME 標(biāo)題中的。形如 =?ISO-8859-15?B?5OTkLUluZm8ucGRm?=
的編碼文件名不是 MIME spec(規(guī)范)的一部分。形如 =?A?B?C?=
的文件名是一個完全有效的文件名,而不是一個不正確編碼的文件名。JavaMail 沒有編碼和解碼文件名,因為這樣做會違反 MIME 規(guī)范。
基本的 MIME 規(guī)范不允許編碼參數(shù)。RFC 2231 定義了一種新的方式,使得可以在 MIME 標(biāo)題中包括編碼參數(shù),包括文件名。它與下面的事實方式不兼容:許多應(yīng)用程序非法編碼文件名。支持 RFC 2231 將不允許 JavaMail 與這些現(xiàn)有的程序互操作。據(jù)我所知,很少現(xiàn)有的程序支持 RFC 2231。
如果你選擇違反 MIME 規(guī)范是為了與其他也違反了 MIME的程序互操作,那么 JavaMail 會給您所有需要的工具來完成這件事。
編碼文件名的解決方法是簡單的:
mbp.setFileName(MimeUtility.encodeText(filename));
解碼文件名的解決方法同樣簡單:
String filename = MimeUtility.decodeText(part.getFileName());
為什么 XX.hbm.xml 和 XX.cfg.xml這兩個文件要放在/WEB-INF/classes/這個目錄下呢?
因為你的所
有類放在/web-inf/classes/目錄下,所以new
Configuration().configure方法是以當(dāng)前目錄為根目錄(也就/web-inf/classes/目錄下)來尋找
xx.cfg.xml,否則hibernate是找不到的,除非你使用絕對路徑,或url(全球資源定位器);
SessionFactory sf=new Configuration().configure("/hibernate/hibernate.cfg.xml").buildSessionFactory();
hibernate會去/web-inf/classes/hibernate/目錄下去找到這個hibernate.cfg.xml
SessionFactory sf=new Configuration().configure().buildSessionFactory();
hibernate會去/web-inf/classes/目錄下去找到這個hibernate.cfg.xml
當(dāng)
你想用Session類的save方法把VO變成PO的時候,你就會想到Session是怎么來的,Session的對象是通過
SessionFactory類的openSession方法來實例化。有了SessionFactory你又會想到SessionFactory是怎么
來的,SessionFactory的對象是通過Configuration實例的來構(gòu)建。
Configuration類是用來管理hibernate的配置信息,如數(shù)據(jù)庫url,用戶名,密碼。。。
Configuration
類的buildSessionFactory()用來實例化SessionFactory
。要使用buildSessionFactory方法,必須先讓Configuration.configure()方法找到
hibernate.cfg.xml文件并初始化。
SessionFactory類是用于創(chuàng)建Session的實例。
Session是Hibernate持久化操作和管理的核心。
一直沒明白為什么hibernate的配置文件有兩個, 一個properties,一個xml. 呵呵..偶才學(xué)了一個星期不要笑我....
properties 是模版型配置, 可以配置一些用xml寫起來麻煩的東西, 比如連接池,事務(wù)等..
xml的配置是在前面配置的基礎(chǔ)上的再配置, 偶覺得主要是配一些 mapping文件..
在源碼里, Configuration cfg = new Configuration(); 是加載 properties配置..
cfg.configure()是加載的xml配置
xml配置是覆蓋properties配置的.
這樣就可以兩個配置都用, 而且不用寫硬的addclass之類的東西了..
本文引用通告地址:
http://blog.csdn.net/nickeyfff/services/trackbacks/146758.aspx
[
點擊此處收藏本文]
http://blog.csdn.net/nickeyfff/archive/2004/10/22/146758.aspx
hibernate.cfg.xml not found - WebSphere PortalServer
We had the 'hibernate.cfg.xml not found' problem when developing
IBM WebSphere Portalserver portlets with struts and hibernate.
The solution was to have the hibernate.cfg.xml in WebSphere
Application Developer in ./JavaSources and get the hibernate
configuration at runtime this way:
File f=new File(servlet.getServletContext()
.getRealPath("/WEB-INF/classes/hibernate.cfg.xml"));
Configuration c = new Configuration().configure(f);
This is portable from WSAD to WPS
IllegalArgumentException
- if the method is an
instance method and the specified object argument
is not an instance of the class or interface
declaring the underlying method (or of a subclass
or implementor thereof); if the number of actual
and formal parameters differ; if an unwrapping
conversion for primitive arguments fails; or if,
after possible unwrapping, a parameter value
cannot be converted to the corresponding formal
parameter type by a method invocation conversion.
你的代碼本身有問題,一般來說,我們在使用Struts時,如果要在JSP隱式的傳值給Action有兩種情況:
1、要傳的值是FromBean中的一個字段,你說的情況應(yīng)該就是這種情況,例如需要在Edit頁面中保存theID,在Action中執(zhí)行Update操作時根據(jù)ID來更新數(shù)據(jù)庫的值,你可以這樣做:
Jsp中的代碼為:<html:hidden property="theID" />
提交后,theID的值就會放到FormBean中的theID中,你就可以通過getTheID()來獲得這個值。
2、要傳的值不是FromBean中的一個字段:
Jsp中的代碼為:
<input type="hidden" name="XXX" value="<%=request.getAttribute(XXX)%>">
當(dāng)然,你應(yīng)該在Action中就已經(jīng)就這個值放到了request中,request.setAttribute("XXX",value);,
然后在Action中你才可以通過request.getParameter("XXX");來取得這個值。
補充一點,request.setAttribute("XXX",value);中,value應(yīng)該是個String,還有,<input
type="hidden" name="XXX"
value="<%=request.getAttribute(XXX)%>">應(yīng)該改為
<input type="hidden" name="XXX" value="<%=(String)request.getAttribute(XXX)%>">
http://editblog.csdn.net/programmer/archive/2004/10/27/806.aspx
侯捷觀點
Java反射機制
1.
${ pageScope.index+1 }
<%= index.intValue()+1 %>
2.
<input name="quantity${ pageScope.index }" value="<bean:write name="row" property="counter"/>" size="3" class="size10" type="text">
3.bad src:
<!--<input name="quantity" value="<bean:write name="row" property="counter"/>" size="3" class="size10" type="text">-->
<!--<html:text name="row" property="counter" size="4"/>-->${pageScope.index + 1}asdf