国产精品色无码视频,国产av毛片影院精品资源,亚洲人成网站77777·c0m,囯产av无码片毛片一级,夜夜操www99视频,美女白嫩胸交在线观看,亚洲a毛片性生活

薈聚奇文、博采眾長(zhǎng)、見(jiàn)賢思齊
當(dāng)前位置:公文素材庫(kù) > 報(bào)告體會(huì) > 心得體會(huì) > java學(xué)習(xí)心得

java學(xué)習(xí)心得

網(wǎng)站:公文素材庫(kù) | 時(shí)間:2019-05-17 11:24:51 | 移動(dòng)端:java學(xué)習(xí)心得
第一篇:java學(xué)習(xí)心得筆記

j2ee學(xué)習(xí)筆記

注:框架可以用m.hmlawpc.com action=” ”);

out.print(response.encodeurl(“sessionexample”));

out.print(“form action=” ”);

out.print(“method = get>;”);

2) out.print(“<p>;<a href=” ”);

out.print(response.encodeurl(“sessionexample?database=foo&datavalue=bar”));

out.println(“” >;url encoded </a>;”);

3.singlethreadmodel

默認(rèn)的,每一個(gè)servlet definition in a container只有一個(gè)servlet class的實(shí)例。

只有實(shí)現(xiàn)了singlethreadmodel,container才會(huì)讓servlet有多個(gè)實(shí)例。

servlet specification上建議,不要使用synchronized,而使用singlethreadmodel。

singlethreadmodel(沒(méi)有方法)

保證servlet在同一時(shí)刻只處理一個(gè)客戶的請(qǐng)求。

singlethreadmodel是耗費(fèi)資源的,特別是當(dāng)有大量的請(qǐng)求發(fā)送給servlet時(shí),singlethreadmodel的作用是使包容器以同步時(shí)鐘的方式調(diào)用service方法。

這等同于在servlet的service()方法種使用synchronized.

single thread model一般使用在需要響應(yīng)一個(gè)heavy request的時(shí)候,比如是一個(gè)需要和數(shù)據(jù)庫(kù)打交道的連接。

2. 在重載servlet地init( )方法后,一定要記得調(diào)用super.init( );

3. the client通過(guò)發(fā)送一個(gè)blank line表示它已經(jīng)結(jié)束request

而the server通過(guò)關(guān)閉the socket來(lái)表示response已結(jié)束了。

4. 一個(gè)http servlet可以送三種東西給client

1) a single status code

2) any number of http headers

3) a response body

5. servlet之間信息共享的一個(gè)最簡(jiǎn)單的方法就是

system.getproperties().put(“key”,”value”);

6. post和get

post:將form內(nèi)各字段名稱(chēng)和內(nèi)容放置在html header內(nèi)傳送給server

get:?之后的查詢字符串要使用urlencode,經(jīng)過(guò)urlencode后,這個(gè)字符串不再帶有空格,以后將在server上恢復(fù)所帶有的空格。

get是m.hmlawpc.com中,可以通過(guò)serveltcontext的

setattribute( )

getattribute( )

removeattribute( )

來(lái)共享對(duì)象

10. 利用request.getparameter( )得到的string存在字符集問(wèn)題。

可以用strtitle = request.getparameter(“title”);

strtitle = nem.hmlawpc.coment is the start tag, the end tag,and everything (including other elements) in betm.hmlawpc.com/stockquote.m.hmlawpc.coma targetnamespace=http://example.com/stockquote.xsd

xmlns="http://m.hmlawpc.com

content-type: text/xml; charset="utf-8"

content-length: nnnn

soapaction: "some-uri"

<soap-env:envelope

xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"

關(guān)。

以下是你應(yīng)該回避使用的一些java特色,并且在你的ejb組件的實(shí)現(xiàn)代碼中要嚴(yán)格限

制它們的使用:

1.使用static,非final 字段。建議你在ejb組件中把所有的static字段都聲明為final型的。這樣可以保證前后一致的運(yùn)行期語(yǔ)義,使得ejb容器有可以在多個(gè)java虛擬機(jī)之間分發(fā)組件實(shí)例的靈活性。

2.使用線程同步原語(yǔ)來(lái)同步多個(gè)組件實(shí)例的運(yùn)行。避免這個(gè)問(wèn)題,你就可以使ejb容器靈活的在多個(gè)java虛擬機(jī)之間分發(fā)組件實(shí)例。

3.使用am.hmlawpc.com.netpermission,java.io.reflect.reflectpermission,java.lang.security.securitypermission,以便加強(qiáng)先前所列出的編程限制。

許多ejb容器沒(méi)有加強(qiáng)這些限制,他們希望ejb組件開(kāi)發(fā)者能遵守這些編程限制或者是帶有冒險(xiǎn)想法違背了這些限制。違背這些限制的ejb組件,比標(biāo)準(zhǔn)方法依賴(lài)過(guò)多或過(guò)少的安全許可,都將很少能在多個(gè)ejb容器間移植。另外,代碼中都將隱藏著一些不確定的、難以預(yù)測(cè)的問(wèn)題。所有這些都足以使ejb組件開(kāi)發(fā)者應(yīng)該知道這些編程限制,同時(shí)也應(yīng)該認(rèn)真地遵守它們。

任何違背了這些編程限制的ejb組件的實(shí)現(xiàn)代碼在編譯時(shí)都不能檢查出來(lái),因?yàn)檫@些特點(diǎn)都是java語(yǔ)言和j2se中不可缺少的部分。

對(duì)于ejb組件的這些限制同樣適用于ejb組件所使用的幫助/訪問(wèn)(helper/access)類(lèi),j2ee應(yīng)用程序使用java文檔(jar)文件格式打包到一個(gè)帶.ear(代表enterprise archive)擴(kuò)展名的文件中,這個(gè)ear文件對(duì)于發(fā)送給文件部署器來(lái)說(shuō)是標(biāo)準(zhǔn)的格式。ear文件中包括在一個(gè)或多個(gè)ejb-jar文件中的ejb組件,還可能有ejb-jar所依賴(lài)的庫(kù)文件。所有ear文件中的代碼都是經(jīng)過(guò)深思熟慮開(kāi)發(fā)的應(yīng)用程序并且都遵守編程限制和訪問(wèn)許可集。

未來(lái)版本的規(guī)范可能會(huì)指定通過(guò)部署工具來(lái)定制安全許可的能力,通過(guò)這種方法指定了一個(gè)合法的組件應(yīng)授予的許可權(quán)限,也指定了一個(gè)標(biāo)準(zhǔn)方法的需求:如從文件系統(tǒng)中讀文件應(yīng)有哪些要求。一些ejb容器/服務(wù)器目前在它們的部署工具中都提供了比標(biāo)準(zhǔn)權(quán)限或多或少的許可權(quán)限,這些并不是ejb1.1規(guī)范中所需要的。

理解這些約束

ejb容器是ejb組件生存和執(zhí)行的運(yùn)行期環(huán)境,ejb容器為ejb組件實(shí)例提供了一些服務(wù)如:事務(wù)管理、安全持久化、資源訪問(wèn)、客戶端連接。ejb容器也負(fù)責(zé)ejb組件實(shí)例整個(gè)生命期的管理、擴(kuò)展問(wèn)題以及并發(fā)處理。所以,ejb組件就這樣寄居在一個(gè)被管理的執(zhí)行環(huán)境中--即ejb容器。

因?yàn)閑jb容器完全負(fù)責(zé)ejb組件的生命期、并發(fā)處理、資源訪問(wèn)、安全等等,所以與容器本身的鎖定和并發(fā)管理相沖突的可能性就需要消除,許多限制都需要使用來(lái)填上潛在的安全漏洞。除了與ejb容器責(zé)任與安全沖突的問(wèn)題,ejb組件還意味著僅僅聚焦于商務(wù)邏輯,它依賴(lài)于ejb容器所提供的服務(wù)而不是自己來(lái)直接解決底層的系統(tǒng)層的問(wèn)題。

可能的問(wèn)題

通常,ejb組件在容器之間的移植不可避免地與如下問(wèn)題相關(guān):

1.它需要依靠的受限制的特點(diǎn)在特定ejb容器中沒(méi)有得到加強(qiáng)。

2.它需要依靠的非標(biāo)準(zhǔn)的服務(wù)從容器中可獲得。

為了保證ejb組件的可移植性和一致的行為,你應(yīng)該使用一個(gè)具有與java2平臺(tái)安全

策略集相一致的策略集的容器來(lái)測(cè)試ejb組件,并且其加強(qiáng)了前述的編程限制。

總結(jié)

ejb組件開(kāi)發(fā)者應(yīng)該知道這些推薦的關(guān)于ejb組件的編程限制,明白它們的重要性,并且從組件的穩(wěn)定性和可移植性利益方面考慮來(lái)遵循它們。因?yàn)檫@些編程限制能阻止你使用標(biāo)準(zhǔn)的java語(yǔ)言的特點(diǎn),違背了這些編程限制在編譯時(shí)不會(huì)知道,并且加強(qiáng)這些限制也不是ejb容器的責(zé)任。所有這些原因都使你應(yīng)很小心地遵守這些編程限制,這些限制在組件的合同中已經(jīng)成為了一個(gè)條款,并且它們對(duì)于建造可靠的、可移植的組件是非常重要的。

2. 優(yōu)化ejb

entity bean為在應(yīng)用程序和設(shè)計(jì)中描述持久化商業(yè)對(duì)象(persistent business objec ts)提供了一個(gè)清晰的模型。在java對(duì)象模型中,簡(jiǎn)單對(duì)象通常都是以一種簡(jiǎn)單的方式進(jìn)行處理但是,很多商業(yè)對(duì)象所需要的事務(wù)化的持久性管理沒(méi)有得到實(shí)現(xiàn)。entity bean將持久化機(jī)制封裝在容器提供的服務(wù)里,并且隱藏了所有的復(fù)雜性。entity bean允許應(yīng)用程序操縱他們就像處理一個(gè)一般的java對(duì)象應(yīng)用。除了從調(diào)用代碼中隱藏持久化的形式和機(jī)制外,entity bean還允許ejb容器對(duì)對(duì)象的持久化進(jìn)行優(yōu)化,保證數(shù)據(jù)存儲(chǔ)具有開(kāi)放性,靈活性,以及可部署性。在一些基于ejb技術(shù)的項(xiàng)目中,廣泛的使用oo技術(shù)導(dǎo)致了對(duì)entity bean的大量使用,sun的工程師們已經(jīng)積累了很多使用entity bean的經(jīng)驗(yàn),這篇文章就詳細(xì)闡述的這些卡發(fā)經(jīng)驗(yàn):

*探索各種優(yōu)化方法

*提供性能優(yōu)化和提高適用性的法則和建議

*討論如何避免一些教訓(xùn)。

法則1:只要可以,盡量使用cmp

cmp方式不僅減少了編碼的工作量,而且在container中以及container產(chǎn)生的數(shù)據(jù)庫(kù)訪問(wèn)代碼中包括了許多優(yōu)化的可能。container可以訪問(wèn)內(nèi)存緩沖中的bean,這就允許它可以監(jiān)視緩沖中的任何變化。這樣的話就在事物沒(méi)有提交之前,如果緩存的數(shù)據(jù)沒(méi)有變化就不用寫(xiě)到數(shù)據(jù)庫(kù)中。就可以避免許多不必要的數(shù)據(jù)庫(kù)寫(xiě)操作。另外一個(gè)優(yōu)化是在調(diào)用find方法的時(shí)候。通常情況下find方法需要進(jìn)行以下數(shù)據(jù)庫(kù)操作:

查找數(shù)據(jù)庫(kù)中的紀(jì)錄并且獲得主鍵

將紀(jì)錄數(shù)據(jù)裝入緩存

cmp允許將這兩步操作優(yōu)化為一步就可以搞定。[具體怎么做我也沒(méi)弄明白,原文沒(méi)有具體闡述]

法則2:寫(xiě)代碼時(shí)盡量保證對(duì)bmp和cmp都支持

許多情況下,ejb的開(kāi)發(fā)者可能無(wú)法控制他們寫(xiě)的bean怎么樣被部署,以及使用的container是不是支持cmp.

一個(gè)有效的解決方案是,將商業(yè)邏輯的編碼完全和持久化機(jī)制分離。再cmp類(lèi)中實(shí)現(xiàn)商業(yè)邏輯,然后再編寫(xiě)一個(gè)bmp類(lèi),用該類(lèi)繼承cmp類(lèi)。這樣的話,所有的商業(yè)邏輯都在cmp類(lèi)中,而持久化機(jī)制在bmp中實(shí)現(xiàn)。[我覺(jué)得這種情況在實(shí)際工作中很少遇到,但是作者解決問(wèn)題的思路值得學(xué)習(xí)]

法則3:把ejbstore中的數(shù)據(jù)庫(kù)訪問(wèn)減小到最少。

如果使用bmp,設(shè)置一個(gè)緩存數(shù)據(jù)改變標(biāo)志dirty非常有用。所有改變數(shù)據(jù)庫(kù)中底層數(shù)據(jù)的操作,都要設(shè)置dirty,而在ejbstore()中,首先檢測(cè)dirty的值,如果dirty的值沒(méi)有改變,表明目前數(shù)據(jù)庫(kù)中的數(shù)據(jù)與緩存的一致,就不必進(jìn)行數(shù)據(jù)庫(kù)操作了,反之,就要把緩存數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)。

法則4:總是將從lookup和find中獲得的引用進(jìn)行緩存。(cache)

引用緩存對(duì)session bean和entity bean 都是適用的。

通過(guò)jndi lookup獲得ejb資源。比如datasource,bean的引用等等都要付出相當(dāng)大的代價(jià)。因此應(yīng)該避免多余的lookup.可以這樣做:

將這些引用定義為實(shí)例變量。

從setentitycontext(session bean使用setsessioncontext)方法查找他們。setentitycontext方法對(duì)于一個(gè)bean實(shí)例只執(zhí)行一次,所有的相關(guān)引用都在這一次中進(jìn)行查找,這樣查找的代價(jià)就不是那么昂貴了。應(yīng)該避免在其他方法中查找引用。尤其是訪問(wèn)數(shù)據(jù)庫(kù)的方法:ejbload()和ejbstore(),如果在這些頻繁調(diào)用的方法中進(jìn)行datasource的查找,勢(shì)必造成時(shí)間的浪費(fèi)。

調(diào)用其他entity bean的finder方法也是一種重量級(jí)的調(diào)用。多次調(diào)用finder()方法的代價(jià)非常高。如果這種引用不適合放在setentitycontext這樣的初始化時(shí)執(zhí)行的方法中執(zhí)行,就應(yīng)該在適當(dāng)?shù)臅r(shí)候緩存finder的執(zhí)行結(jié)果。只是要注意的是,如果這個(gè)引用只對(duì)當(dāng)前的entity有效,你就需要在bean從緩沖池中取出來(lái)代表另外一個(gè)實(shí)體時(shí)清除掉這些引用。,這些操作應(yīng)該在ejbactivate()中進(jìn)行。

法則5:總是使用prepare statements

這條優(yōu)化法則適用于所有訪問(wèn)關(guān)系數(shù)據(jù)庫(kù)的操作。

數(shù)據(jù)庫(kù)在處理每一個(gè)sql statement的時(shí)候,執(zhí)行前都要對(duì)statement進(jìn)行編譯。一些數(shù)據(jù)庫(kù)具有緩存statement和statement的編譯后形式的功能。數(shù)據(jù)庫(kù)可以把新的statement和緩存中的進(jìn)行匹配。然而,如果要使用這一優(yōu)化特性,新的statement要必須和緩存中的statement完全匹配。

對(duì)于non-prepared statement,數(shù)據(jù)和statement本身作為一個(gè)字符串傳遞,這樣由于前后調(diào)用的數(shù)據(jù)不同而不能匹配,就導(dǎo)致無(wú)法使用這種優(yōu)化。而對(duì)于prepared statement,數(shù)據(jù)和statement是分開(kāi)傳遞給數(shù)據(jù)庫(kù)的,這樣statement就可以和cache中已編譯的statement進(jìn)行匹配。statement就不必每次都進(jìn)行編譯操作。從而使用該優(yōu)化屬性。

這項(xiàng)技術(shù)在一些小型的數(shù)據(jù)庫(kù)訪問(wèn)中能夠減少statement將近90%的執(zhí)行時(shí)間。

法則6:完全關(guān)閉所有的statement

在編寫(xiě)bmp的數(shù)據(jù)庫(kù)訪問(wèn)代碼時(shí),記住一定要在數(shù)據(jù)庫(kù)訪問(wèn)調(diào)用之后關(guān)閉statement,因?yàn)槊總(gè)打開(kāi)的statement對(duì)應(yīng)于數(shù)據(jù)庫(kù)中的一個(gè)打開(kāi)的游標(biāo)。

security

1.加密

對(duì)稱(chēng)加密

(1)分組密碼

(2)流密碼

常用的對(duì)稱(chēng)加密算法:

des和tripledes

blom.hmlawpc.comdash;—ssl(se cure socketslayer),并且已經(jīng)幾乎成為了目前m.hmlawpc.comanager,并且 logincontext 已經(jīng)認(rèn)證了一個(gè)帶有名為“admin”的 com.ibm.resource.security.auth.principalexample 主體的 subject。

清單 4. 一個(gè)簡(jiǎn)單的授權(quán)請(qǐng)求

public class jaasexample {

public static void main(string[] args) {

...

// m.hmlawpc.compleaction 類(lèi)中。還要注意,調(diào)用類(lèi)不要求為 jaasexampleaction 類(lèi)代碼源授予許可權(quán),因?yàn)樗鼘?shí)現(xiàn)了一個(gè) privilegedaction。

擴(kuò)展 jaas

大多數(shù)應(yīng)用程序都有定制邏輯,它授權(quán)用戶不僅僅在類(lèi)上執(zhí)行操作,而且還在該類(lèi)的實(shí)例上執(zhí)行操作。這種授權(quán)通常建立在用戶和實(shí)例之間的關(guān)系上。這是 jaas 的一個(gè)小缺點(diǎn)。然而,幸運(yùn)的是,這樣設(shè)計(jì) jaas 使得 jaas 可以擴(kuò)展。只要做一點(diǎn)工作,我們將可以擴(kuò)展 jaas,使其包含一個(gè)通用的、類(lèi)實(shí)例級(jí)的授權(quán)框架。

在文章開(kāi)頭處我已經(jīng)說(shuō)明了,抽象類(lèi) javax.security.auth.policy 被用于代表 jaas 安全性策略。它的缺省實(shí)現(xiàn)是由 com.sun.security.auth.policyfile 類(lèi)提供。policyfile 類(lèi)從 jaas 格式的文件(象清單 3 中顯示的那個(gè)一樣)中讀取策略。

我們需要向這個(gè)文件添加一個(gè)東西為類(lèi)實(shí)例級(jí)授權(quán)擴(kuò)展策略定義:一個(gè)與許可權(quán)語(yǔ)句相關(guān)的可選關(guān)系參數(shù)。

缺省 jaas 許可權(quán)語(yǔ)句的格式如下:

permission <permission implementation class>; [name], [actions];

我們?cè)谶@個(gè)許可權(quán)語(yǔ)句的末尾添加一個(gè)可選的關(guān)系參數(shù)來(lái)完成策略定義。下面是新許可權(quán)語(yǔ)句的格式:

permission <permission implementation class>;

[name], [actions], [relationship];

在為類(lèi)實(shí)例級(jí)授權(quán)擴(kuò)展 jaas 時(shí)要注意的最重要的一點(diǎn)是:許可權(quán)實(shí)現(xiàn)類(lèi)必須有一個(gè)帶三個(gè)參數(shù)的構(gòu)造函數(shù)。第一個(gè)參數(shù)是名稱(chēng)參數(shù),第二個(gè)是行為參數(shù),最后一個(gè)是關(guān)系參數(shù)。

解析新文件格式

既然文件格式已經(jīng)改變,就需要一個(gè)新的 javax.security.auth.policy 子類(lèi)來(lái)解析文件。

為簡(jiǎn)單起見(jiàn),我們的示例使用了一個(gè)新的 javax.security.auth.policy 子類(lèi) com.ibm.resource.security.auth.xmlpolicyfile,來(lái)從 xml 文件讀取策略。在實(shí)際的企業(yè)應(yīng)用程序中,關(guān)系數(shù)據(jù)庫(kù)更適合執(zhí)行這個(gè)任務(wù)。

使用 xmlpolicyfile 類(lèi)代替缺省的 jaas 訪問(wèn)控制策略實(shí)現(xiàn)的最容易的方法是向 java.security 屬性文件添加 auth.policy.provider=com.ibm.resource.security.auth.xmlpolicyfile 條目。java.security 屬性文件位于 java 2 平臺(tái)運(yùn)行時(shí)的 lib/security 目錄下。清單 5 是與 xmlpolicyfile 類(lèi)一起使用的樣本 xml 策略文件:

清單 5. 一個(gè) xml 策略文件

<?xml version="1.0"?>;

<policy>;

<grant codebase="file:/d:/sample_actions.jar">;

<principal classname=

"com.ibm.resource.security.auth.principalexample" name="users">;

<permission classname=

"com.ibm.resource.security.auth.resourcepermission"

name="com.ibm.security.sample.auction"

actions="create" />;

<permission classname=

"com.ibm.resource.security.auth.resourcepermission"

name="com.ibm.security.sample.auction"

actions="read" />;

<permission classname=

"com.ibm.resource.security.auth.resourcepermission"

name="com.ibm.security.sample.auction"

actions="m.hmlawpc.comission"

name="com.ibm.security.sample.bid"

actions="accept"

relationship="actionom.hmlawpc.comple.auction", "create");

accesscontroller.checkpermission(permission);

}

所有者關(guān)系

resourcepermission 類(lèi)的 implies(permission p) 方法是這個(gè)框架的關(guān)鍵。implies() 方法就等同性比較名稱(chēng)和行為屬性。如果定義了一個(gè)關(guān)系,那么必須把受保護(hù)的類(lèi)實(shí)例(resource)傳遞到 resourcepermission 構(gòu)造函數(shù)中。resourcepermission 類(lèi)理解所有者關(guān)系。它將類(lèi)實(shí)例的所有者與執(zhí)行代碼的 subject(用戶)進(jìn)行比較。特定關(guān)系被委托給受保護(hù)類(lèi)的 fulfills() 方法。

例如,在清單 5 中所示的 xml 策略文件中,只有 auction 類(lèi)實(shí)例的所有者可以更新(寫(xiě))文件。該類(lèi)的 setter 方法使用清單 6 中顯示的保護(hù)代碼:

清單 6. 運(yùn)行中的 implies(permission) 方法

public void setname(string nem.hmlawpc.come = nem.hmlawpc.come().equals(auctionom.hmlawpc.comple.jar

exampleactions.jar

resourcesecurity.jar 文件包含允許實(shí)例級(jí)訪問(wèn)控制的 jaas 擴(kuò)展框架。它還包含一個(gè) loginmoduleexample 類(lèi),這個(gè)類(lèi)從 xml 文件讀取用戶認(rèn)證信息。用戶標(biāo)識(shí)和密碼存儲(chǔ)在 users.xml 文件中。用戶組存儲(chǔ)在 groups.xml 文件中。關(guān)于 loginmoduleexample 的更多信息,請(qǐng)參閱參考資料部分。

該示例包含四個(gè)附加的文件:

login.conf

policy

resourcepolicy.xml

run.bat

在試圖運(yùn)行這個(gè)示例程序之前,請(qǐng)確保更新了 run.bat、policy 和 resourcepolicy.xml 文件中的路徑。缺省情況下,所有的密碼都是“passm.hmlawpc.comanager)

每個(gè)java application都可以有自己地security manager,但是默認(rèn)地java application沒(méi)有一個(gè)security manager

可以通過(guò)下面地代碼得到一個(gè)security manager

try

{

system.setsecuritymanager(nem.hmlawpc.come%/jre/lib/ext/*.jar

如果光copy不ren為.jar是沒(méi)有用的。

4. 事務(wù)處理

本地事務(wù)

java.sql.connection接口可以控制事務(wù)邊界(即開(kāi)始和結(jié)束)。

在事務(wù)開(kāi)始的時(shí)候調(diào)用setautocommit( false ), 而在中止事務(wù)時(shí)調(diào)用rollback或commit()方法。這類(lèi)事務(wù)叫本地事務(wù)。

分布式事務(wù)

但是,在特定的情況下,可能有多個(gè)客戶(例如兩個(gè)不同的servlet或ejb組件)參與了同一個(gè)事務(wù)。

或者,客戶在同一個(gè)事務(wù)中可能會(huì)執(zhí)行跨越多個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)操作。

jdbc2.0 optional package 同jta一起來(lái)實(shí)現(xiàn)分布式樣事務(wù)。

5. 一些技巧

檢索自動(dòng)產(chǎn)生的關(guān)鍵字

為了解決對(duì)獲取自動(dòng)產(chǎn)生的或自動(dòng)增加的關(guān)鍵字的值的需求,jdbc 3.0 api 現(xiàn)在將獲取這種值變得很輕松。要確定任何所產(chǎn)生的關(guān)鍵字的值,只要簡(jiǎn)單地在語(yǔ)句的 execute() 方法中指定一個(gè)可選的標(biāo)記,表示您有興趣獲取產(chǎn)生的值。您感興趣的程度可以是 statement.return_generated_keys,也可以是 statement.no_generated_keys。在執(zhí)行這條語(yǔ)句后,所產(chǎn)生的關(guān)鍵字的值就會(huì)通過(guò)從 statement 的實(shí)例方法 getgeneratedkeys() 來(lái)檢索 resultset 而獲得。resultset 包含了每個(gè)所產(chǎn)生的關(guān)鍵字的列。清單 1 中的示例創(chuàng)建一個(gè)新的作者并返回對(duì)應(yīng)的自動(dòng)產(chǎn)生的關(guān)鍵字。

清單 1. 檢索自動(dòng)產(chǎn)生的關(guān)鍵字

statement stmt = conn.createstatement();

// obtain the generated key that results from the query.

stmt.executeupdate("insert into authors " +

'(first_name, last_name) " +

"values ('george', 'orm.hmlawpc.comanagers.

a jts transaction manager provides transaction services to the parties involved in distributed transactions: the application server, the resource manager, the standalone transactional application, and the communication resource manager (crm).

2.jta

1.1 事務(wù)處理的概念

jta實(shí)際上是由兩部分組成的:一個(gè)高級(jí)的事務(wù)性客戶接口和一個(gè)低級(jí)的 x/open xa接口。

我們關(guān)心的是高級(jí)客戶接口,因?yàn)閎ean可以訪問(wèn)它,而且是推薦的客戶應(yīng)用程序的事務(wù)性接口。

低級(jí)的xa接口是由ejb服務(wù)器和容器使用來(lái)自動(dòng)協(xié)調(diào)事務(wù)和資源(如數(shù)據(jù)庫(kù))的

1.1.1事務(wù)劃分

a.程序劃分

使用usertransaction啟動(dòng)jta事務(wù)

the usertransaction interface defines the methods that allom.hmlawpc.comport java.util.*;

import javax.sm.hmlawpc.come.setvisible(true);

}

}

class mouseframe extends jframe

{

public mouseframe()

{

settitle("mouse test");

setsize(default_m.hmlawpc.comove(rectangle2d s)

{

if(s==null) return;

if(s==current) current=null;

squares.remove(s);

repaint();

}

private static final int side_length=20;//正方形的邊長(zhǎng)

private arraylist<rectangle2d> squares;//存放所有已繪制的方塊(鼠標(biāo)有效繪制路徑)

private rectangle2d current;//當(dāng)前需要繪制的方塊

private class mousehandler extends mouseadapter

{

/*

* 當(dāng)鼠標(biāo)按鈕被按下時(shí),先查找當(dāng)前點(diǎn)是否已經(jīng)包含在前期圖新內(nèi),* 否,則添加至數(shù)組列表

*/

public void mousepressed(mouseevent event)

{

current=find(event.getpoint());

if(current==null)

add(event.getpoint());

}

/*

* 處理鼠標(biāo)點(diǎn)擊事件,如果當(dāng)前點(diǎn)包含于圖形之中,且鼠標(biāo)連續(xù)點(diǎn)擊兩次以上,則擦除該圖形。

*/

public void mouseclicked(mouseevent event)

{

current=find(event.getpoint());

if(current!=null && event.getclickcount()>=2)

remove(current);

}

}

private class mousemotionhandler implements mousemotionlistener

{

/*

* 改變鼠標(biāo)形狀

h);*/public void mousemoved(mouseevent event){if(find(event.getpoint())==null)setcursor(cursor.getdefaultcursor());elsesetcursor(cursor.getpredefinedcursor(cursor.crosshair_cursor));}/** 拖動(dòng)圖形*/public void mousedragged(mouseevent event){if(current!=null){int x=event.getpoint().x;int y=event.getpoint().y;current.setframe(x-side_length/2,y-side_length/2,side_length,side_lengt

}}}} repaint();

第三篇:關(guān)于java學(xué)習(xí)的一點(diǎn)心得體會(huì)

管理科學(xué)與工程學(xué)院11信管2班孫鑫201*4548

關(guān)于java學(xué)習(xí)的一點(diǎn)心得體會(huì)

我是學(xué)信管專(zhuān)業(yè)的,這學(xué)期除了學(xué)習(xí)了java軟件開(kāi)發(fā)綜合實(shí)驗(yàn)這門(mén)選修課外,還有自己本專(zhuān)業(yè)要學(xué)的java面向?qū)ο蟮某绦蛟O(shè)計(jì)。學(xué)習(xí)了近一學(xué)期的java課程,覺(jué)得是該總結(jié)自己的心得體會(huì)了。開(kāi)始學(xué)習(xí)任何一門(mén)課(包括java),興趣最重要。一直覺(jué)得自己在學(xué)習(xí)了計(jì)算機(jī)編程語(yǔ)言(也就是c語(yǔ)言),學(xué)到了很多東西,再學(xué)習(xí)java的話,應(yīng)該問(wèn)題不大,但在學(xué)習(xí)了幾個(gè)星期后,還是明確感到了,有點(diǎn)吃力,于是趁學(xué)校開(kāi)設(shè)這門(mén)選修課,并且有自己院的老師講解,還有了上機(jī)的機(jī)會(huì),比自己自學(xué)省事多了,于是鼓足信心,開(kāi)始了漫長(zhǎng)的java征途。

還記得我編寫(xiě)的第一個(gè)程序是簡(jiǎn)單的輸出程序。當(dāng)時(shí)自己不是很理解為什么main方法要這樣來(lái)定義public static void main(string[] args),問(wèn)了好多同學(xué),他們告訴我的答案是一樣的“java本身要求就是這樣子的”,但我自己不甘心,就自己進(jìn)行了探索:把main改個(gè)名字運(yùn)行一下,看看報(bào)什么錯(cuò)誤,然后根據(jù)出錯(cuò)信息進(jìn)行分析;把main的public取掉,在試試看,報(bào)什么錯(cuò)誤;static去掉還能不能運(yùn)行;不知道m(xù)ain方法是否一定要傳一個(gè)string[]數(shù)組的,把string[]改掉,改成int[],或者string試試看;不知道是否必須寫(xiě)args參數(shù)名稱(chēng)的,也可以把a(bǔ)rgs改成別的名字,看看運(yùn)行結(jié)果如何。 結(jié)果一個(gè)簡(jiǎn)單程序反復(fù)改了七八次,不斷運(yùn)行,分析運(yùn)行結(jié)果,最后就徹底明白為什么了main方法是這 1

樣定義的了。接著在以后的學(xué)習(xí)中我也采用這樣的方法解決問(wèn)題,卻發(fā)現(xiàn)自己的速度比別人慢了好多,我就把自己的課余時(shí)間也分一部分給了java。

因?yàn)榛A(chǔ)是最重要的,只有基礎(chǔ)牢固才有可能對(duì)后面的學(xué)習(xí)有更加深刻的認(rèn)識(shí)!

學(xué)習(xí)一門(mén)新的語(yǔ)言,參考書(shū)是離不開(kāi)的。聽(tīng)專(zhuān)業(yè)課老師說(shuō)訂的教材偏難,不適合我們初學(xué)者,于是我在圖書(shū)館借了本參考書(shū)(一本篇幅較短的入門(mén)書(shū)來(lái)學(xué)習(xí)那些最簡(jiǎn)單、最基本的東西,包括學(xué)習(xí)java語(yǔ)法等)。同時(shí),對(duì)一個(gè)最簡(jiǎn)單的程序也應(yīng)該多去調(diào)試,多想想如果改動(dòng)一下會(huì)出現(xiàn)什么結(jié)果?為什么必須那樣寫(xiě)?多去想想這些問(wèn)題然后去操作,會(huì)讓你有更多的收獲。這樣反復(fù)地思考是很有用的。

在學(xué)習(xí)java的語(yǔ)法時(shí),java的語(yǔ)法是類(lèi)似c語(yǔ)言的,所以學(xué)習(xí)的比較輕松。唯一需要注意的是有幾個(gè)不容易搞清楚的關(guān)鍵字的用法,public,protected,private,static,什么時(shí)候用,為什么要用,怎么用,和同學(xué)一起討論了好久才得以解決。

在學(xué)習(xí)java的面向?qū)ο蟮木幊陶Z(yǔ)言的特性。比如繼承,抽象類(lèi),方法的多態(tài),重載,覆蓋。對(duì)于一個(gè)沒(méi)有面向?qū)ο笳Z(yǔ)言背景的人來(lái)說(shuō),我覺(jué)得這個(gè)過(guò)程需要花很長(zhǎng)很長(zhǎng)時(shí)間,因?yàn)閷W(xué)習(xí)java之前沒(méi)有c++的經(jīng)驗(yàn),只有c語(yǔ)言的經(jīng)驗(yàn),花了很長(zhǎng)時(shí)間,才徹底把這些概念都搞清楚,把書(shū)上面的例子反復(fù)的揣摩,修改,嘗試,把那幾章內(nèi)容反復(fù)的看過(guò)來(lái),看過(guò)去,看了很多遍,才徹底領(lǐng)悟了。

此外,我對(duì)于static,public,private等等一開(kāi)始都不是很懂,

都是把書(shū)上面的例子運(yùn)行成功,然后就開(kāi)始破壞它,不斷的根據(jù)自己心里面的疑問(wèn)來(lái)重新改寫(xiě)程序,看看能不能運(yùn)行,運(yùn)行出來(lái)是個(gè)什么樣子,是否可以得到預(yù)期的結(jié)果。這樣雖然比較費(fèi)時(shí)間,不過(guò)一個(gè)例子程序這樣反復(fù)破壞幾次之后。我就對(duì)這個(gè)相關(guān)的知識(shí)徹底學(xué)通了。有時(shí)候甚至故意寫(xiě)一些錯(cuò)誤的代碼來(lái)運(yùn)行,看看能否得到預(yù)期的運(yùn)行錯(cuò)誤。這樣對(duì)于編程的掌握是及其深刻的。

在學(xué)習(xí)java的過(guò)程中我得出這樣的結(jié)論:

1.學(xué)習(xí)中,要養(yǎng)成良好的習(xí)慣(寫(xiě)括號(hào)時(shí)要成對(duì),字母大小寫(xiě)要區(qū)分,單詞拼寫(xiě)要準(zhǔn)確)。

2.在學(xué)習(xí)的過(guò)程中,最好不是僅僅停留在java表層,不是抄書(shū)上的例子運(yùn)行出結(jié)果就可以。要注意,即便對(duì)一個(gè)簡(jiǎn)單的例子也要有耐心去琢磨、調(diào)試、改動(dòng)。

3.在學(xué)習(xí)的過(guò)程中一定要?jiǎng)邮肿、試著?xiě)代碼,而不是抱一本書(shū)看看就行。很多東西和體會(huì)必須自己動(dòng)手才能真正屬于自己。

4. 在 java 的學(xué)習(xí)過(guò)程中,可能會(huì)遇到形形色色的問(wèn)題不容易解決,應(yīng)多去專(zhuān)業(yè)論壇了解相關(guān)的知識(shí),書(shū)本上的知識(shí)有限。要會(huì)從網(wǎng)上搜索有用的信息 加以整理,促進(jìn)學(xué)習(xí)的深入和知識(shí)水平的提高。

看了好多網(wǎng)上課程,說(shuō)學(xué)到一定程度要嘗試著自己做東西,但覺(jué)得自己僅僅經(jīng)過(guò)一學(xué)期的學(xué)習(xí),還遠(yuǎn)遠(yuǎn)不夠,希望自己在以后學(xué)習(xí)中繼續(xù)努力,能夠真真正正擁有一門(mén)編程語(yǔ)言,對(duì)自己今后的發(fā)展起到作用。

第四篇:java學(xué)習(xí)心得

java學(xué)習(xí)心得

一、 如何學(xué)好java??

1. 就本人認(rèn)為學(xué)好java關(guān)鍵就在于態(tài)度。態(tài)度是學(xué)習(xí)好java的前

提,積極的態(tài)度注定你就比別人學(xué)得認(rèn)真,自然最終學(xué)的一定

比不認(rèn)真的人學(xué)的好!

2. 有良好的前提,不努力也不行的,所以呀!還得練習(xí)。要做到

常練習(xí),多看,多思考(舉一反三,多方位的,全面的使你的

程序更加的完美);

3. 最后一點(diǎn),就是多多交流!閉門(mén)造車(chē)永遠(yuǎn)是落后的學(xué)習(xí)方式,

所以好要和身邊的一切可以交流技術(shù)的人積極交流,畢竟個(gè)人

的力量有限的!

二、 java中那些重要知識(shí)點(diǎn)!。ū救苏J(rèn)為最主要的是思想,

知識(shí)點(diǎn)也很重要,關(guān)鍵是在學(xué)習(xí)中總結(jié)出自己的一套思想,好的槍手都是子彈喂出來(lái)的,好的程序員都是寫(xiě)代

碼寫(xiě)出來(lái)的)

1. java數(shù)據(jù)類(lèi)型

a) 基本數(shù)據(jù)類(lèi)型:byte、short、int、long、float、double、char、

boolean(注意各自的取值范圍,還有轉(zhuǎn)換方式)

b) 引用數(shù)據(jù)類(lèi)型: 數(shù)組、類(lèi)、接口。

2. 運(yùn)算符號(hào)

a) 算術(shù)運(yùn)算符:+、 - 、* 、/ 、 %、++、--;

b) 賦值運(yùn)算符:=、+= 、-= 、*= 、/=、%=;

c) 比較運(yùn)算符:<、>、=<、=>、!=;(返回值都是false/true) d) 邏輯運(yùn)算符:&&、||、!

e) 位運(yùn)算符:用于操作二進(jìn)制位的運(yùn)算符:<<、>>、>>>……

4. 基本數(shù)據(jù)結(jié)構(gòu):

a) 順序結(jié)構(gòu)

b) 選擇結(jié)構(gòu)(if……else……,sm.hmlawpc.complements):一個(gè)類(lèi)可以實(shí)現(xiàn)一個(gè)或多個(gè)

接口,用逗號(hào)隔開(kāi)。

ii. 接口強(qiáng)調(diào)的是功能:has——a的問(wèn)題!

12. 多線程(thread類(lèi)與runable接口)

a) 主要方法:

i.

start()啟動(dòng)線程

ii.

iii.

iv. run()程序運(yùn)行的方法,功能實(shí)現(xiàn)區(qū)域 sleep()休眠,使程序處于休眠狀態(tài) interrupt()吵醒:吵醒處于休眠狀態(tài)的程序,使進(jìn)入正

常狀態(tài);

b) 線程同步(synchronized鎖)關(guān)鍵在于this與object的區(qū)別,

各自使用的范圍與壞境。

13. 流(input/output)

a) 分類(lèi):主要是字節(jié)流與字符流,還有緩沖流,數(shù)據(jù)流,對(duì)

象流……

b) 方法都差不多:主要是m.hmlawpc.comsdn因?yàn)槲覀(gè)人覺(jué)得它勝過(guò)任何一本編程參考書(shū)

msdn是 microsoft 當(dāng)前提供的有關(guān)編程信息的最全面的資源,它包含微軟最新的技術(shù)數(shù)據(jù)庫(kù),加上易學(xué)易用的全文檢索功能,讓您迅速找到任何您需要的技術(shù)參考數(shù)據(jù)

(二)加強(qiáng)自我管理,善于作自我總結(jié),分析自已的優(yōu)點(diǎn)及缺點(diǎn)

中國(guó)境內(nèi)百分之八十以上的領(lǐng)導(dǎo)人在百分之八十以上的場(chǎng)合的講話中都有類(lèi)似的觀點(diǎn),所以在這里我是不多說(shuō)了,反正這一條用在什么行業(yè)什么地方都不會(huì)有錯(cuò)的,人生最大的敵人不是就是自已嗎?管好自已認(rèn)清自已,那還有什么搞不定的?

(三)養(yǎng)成良好的文檔習(xí)慣

良好的文檔是正規(guī)研發(fā)流程中非常重要的環(huán)節(jié),一個(gè)好的程序是先寫(xiě)好設(shè)計(jì)文檔再進(jìn)行編程的,在設(shè)計(jì)文檔的指導(dǎo)下,才能寫(xiě)出安全的代碼。如果你不寫(xiě)文檔,一開(kāi)始就寫(xiě)程序,這樣你就不會(huì)按已設(shè)計(jì)好的路線走,而是想到哪寫(xiě)到哪。小功能還好說(shuō),要是大功能,就容易混亂甚至失控.那么如何寫(xiě)文檔呢?其實(shí)我認(rèn)為沒(méi)有統(tǒng)一的標(biāo)準(zhǔn),雖然國(guó)家及一些nb的人總結(jié)了很多的模板,但每個(gè)人的習(xí)慣不同,如果你不加以修改或創(chuàng)新,就套用某個(gè)標(biāo)準(zhǔn),我相信寫(xiě)起來(lái)會(huì)很吃力及說(shuō)不清的難受,因此我覺(jué)得只要能將你的設(shè)計(jì)思想及實(shí)現(xiàn)算法或步驟描述清楚就是好的文檔,我強(qiáng)烈建議廣大程序員朋友們?cè)趯?xiě)文檔時(shí)要善于用圖表來(lái)說(shuō)明你的思想,我們不是作家,也可能作文都經(jīng)常性地不及格,寫(xiě)出五官端正的文章對(duì)我們來(lái)說(shuō)可能不容易啊!好好地利用visio,rose或別的工具來(lái)表達(dá)你的思想吧!

(五)代碼風(fēng)格要規(guī)范,嚴(yán)謹(jǐn),效率要高。

(六)掌握好跟蹤調(diào)試技巧.

跟蹤調(diào)試程序是一件繁瑣而又復(fù)雜的事情,所以掌握必要的調(diào)試策略及技巧卻可以使這些工作變得輕松起來(lái).強(qiáng)烈建議你去看一下老美everett n.mckay及mike wooding寫(xiě)的書(shū)<<debugging windows programs>>,你一定受益匪淺.

(七)養(yǎng)成自我測(cè)試的習(xí)慣

測(cè)試工作應(yīng)由測(cè)試工程師來(lái)做,但在你寫(xiě)完一個(gè)模塊或一個(gè)軟件時(shí),還是要自已先測(cè)試一下,保證不要出現(xiàn)一些低級(jí)的錯(cuò)誤.

(八)善于交流善于溝通,特別是經(jīng)常與一些高手交流一下學(xué)習(xí)的心得體會(huì)

有人說(shuō),程序員的性格大多內(nèi)向不喜歡說(shuō)話,其實(shí)是有些誤會(huì)了,不是不喜歡而是話不投機(jī),我的腦袋一天到晚都在不停地轉(zhuǎn),函數(shù),數(shù)據(jù),算法啊充滿了我的世界,我那還有時(shí)間與你談一些無(wú)聊的話題,話要找對(duì)人了,才容易談下去,書(shū)上說(shuō)過(guò)"聽(tīng)君一席話,勝讀十年書(shū)",你要找的就是這種豁然開(kāi)朗!

(九)階段性地做一下專(zhuān)題總結(jié)

知識(shí)要溫故而知新,因此我程序員要養(yǎng)成階段性地做專(zhuān)題總結(jié)的習(xí)慣,比如你這個(gè)月學(xué)習(xí)或在做與多線程有關(guān)的模塊或項(xiàng)目,那么在你做完后,你就可以好好地總結(jié)一下所有與多線程相關(guān)的技術(shù),包括理論知識(shí),實(shí)踐方法以及各種技巧及優(yōu)秀文章等等,這對(duì)你各種能力的提高將有

很大的幫助,你試過(guò)了嗎,如果沒(méi)有,那就快點(diǎn)行動(dòng)吧!

(十)要有持之以恒的精神

我只是想說(shuō)明要學(xué)好任何一門(mén)技術(shù),最好要有持之以恒精益求精的精神,特別是學(xué)一些比較抽象比較難的技術(shù),除了思考一下你的學(xué)習(xí)方法以外,還必須堅(jiān)定你的目標(biāo)及信念!

我們向你推薦更多精彩內(nèi)容:

java學(xué)習(xí)心得體會(huì)

java學(xué)習(xí)心得

java學(xué)習(xí)心得

java學(xué)習(xí)心得 (1)

java學(xué)習(xí)心得

來(lái)源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問(wèn)題,請(qǐng)聯(lián)系我們及時(shí)刪除。


java學(xué)習(xí)心得》由互聯(lián)網(wǎng)用戶整理提供,轉(zhuǎn)載分享請(qǐng)保留原作者信息,謝謝!
鏈接地址:http://m.hmlawpc.com/gongwen/284295.html