亚洲AV成人无码久久WWW,亚洲午夜在线播放,国产亚洲综合一区柠檬导航http://www.tkk7.com/lovefeel2004/<a href="http://www.tkk7.com/lovefeel2004"> <h2> 好好學(xué)習(xí),努力工作,做個(gè)快樂(lè)的豬!!! </h2> </a>zh-cnSat, 10 May 2025 10:40:36 GMTSat, 10 May 2025 10:40:36 GMT60Linux命令學(xué)習(xí)筆記(一)http://www.tkk7.com/lovefeel2004/archive/2009/08/28/292929.html幽夢(mèng)新影幽夢(mèng)新影Fri, 28 Aug 2009 01:51:00 GMThttp://www.tkk7.com/lovefeel2004/archive/2009/08/28/292929.htmlhttp://www.tkk7.com/lovefeel2004/comments/292929.htmlhttp://www.tkk7.com/lovefeel2004/archive/2009/08/28/292929.html#Feedback0http://www.tkk7.com/lovefeel2004/comments/commentRss/292929.htmlhttp://www.tkk7.com/lovefeel2004/services/trackbacks/292929.html fileName 到另一個(gè)檔案) 參數(shù): -n 或 --number 由 1 開始對(duì)所有輸出的行數(shù)編號(hào) -b 或 --number-nonblank 和 -n 相似,只不過(guò)對(duì)于空白行不編號(hào) -s 或 --squeeze-blank 當(dāng)遇到有連續(xù)兩行以上的空白行,就代換為一行的空白行 -v 或 --show-nonprinting 范例: cat -n textfile1 > textfile2 把 textfile1 的檔案內(nèi)容加上行號(hào)后輸入 textfile2 這個(gè)檔案里 cat -b textfile1 textfile2 >> textfile3 把 textfile1 和 textfile2 的檔案內(nèi)容加上行號(hào)(空白行不加)之后將內(nèi)容附加到 textfile3 里。 cat /dev/null > /etc/test.txt 此為清空/etc/test.txt檔案內(nèi)容 cat 也可以用來(lái)制作 image file。例如要制作軟碟的 image file,將軟碟放好后打 cat /dev/fd0 > OUTFILE 相反的,如果想把 image file 寫到軟碟,請(qǐng)打 cat IMG_FILE > /dev/fd0 注: 1. OUTFILE 指輸出的 image 檔名。 2. IMG_FILE 指 image file。 3. 若從 image file 寫回 device 時(shí),device 容量需與相當(dāng)。 4. 通常用在制作開機(jī)磁片。cat主要有三大功能: 1.一次顯示整個(gè)文件。$ cat filename 2.從鍵盤創(chuàng)建一個(gè)文件。$ cat > filename 只能創(chuàng)建新文件,不能編輯已有文件 3.將幾個(gè)文件合并為一個(gè)文件。 $cat file1 file2 > file

幽夢(mèng)新影 2009-08-28 09:51 發(fā)表評(píng)論
]]>
Hibernate API(轉(zhuǎn)載)http://www.tkk7.com/lovefeel2004/archive/2009/01/08/250466.html幽夢(mèng)新影幽夢(mèng)新影Thu, 08 Jan 2009 04:04:00 GMThttp://www.tkk7.com/lovefeel2004/archive/2009/01/08/250466.htmlhttp://www.tkk7.com/lovefeel2004/comments/250466.htmlhttp://www.tkk7.com/lovefeel2004/archive/2009/01/08/250466.html#Feedback0http://www.tkk7.com/lovefeel2004/comments/commentRss/250466.htmlhttp://www.tkk7.com/lovefeel2004/services/trackbacks/250466.html提供訪問(wèn)數(shù)據(jù)庫(kù)操作的接口:Session接口,Transation接口,Query接口

用于配置Hibernate的接口:Configuration接口

Hibernate核心接口

Configuration接口:配置Hibernate,Hibernate應(yīng)用通過(guò)Configuration實(shí)例來(lái)指定對(duì)象-關(guān)系映射文件的位置或動(dòng)態(tài)配置Hibernate的屬性,然后創(chuàng)建SessionFactory對(duì)象實(shí)例。

SessionFactory接口:初始化Hibernate,充當(dāng)數(shù)據(jù)存儲(chǔ)源的代理、創(chuàng)建Session對(duì)象。

一個(gè)SessionFactory實(shí)例對(duì)應(yīng)一個(gè)數(shù)據(jù)存儲(chǔ)源,Hibernate應(yīng)用從SessionFactory中獲得Session對(duì)象實(shí)例。

特定:它是線程安全的,意味著同一個(gè)實(shí)例可以被應(yīng)用的多個(gè)線程共享,它是重量級(jí)的,意味著不能隨意創(chuàng)建或銷毀實(shí)例,一個(gè)數(shù)據(jù)庫(kù)訪問(wèn)只需創(chuàng)建一個(gè)實(shí)例。

Session接口:負(fù)責(zé)保存、更新、刪除、加載、查詢對(duì)象

Session接口被稱做持久化管理器,每個(gè)Session實(shí)例都有自已的緩存,用來(lái)存放被當(dāng)前工作單元加載的對(duì)象且只能被當(dāng)前工作單元訪問(wèn)。

特性,它不是線程安全的,應(yīng)該避免多個(gè)線程共享同一個(gè)Session實(shí)例,它是輕量級(jí)的,意味著創(chuàng)建或銷毀實(shí)例不需要消耗太多的資源,可以為每個(gè)請(qǐng)求分配單獨(dú)的Session實(shí)例,或者為每個(gè)工作單元分配單獨(dú)的Session實(shí)例。

Transation接口:Hibernate的數(shù)據(jù)庫(kù)事務(wù)接口,對(duì)底層的事務(wù)接口做了封裝。

封裝的底層事務(wù)接口:

JDBC API、JTA(Java Transation)API、CORBA(Common Object Request Broker Architecture)API

通過(guò)一致的Transation接口來(lái)聲明事務(wù)邊界,有利于應(yīng)用在不同環(huán)境或容器中移植。

Query接口和Criteria接口:執(zhí)行數(shù)據(jù)庫(kù)查詢,控制執(zhí)行查詢的過(guò)程。

Query接口封裝了一個(gè)面向?qū)ο蟮牟樵冋Z(yǔ)句(Hibernate Query Language, HQL)

Criteria接口封裝了基于字符串形式的查詢語(yǔ)句,擅長(zhǎng)于執(zhí)行動(dòng)態(tài)查詢。

回調(diào)接口:Interceptor接口、Lifecycle接口、Validatable接口

當(dāng)一個(gè)對(duì)象發(fā)生了特定的事件(如加載、保存、更新、刪除),Hibernate應(yīng)用可以通過(guò)回調(diào)來(lái)響應(yīng)事件。

回調(diào)接口按實(shí)現(xiàn)方式可分為:

Lifecycle接口和Validatable接口:由持久化類來(lái)實(shí)現(xiàn)接口。

Lifecycle接口,使持久化類的實(shí)例能響應(yīng)被加載、保存、刪除的事件。

Validatable接口,使持久化類的實(shí)例在被保存前進(jìn)行數(shù)據(jù)驗(yàn)證。

Interceptor接口:不必由持久化類來(lái)實(shí)現(xiàn)接口。Interceptor實(shí)現(xiàn)類負(fù)責(zé)響應(yīng)持久化類的實(shí)例被加載、保存、更新、刪除的事件。

映射類型接口:Type接口、UserType接口、CompositeUserType接口

Type接口,表示Hibernate映射類型,用于把域?qū)ο笥成錇閿?shù)據(jù)庫(kù)的關(guān)系數(shù)據(jù)。

Type接口的實(shí)現(xiàn)類:PrimitiveType類,映射Java基本類型。DateType類,映射Java日期類型。

擴(kuò)展接口:

定制主鍵的生成策略:IndentifierGenerator接口

定制本地SQL方言:Dialect抽象類

定制緩存機(jī)制:Cache接口、CacheProvider接口

定制JDBC連接管理:ConnectionProvider接口

定制事務(wù)管理:TransationFactory接口、Transation接口、TransationManagerLookup接口

定制ORM策略:ClassPersister接口及其子接口

定制屬性訪問(wèn)策略:PropertyAccesser接口

創(chuàng)建代理:ProxyFactory接口

定制客戶化映射類型:UserType接口、CompositeUserType接口。

在Hibernate中處理批量更新和批量刪除

批量更新是指在一個(gè)事務(wù)中更新大批量數(shù)據(jù),批量刪除是指在一個(gè)事務(wù)中刪除大批量數(shù)據(jù),以下程序直接通過(guò)Hibernate API批量更新

tx = session.beginTransaction();
Iterator customers=session.find("from Customer c where c.age>0").iterator();
while(customers.hasNext()){
Customer customer=(Customer)customers.next();
customer.setAge(customer.getAge()+1);
}
tx.commit();
session.close();
如果CUSTOMERS表中有1萬(wàn)條年齡大于零的記錄,那么Session的find()方法會(huì)一下子加載1萬(wàn)個(gè)Customer對(duì)象到內(nèi)存。當(dāng)執(zhí)行tx.commit()方法時(shí),會(huì)清理緩存,Hibernate執(zhí)行1萬(wàn)條更新CUSTOMERS表的update語(yǔ)句:

update CUSTOMERS set AGE=? …. where ID=i;
update CUSTOMERS set AGE=? …. where ID=j;
……
update CUSTOMERS set AGE=? …. where ID=k;
以上批量更新方式有兩個(gè)缺點(diǎn):

(1) 占用大量?jī)?nèi)存,必須把1萬(wàn)個(gè)Customer對(duì)象先加載到內(nèi)存,然后一一更新它們。

(2) 執(zhí)行的update語(yǔ)句的數(shù)目太多,每個(gè)update語(yǔ)句只能更新一個(gè)Customer對(duì)象,必須通過(guò)1萬(wàn)條update語(yǔ)句才能更新一萬(wàn)個(gè)Customer對(duì)象,頻繁的訪問(wèn)數(shù)據(jù)庫(kù),會(huì)大大降低應(yīng)用的性能。

為了迅速釋放1萬(wàn)個(gè)Customer對(duì)象占用的內(nèi)存,可以在更新每個(gè)Customer對(duì)象后,就調(diào)用Session的evict()方法立即釋放它的內(nèi)存:

tx = session.beginTransaction();
Iterator customers=session.find("from Customer c where c.age>0").iterator();
while(customers.hasNext()){
Customer customer=(Customer)customers.next();
customer.setAge(customer.getAge()+1);
session.flush();
session.evict(customer);
}
tx.commit();
session.close();

在以上程序中,修改了一個(gè)Customer對(duì)象的age屬性后,就立即調(diào)用Session的flush()方法和evict()方法,flush()方法使Hibernate立刻根據(jù)這個(gè)Customer對(duì)象的狀態(tài)變化同步更新數(shù)據(jù)庫(kù),從而立即執(zhí)行相關(guān)的update語(yǔ)句;evict()方法用于把這個(gè)Customer對(duì)象從緩存中清除出去,從而及時(shí)釋放它占用的內(nèi)存。

但evict()方法只能稍微提高批量操作的性能,因?yàn)椴还苡袥](méi)有使用evict()方法,Hibernate都必須執(zhí)行1萬(wàn)條update語(yǔ)句,才能更新1萬(wàn)個(gè)Customer對(duì)象,這是影響批量操作性能的重要因素。假如Hibernate能直接執(zhí)行如下SQL語(yǔ)句:

update CUSTOMERS set AGE=AGE+1 where AGE>0;

那么以上一條update語(yǔ)句就能更新CUSTOMERS表中的1萬(wàn)條記錄。但是Hibernate并沒(méi)有直接提供執(zhí)行這種update語(yǔ)句的接口。應(yīng)用程序必須繞過(guò)Hibernate API,直接通過(guò)JDBC API來(lái)執(zhí)行該SQL語(yǔ)句:

tx = session.beginTransaction();
Connection con=session.connection();
PreparedStatement stmt=con.prepareStatement("update CUSTOMERS set AGE=AGE+1 "
+"where AGE>0 ");
stmt.executeUpdate();
tx.commit();
以上程序演示了繞過(guò)Hibernate API,直接通過(guò)JDBC API訪問(wèn)數(shù)據(jù)庫(kù)的過(guò)程。應(yīng)用程序通過(guò)Session的connection()方法獲得該Session使用的數(shù)據(jù)庫(kù)連接,然后通過(guò)它創(chuàng)建PreparedStatement對(duì)象并執(zhí)行SQL語(yǔ)句。值得注意的是,應(yīng)用程序仍然通過(guò)Hibernate的Transaction接口來(lái)聲明事務(wù)邊界。

如果底層數(shù)據(jù)庫(kù)(如Oracle)支持存儲(chǔ)過(guò)程,也可以通過(guò)存儲(chǔ)過(guò)程來(lái)執(zhí)行批量更新。存儲(chǔ)過(guò)程直接在數(shù)據(jù)庫(kù)中運(yùn)行,速度更加快。在Oracle數(shù)據(jù)庫(kù)中可以定義一個(gè)名為batchUpdateCustomer()的存儲(chǔ)過(guò)程,代碼如下:

create or replace procedure batchUpdateCustomer(p_age in number) as
begin
update CUSTOMERS set AGE=AGE+1 where AGE>p_age;
end;
以上存儲(chǔ)過(guò)程有一個(gè)參數(shù)p_age,代表客戶的年齡,應(yīng)用程序可按照以下方式調(diào)用存儲(chǔ)過(guò)程:

tx = session.beginTransaction();
Connection con=session.connection();
String procedure = "{call batchUpdateCustomer(?) }";
CallableStatement cstmt = con.prepareCall(procedure);
cstmt.setInt(1,0); //把年齡參數(shù)設(shè)為0
cstmt.executeUpdate();
tx.commit();
從上面程序看出,應(yīng)用程序也必須繞過(guò)Hibernate API,直接通過(guò)JDBC API來(lái)調(diào)用存儲(chǔ)過(guò)程。

Session的各種重載形式的update()方法都一次只能更新一個(gè)對(duì)象,而delete()方法的有些重載形式允許以HQL語(yǔ)句作為參數(shù),例如:

session.delete("from Customer c where c.age>0");
如果CUSTOMERS表中有1萬(wàn)條年齡大于零的記錄,那么以上代碼能刪除一萬(wàn)條記錄。但是Session的delete()方法并沒(méi)有執(zhí)行以下delete語(yǔ)句:

delete from CUSTOMERS where AGE>0;

Session的delete()方法先通過(guò)以下select語(yǔ)句把1萬(wàn)個(gè)Customer對(duì)象加載到內(nèi)存中:

select * from CUSTOMERS where AGE>0;
接下來(lái)執(zhí)行一萬(wàn)條delete語(yǔ)句,逐個(gè)刪除Customer對(duì)象:

delete from CUSTOMERS where ID=i;
delete from CUSTOMERS where ID=j;
……
delete from CUSTOMERS where ID=k;
由此可見,直接通過(guò)Hibernate API進(jìn)行批量更新和批量刪除都不值得推薦。而直接通過(guò)JDBC API執(zhí)行相關(guān)的SQL語(yǔ)句或調(diào)用相關(guān)的存儲(chǔ)過(guò)程,是批量更新和批量刪除的最佳方式,這兩種方式都有以下優(yōu)點(diǎn):

(1) 無(wú)需把數(shù)據(jù)庫(kù)中的大批量數(shù)據(jù)先加載到內(nèi)存中,然后逐個(gè)更新或修改它們,因此不會(huì)消耗大量?jī)?nèi)存。

(2) 能在一條SQL語(yǔ)句中更新或刪除大批量的數(shù)據(jù)。

在hibernate中,最核心的概念就是對(duì)PO的狀態(tài)管理,一個(gè)PO有三種狀態(tài):

未被持久化的VO

此時(shí)就是一個(gè)內(nèi)存對(duì)象VO,由JVM管理生命周期

已被持久化的PO,并且在Session使命周期內(nèi)

此時(shí)映射數(shù)據(jù)庫(kù)數(shù)據(jù),由數(shù)據(jù)庫(kù)管理生命周期

曾被持久化過(guò),但現(xiàn)在和Session已經(jīng)detached了,以VO的身份在運(yùn)行。

這種和Session已經(jīng)detached的PO還能夠進(jìn)入別一個(gè)Session,繼續(xù)進(jìn)行PO狀態(tài)狀管,此時(shí)它就成為PO的第二種狀態(tài)了。

這種PO實(shí)際上是跨了Session進(jìn)行了狀態(tài)維護(hù)的。

在傳統(tǒng)的JDO1.x中,PO只有前面兩種狀態(tài),一個(gè)PO一旦脫離PM,就喪失了狀態(tài)了,不再和數(shù)據(jù)庫(kù)數(shù)據(jù)關(guān)聯(lián),成為一個(gè)純粹的內(nèi)存VO,它即使進(jìn)入一個(gè)新的PM,也不能恢復(fù)它的狀態(tài)了。

Hibernate強(qiáng)的地方就在于,一個(gè)PO脫離Session之后,還能保持狀態(tài),再進(jìn)入一個(gè)新的Session之后,就恢復(fù)狀態(tài)管理的能力,但此時(shí)狀態(tài)管理需要使用session.update或者session.saveOrUpdate,這就是Hibernate Reference中提到的“requires a slightly different programming model ”



幽夢(mèng)新影 2009-01-08 12:04 發(fā)表評(píng)論
]]>
我的第一個(gè)Struts2.0程序http://www.tkk7.com/lovefeel2004/archive/2008/12/30/249191.html幽夢(mèng)新影幽夢(mèng)新影Tue, 30 Dec 2008 08:13:00 GMThttp://www.tkk7.com/lovefeel2004/archive/2008/12/30/249191.htmlhttp://www.tkk7.com/lovefeel2004/comments/249191.htmlhttp://www.tkk7.com/lovefeel2004/archive/2008/12/30/249191.html#Feedback5http://www.tkk7.com/lovefeel2004/comments/commentRss/249191.htmlhttp://www.tkk7.com/lovefeel2004/services/trackbacks/249191.html 項(xiàng)目已經(jīng)基本上完成了 , 有剛好有時(shí)間 , 就來(lái)看下 Struts2.0, 這東西聽說(shuō)比 Struts1.X 要好用很多了 , 也不知道 , Struts2 出來(lái)也有好兩年了 , 應(yīng)該大家都比較熟悉了 , 而我是第一次接觸 , 先寫一個(gè) HelloWorld 來(lái)玩一下先 .

一準(zhǔn)備工作 :

(1) 開發(fā)環(huán)境 :Tomcat6.0+JDK1.6.03+EditPlus3.0+Struts2.03

(2) 準(zhǔn)備 Struts2 的核心包 :



二配置文件

(1) 先在 web.xml < web-app> < /web-app> 中添加 Struts2 Filter 如下 :

?1?<filter>
?2
?3??????????<filter-name>struts2</filter-name>
?4?
?5??????????<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
?6?
?7???</filter>
?8?
?9??
10?
11???<filter-mapping>
12?
13??????????<filter-name>struts2</filter-name>
14?
15??????????<url-pattern>/*</url-pattern>
16?
17???</filter-mapping>
18?


(2)

classes 文件夾中建一個(gè) xml 文件 , 命名為 struts.xml, 內(nèi)容為 :

?1?<?xml?version="1.0"?encoding="UTF-8"??>
?2?<!DOCTYPE?struts?PUBLIC
?3?????????"-//Apache?Software?Foundation//DTD?Struts?Configuration?2.0//EN"
?4?????????"http://struts.apache.org/dtds/struts-2.0.dtd">
?5?<struts>
?6?????<package?name="cn.struts2"?extends="struts-default">
?7?????????<action?name="HelloWorld"?class="?cn.struts2.HelloWorld">
?8?????????????<result>HelloWorld.jsp</result>
?9?????????</action>
10?????</package>
11?</struts>
12?
13?


三編寫程序

一共三個(gè)文件 :HelloWorld.java;HelloWorld.jsp;SayHello.jsp

其內(nèi)容如下 :

HelloWorld.java
?1package?cn.struts2;
?2
?3import?com.opensymphony.xwork2.ActionSupport;
?4
?5public?class?HelloWorld?extends?ActionSupport?{
?6????private?String?name;
?7????
?8????public?String?getName()?{
?9????????return?name;
10????}

11
12????public?void?setName(String?name)?{
13????????this.name?=?name;
14????}

15
16?????public?String?execute()?{
17????????name?=?name?+”,Hello?World!!
18????????return?SUCCESS;
19????}

20}

?

HelloWorld.jsp

?1?<%@?page?contentType="text/html;?charset=UTF-8"?%>
?2?
?3?<%@?taglib?prefix="s"?uri="/struts-tags"?%>
?4?
?5?<!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">
?6?
?7?<html>
?8?
?9?????<head>
10?
11?????????<title>Hello</title>
12?
13?????</head>
14?
15?????<body>
16?
17?????????<h3><s:property?value="name"?/></h3>
18?
19?????</body>
20?
21?</html>
22?

?

SayHello.jsp

?1?<%@?page?contentType="text/html;?charset=UTF-8"?%>
?2?
?3?<%@?taglib?prefix="s"?uri="/struts-tags"?%>
?4?
?5?<!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">
?6?
?7?<html>
?8?
?9?????<head>
10?
11?????????<title>Say?Hello</title>
12?
13?????</head>
14?
15?????<body>
16?
17?????????<h3>Say?"Hello?World"?to:?</h3>
18?
19?????????<s:form?action="HelloWorld">
20?
21?????????????Name:?<s:textfield?name="name"?/>
22?
23?????????????<s:submit?/>
24?
25?????????</s:form>
26?
27?????</body>
28?
29?</html>
30?


這里用到了

Struts2 的標(biāo)簽庫(kù) , 下面對(duì)他進(jìn)行一下解釋

?

< s:form? action ="" ></ s:form > -----獲取相應(yīng)form的值
< s:textfield ></ s:textfield > -----文本輸入框
< s:submit ></ s:submit > -----提交按鈕
< s:property? value =”” /> -----得到'value'的屬性

?

四結(jié)果

啟動(dòng) Tomcat, 在瀏覽器中輸入 http://localhost:8080/struts2/SayHello.jsp , 即可進(jìn)入到 :

?

然后在文本框中輸入 Tomcat, 點(diǎn) Submit, 可得

?

如果順利執(zhí)行 , 則大功告成 !



幽夢(mèng)新影 2008-12-30 16:13 發(fā)表評(píng)論
]]>
一些JAVA學(xué)習(xí)筆記 http://www.tkk7.com/lovefeel2004/archive/2008/12/08/245058.html幽夢(mèng)新影幽夢(mèng)新影Mon, 08 Dec 2008 08:41:00 GMThttp://www.tkk7.com/lovefeel2004/archive/2008/12/08/245058.htmlhttp://www.tkk7.com/lovefeel2004/comments/245058.htmlhttp://www.tkk7.com/lovefeel2004/archive/2008/12/08/245058.html#Feedback4http://www.tkk7.com/lovefeel2004/comments/commentRss/245058.htmlhttp://www.tkk7.com/lovefeel2004/services/trackbacks/245058.html閱讀全文

幽夢(mèng)新影 2008-12-08 16:41 發(fā)表評(píng)論
]]>
糾正一些關(guān)于Servlet的誤解http://www.tkk7.com/lovefeel2004/archive/2008/11/21/241838.html幽夢(mèng)新影幽夢(mèng)新影Fri, 21 Nov 2008 04:55:00 GMThttp://www.tkk7.com/lovefeel2004/archive/2008/11/21/241838.htmlhttp://www.tkk7.com/lovefeel2004/comments/241838.htmlhttp://www.tkk7.com/lovefeel2004/archive/2008/11/21/241838.html#Feedback1http://www.tkk7.com/lovefeel2004/comments/commentRss/241838.htmlhttp://www.tkk7.com/lovefeel2004/services/trackbacks/241838.html  

Servlet三個(gè)要素:
      1.必須繼承自HttpServlet
      2.必須實(shí)現(xiàn)doGet()或者doPost()
      3.必須在web.xml中配置Servlet
      <servlet>
      <servlet-name> </servlet-name>
      <servlet-class> </servlet-class>
      </servlet>
      
      <servlet-mapping>
      <servlet-name> </servlet-name>
      <url-pattern> </url-pattern>
      </servelt-mapping>

   
    有誰(shuí)說(shuō)了編寫一個(gè)Servlet必須繼承自HttpServlet類,必須實(shí)現(xiàn)doGet()或者doPost() ,難道實(shí)現(xiàn)Servlet接口就不行了嗎? 
    其實(shí)編寫一個(gè)Servlet主要有三種方法,一是實(shí)現(xiàn)Servlet接口,二是繼承抽象類GenericServlet,三是繼承HttpServlet類.下面分別用這三種方法去實(shí)現(xiàn)Servlet:
    (一)要從實(shí)現(xiàn)Servlet接口來(lái)編寫一個(gè)Servlet是比較麻煩的,因?yàn)楸仨殞?shí)現(xiàn)Servlet接口中的所有方法,Servlet接口主要定義了五個(gè)方法,它們分別為:
(1)void init(ServletConfig config) throws ServletException
(2)ServletConfig getServletConfig()
(3)void service(ServletRequest req,ervletResponse res) throws ServletException,IOException
(4)String getServletInfo()
(5)void destroy()
下面用實(shí)現(xiàn)Servlet接口的方法編寫一個(gè)Servlet:
import javax.servlet.*;
import java.io.*;
public class TestServlet implements Servlet{
    
public void init(ServletConfig config) throws ServletException{
        System.out.println(
"init");
        }

    
public ServletConfig getServletConfig(){
        reture 
null;
        }

    
public void service(ServletRequest req,ServletResponse res) 
        
throws ServletException,IOException{
            
//這里可以實(shí)現(xiàn)請(qǐng)求后要做的內(nèi)容
            PrintWriter out = response.getWriter();
      out.println(
"Hello World!");

            }

    
public String getServletInfo(){
        
return null;
        }

    
public void destroy(){
        System.out.println(
"destory");
        }

    }
 
    
    (二)繼承抽象類GenericServlet編寫一個(gè)Serlvet,這個(gè)相對(duì)比實(shí)現(xiàn)Servlet接口要容易一點(diǎn),GenericServlet類中只有一個(gè)抽象方法,即service(ServletRequest req, ServletResponse res),只要實(shí)現(xiàn)這個(gè)方法就行了,下面看例子:
import javax.servlet.*;
import java.io.IOException;

public TestGenericServlet extends GenericServlet{
    
public abstract void service(ServletRequest req,ServletResponse res)
                      
throws ServletException,IOException{
     PrintWriter out 
= response.getWriter();
     out.println(
"Hello World!");                     
     }

}


(3)繼承HttpServlet類編寫Servlet應(yīng)該是最容易的,而且是最常見的,我們一般要編寫Servlet直接繼承這個(gè)類就行了,重寫doGet()或者doPost()方法即可,下面看例子:
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;

public TestHttpServlet extends HttpServlet{
    
public void doGet(HttpServletRequest request, HttpServletResponse response)
        
throws IOException, ServletException {
  response.setContentType(
"text/html;charset=gb2312");
  PrintWriter out 
= response.getWriter();

  out.println(
"<html>");
  out.println(
"<head>");
  out.println(
"<title>HelloWorld</title>");
  out.println(
"</head>");
  out.println(
"<body bgcolor=\"white\">");
  out.println(
"<hr>");
  out.println(
"HelloWorld");
  out.println(
"</body></html>");
 }


 
public void doPost(HttpServletRequest request, HttpServletResponse response)
   
throws IOException, ServletException {
  doGet(request, response);
 }


}


幽夢(mèng)新影 2008-11-21 12:55 發(fā)表評(píng)論
]]>
做個(gè)快樂(lè)的豬http://www.tkk7.com/lovefeel2004/articles/241362.html幽夢(mèng)新影幽夢(mèng)新影Wed, 19 Nov 2008 06:34:00 GMThttp://www.tkk7.com/lovefeel2004/articles/241362.htmlhttp://www.tkk7.com/lovefeel2004/comments/241362.htmlhttp://www.tkk7.com/lovefeel2004/articles/241362.html#Feedback0http://www.tkk7.com/lovefeel2004/comments/commentRss/241362.htmlhttp://www.tkk7.com/lovefeel2004/services/trackbacks/241362.html好好學(xué)習(xí),努力工作,做個(gè)快樂(lè)的豬!

幽夢(mèng)新影 2008-11-19 14:34 發(fā)表評(píng)論
]]>
主站蜘蛛池模板: 免费黄色小视频网站| 伊人久久大香线蕉免费视频| 亚洲欧美日韩久久精品| 亚洲制服丝袜第一页| 亚洲男人天堂2018av| 亚洲六月丁香婷婷综合| 亚洲色成人网站WWW永久四虎| 亚洲国产日韩精品| 亚洲欧美中文日韩视频| 亚洲美国产亚洲AV| MM1313亚洲精品无码久久| 国产亚洲成在线播放va| 特a级免费高清黄色片| 国产99精品一区二区三区免费| 一区二区免费在线观看| 中文字幕在线免费视频| 日本免费高清视频| 国产免费一区二区三区| 国内外成人免费视频| 国产婷婷高清在线观看免费| 亚洲人成网站观看在线播放| 亚洲日韩精品射精日| 亚洲欧洲日产国码久在线观看| 亚洲成a人片在线网站| 亚洲另类无码专区首页| 老司机福利在线免费观看| 美女巨胸喷奶水视频www免费| 特级无码毛片免费视频尤物| 黄色片在线免费观看| 国产精品免费电影| 国产成人综合亚洲亚洲国产第一页 | 亚洲精品mv在线观看| 亚洲人精品亚洲人成在线| 精品国产亚洲一区二区三区在线观看 | 亚洲va在线va天堂va不卡下载| 亚洲嫩草影院在线观看| 亚洲AV成人无码网站| 免费无码又爽又刺激网站| 91成人免费在线视频| 一区国严二区亚洲三区| 亚洲国产香蕉碰碰人人|