日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

整合Struts2、Spring、Hibernate构建J2EE应用

發(fā)布時間:2023/12/15 javascript 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 整合Struts2、Spring、Hibernate构建J2EE应用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【論文摘要】

J2EE即是以Java 2平臺為基礎(chǔ)的體系結(jié)構(gòu),又是一組旨在簡化企業(yè)解決方案的開發(fā)、部署、運行、維護等相關(guān)復雜問題的技術(shù)規(guī)范與指南。Struts2、Spring、Hibernate是當今符合J2EE技術(shù)規(guī)范的三個流行的開源框架。本文通過對這三個框架的工作機制的分析引伸出它們在J2EE應用中的互補作用,進而講解它們在J2EE開發(fā)中的整合。最后通過一個簡單的實例演示Struts2+Spring+Hibernate的開發(fā)流程。

關(guān)鍵字: Struts2? Spring? Hibernate? J2EE??

【Abstract】

J2EE is the structure base on Java 2 platform, it also a set of technical specification and guidelines to simplify the complex issues of the enterprise solutions of development, deployment, operation and maintenance of enterprise solutions. Struts2, Spring and Hibernate are three prevailing open-source framework in line with J2EE technical specification. This paper analyzes the working mechanism of these three frameworks, amplifies the complementary effect in their application of J2EE, and then introduces their integration in the development of J2EE. Finally, it demonstrates the developing process of Struts2+Spring+Hibernate through a simple case.

一 Struts2簡介

(一) Struts2是什么,及在Java web開發(fā)中的作用

Struts2是一個基于J2EE平臺的開源的MVC框架。它著力于Control和View,提供完善的控制方案并定制了功能強大的標簽庫。從某種意義上講Struts2并不涉及Model,但它提供了訪問Model的入口(execute()方法相當于訪問Model的一個入口,業(yè)務邏輯層及其以下層次Struts2不涉及)。使用Struts2開發(fā)的系統(tǒng)具有以下多種優(yōu)點:結(jié)構(gòu)層次分明(MVC),可重用性高(框架正是把系統(tǒng)的共性部分抽取出來,提供給不同應用使用),程序健壯性(強大的驗證機制與類型轉(zhuǎn)換功能)、可伸縮性(動態(tài)加載插件、設(shè)計良好的抽象類、接口等)有保證,便于開發(fā)與設(shè)計分工(MVC)等。

(二) Struts2與Struts的關(guān)系及區(qū)別

Struts2不是Struts的簡單的版本升級,而是本質(zhì)上的飛越。事實上Struts2主要是從WebWork基礎(chǔ)上發(fā)展起來,再吸收Struts的一些優(yōu)點匯集而成的。(至于為什么叫Struts2而不叫WebWork2.x,很大程度是因為Struts在業(yè)內(nèi)的知名度要比WebWork要高的原故。)

由于Struts2主要是繼承于WebWrok的,所以它與Struts1的區(qū)別其實是很大的,以下列舉其中幾個重要方面:

Action類:Struts1要求Action類必須繼承一個抽象基類(如Action、BasicAction)。Struts2也提供一個抽象基類ActionSupport實現(xiàn)常用的一些接口,Struts2的Action類盡管常常實現(xiàn)這個類,但這不是必須的,它不只可以繼承一個Action類,還可以不繼承Action類而實現(xiàn)其他接口,以便于定制一些特定的服務,增強了Action類的靈活性。

線程模式: Struts1的Action是單例模式,盡管這一定程度節(jié)約了資源的損耗,但同時要求開發(fā)者必須小心翼翼地把它設(shè)計成線程安全(需要是無狀態(tài)的,即不能有可寫屬性)的,從而限制了Action所能做的工作。Struts2的Action即可以是單例模式,也可以是原型模式的,即可為每一個請求產(chǎn)生一個實例,因此沒有線程安全問題。這也進一步體現(xiàn)了Struts2比Struts1要優(yōu)雅得多。

對Servlet依賴: Struts1的Action依賴于Servlet API,當一個Action被調(diào)用時HttpServletRequest和HttpServletResponse需被傳遞給execute(或其它定制的)方法。Struts2的Action不依賴于容器,允許Action脫離容器單獨執(zhí)行(從而提高了可測性)。在需要時Struts2的Action也可以訪問HttpServetRequest和HttpServletResponse。

輸入捕獲: Struts1的Action是單例模式(不應該出現(xiàn)可寫屬性),數(shù)據(jù)是先經(jīng)過ActionForm封裝再交給Action的。我認為這是Struts1設(shè)計的最大缺陷之一,ActionForm與DAO層的Doamin對象形式差不多,執(zhí)行的功能也相似,只是意圖不同,這種代碼的冗余會給開發(fā)、維護帶來一系列問題。而Struts2的Action則是原型模式,每個Action都可以有其特有的屬性,從而數(shù)據(jù)不需要經(jīng)由ActionForm封裝便可直接獲取。很明顯Struts2對輸入的捕獲及處理過程更加易于理解、更加簡潔。

(三) strust2的工作流程

strust2的工作流程可歸納為以下幾個步驟

1.客戶端Http請求提交。

2.strust2的總控制器FilterDispatcher通過sturts.xml分析哪個Action進行處理。

3.指定的Action執(zhí)行相關(guān)的類型轉(zhuǎn)換方法(可省)、setXxx()方法、validate()方法等。

4.執(zhí)行execute()方法(如果有指定其它方法則調(diào)用其它方法)。

5.sturts.xml根據(jù)execute()方法(或其它方法)返回的結(jié)果字符串確定接下來的工作(通常是調(diào)用一個jsp頁面,也可以是另一個Action或其它方式)。

6.Http響應客戶端。

二 Spring簡介

(一) Spring是什么

Spring是一個輕量級的提供控制反轉(zhuǎn)(IoC)、面向切面(AOP)容器的開源框架。

2004年Spring創(chuàng)始人Rod Johnson發(fā)表的《Expert one-to-one J2EE Development without EJB》劍指EJB,對EJB的各種龐大又笨重的結(jié)構(gòu)進行了分析和否定,隨后推出的Spring便是以簡潔實用的方式替換了EJB所能完成的大部分功能(以我對EJB的一點淺薄認識,必須承認就目前而言,特別是EJB3.0的推出,在很多方面Spring還是無法企及的)。它使用基本的JavaBean來完成以前只能由EJB完成的事情。當然Spring適合的范圍不僅限于服務器端的開發(fā)。從簡單性、可測試性和松耦合的角度而言,任何Java應用都可以從Spring中受益。

傳統(tǒng)J2EE應用由于分層多,而各層之間又沒有合理的銜接,至使開發(fā)效率低、系統(tǒng)也不易維護,應用服務器廠商對各種技術(shù)的支 持 并沒有真正統(tǒng)一,導致J2EE的應用沒有真正實現(xiàn)一次編譯及到處執(zhí)行的承諾。Spring的推出簡化了J2EE應用開發(fā)的復雜性,它能獨立于各種應用服務器容器,致力于J2EE應用各層的解決方案,它貫穿于View、Business及DAO各層,是它們之間很好的黏合劑。Spring的作用正是能與已有的框架配合,把它們無縫地整合在一起,使整個J2EE應用開發(fā)更加順暢。

(二) Spring相關(guān)技術(shù)介紹

1.輕量級:

Spring的輕量級并不是體現(xiàn)在Spring的完整代碼只有那么一點點(不到3MB),而是指Spring所需的系統(tǒng)開銷是很小的(簡直不能與EJB相提并論)。另外,Spring應用中的對象并不依賴于Spring的特定類(對象無需顯示的聲明Spring的特定類),Spring是非侵入式的。

2.控制反轉(zhuǎn):

控制反轉(zhuǎn)(IoC)技術(shù)的運用降低了各層的耦合度。這是Spring框架最核心的一個方面。IoC概括起來說就是:一個對象所依賴的其它對象會通過容器(被動的)傳遞(在Spring常稱為“注入”)進來,而不是該對象自己創(chuàng)建或者查找依賴對象。可以說企業(yè)級應用各層的無逢銜接正是通過IoC實現(xiàn)。更進一步說,Spring抽象了服務,借助于各種J2EE API抽象,開發(fā)者能夠一致地使用J2EE 技術(shù),而不管具體的實現(xiàn)方式是怎樣的。下面代碼可以很好的說明這一點:

這是傳統(tǒng)的服務層的實現(xiàn)類:

public class UserServiceImpl implements UserService{

//由于依賴對象由當前對象管理,所以這里new 需指明具體實現(xiàn)類。

private UserDao userDao=new UserDaoImpl();

private void add(User user)

{

? userDao.add(user);

}

}

使用Spring框架后的情況:

public class PersonServiceBean implements PersonService {

//依賴注入,即通過構(gòu)造器,讓容器把創(chuàng)建好的依賴對象注入進來

//此處不需要硬編碼說明具體實現(xiàn)類(只需在xml文件配置即可),這便是IoC的巨大優(yōu)點!

private UserDao userDao;

public PersonServiceBean(UserDao userDao) {

? this.UserDao=userDao;

}

private void add(User user)

{

? userDao.add(user);

}

}

抽象了服務!僅此一點,足矣讓絕大多數(shù)開發(fā)者興奮不已!

3.面向切面:

Spring提供了面向切面(AOP)編程的支 持 ,允許開發(fā)者以聲名方式使用企業(yè)級服務,最典型的是聲明式事務管理。通過Spring提供的事務管理服務,開發(fā)者便不再需要手工管理事務,也無需處理復雜的事務傳播行為。

下面還是以例子說明AOP的作用:

這是DAO層的代碼:

public class UserDaoImpl implements UserDao

{

public void save(User user)

{

? Session s=HibernateUtil.getSession();

? Transaction tx=null;

? try {

?? tx=s.beginTransaction(); //開啟事務

?? s.save(user);

?? tx.commit();//提交事務

? }catch(Exception e){

?? if(tx!=null)

??? tx.rollback();//回滾事務

?? try {

??? throw e;

?? }catch (Exception e1) {

??? e1.printStackTrace();

?? }

? }finally{

?? if(s!=null)

??? s.close();//關(guān)閉session

? }

}

}

顯然這是不好的代碼。盡管事務管理屬于DAO層的代碼,但由于DAO各方法會以不同方式組合成同一個事務,從而事務不應該在DAO層管理,而應該交給更高一層級,于是應該去掉事務管理代碼,改為:

public class UserDaoImpl implements UserDao

{

public void save(User user)

{

? s=HibernateUtil.getSession();

? try {

?? s.save(user);

? }finally{

?? //同上,關(guān)閉session

? }

}

}

然后是服務層代碼:

public class UserManagerImpl implements UserManager {

private UserDao userDao;

public void saveUser(User user)

{

? Session s=HibernateUtil.getSession();

? Transaction tx=null;

? try {

?? tx=s.beginTransaction();

?? userDao.save(user);

?? //其它方法

?? sendMessage();

?? sendEmail();

?? tx.commit();

? }catch(Exception e){

?? //同上,回滾事務

? }finally{

?? //同上,關(guān)閉session

? }

}

}

這是在沒有Spring情況下習慣的做法,這似乎也是較為合理的做法,但事務的開啟與關(guān)閉是DAO層的代碼,怎么跑到服務層來了呢?顯然這樣做服務層一定程度耦合了DAO層,通過Spring可以得到很好的解決:

public class UserManagerImpl implements UserManager {

private UserDao userDao;

//聲明事務處理方式

@Transactional(propagation=Propagation.REQUIRED)

public void saveUser(User user)

{

? userDao.save(user);

? //其它方法

? sendMessage();

? sendEmail();

<, SPAN style="mso-spacerun: yes"> }

}

不但徹底解耦,還大大簡化了代碼,程序顯得優(yōu)雅許多了。

4.容器:

Spring容器包含并管理應用對象的配置和生命周期,開發(fā)者可以通過XML配置每個bean如何被創(chuàng)建(默認是singleton,也可以是prototype),以及它們是如何相互關(guān)聯(lián)的。

如下applicationContext.xml配置:

class="org.apache.commons.dbcp.BasicDataSource">

class="org.Springframework.orm.Hibernate3.LocalSessionFactoryBean"?

destroy-method="close">

?

可以看得出Spring自底向上把各層銜接起來。特別是在多框架整合的情況(如上面配置,即是整合了Hibernate、Struts2的典型配置方式),Spring使各框架無逢地結(jié)合到了一起。

三 Hibernate簡介

(一) Hibernate是什么

Hibernate是一個開源的數(shù)據(jù)持久層框架,用于實現(xiàn)對象與關(guān)系之間的映射(即O/R Mapping)。它對JDBC進行了輕量級的對象封裝,使Java程序員可以使用面向?qū)ο缶幊趟枷雭聿僮鲾?shù)據(jù)庫。它不但提供了從Java類到數(shù)據(jù)表的映射,還提供了數(shù)據(jù)查詢和恢復機制。相對于使用JDBC和SQL來操作數(shù)據(jù)庫,通過使用Hibernate,大量封裝持久化操作的業(yè)務邏輯不再需要編寫煩瑣的JDBC語句,極大簡化了編程實現(xiàn)。Hibernate是跨數(shù)據(jù)庫的,因此基于Hibernate編寫的代碼不會因為數(shù)據(jù)庫的更換而重寫。

(二) 領(lǐng)域模型

Hibernate中領(lǐng)域模型(Domain)對象通過xml文件映射了數(shù)據(jù)庫的一張表(或多張表),xml文件通常位于Domain對象同一個包,命名為ClassName.hbm.xml(ClassName為映射的類名),Domain對象通常只有一些屬性(對應表的字段)及相應的setter、getter方法,當然還得符合以下幾個條件才能成為Domain對象:

1。必須要有默認的構(gòu)造方法。

2。有無意義的標識符id(主鍵)。

3。非final,這是使用懶加載所需的要求。(因為懶加載需要繼承該類,如果加了final,該類便不可繼承了。)

(三) 對象狀態(tài)

在Hibernate中,對象狀態(tài)也是比較重要的概念,分別有以下三種:

1.瞬時:數(shù)據(jù)庫沒有記錄與之對應。

2.持久:數(shù)據(jù)庫有記錄與之對應,當前與session有關(guān)聯(lián),并且相關(guān)聯(lián)的session沒有關(guān)閉,事務沒有提交。持久對象狀態(tài)發(fā)生改變,在事務提交時會影響到數(shù)據(jù)庫。

3.脫管:即脫離管理。數(shù)據(jù)庫有記錄與之對應,當前沒有session與之關(guān)聯(lián),脫管對象狀態(tài)發(fā)生改變,不會影響到數(shù)據(jù)庫。

(四) HQL(Hibernate Query Language)

是Hibernate提供的用于跨數(shù)據(jù)庫查詢的面向?qū)ο蟛樵冋Z言,它是按對象名而不是按表名來查詢。同時支 持 多態(tài)查詢,即查詢父類,會同時查詢子類。比如from Object會查詢所有對象,即查詢所有表。

(五) 對象關(guān)系映射

Hibernate提供了一對一、多對一、一對多、多對多等對象關(guān)系映射。

但需要指出的是,由于實際系統(tǒng)運行時性能的需求,往往不做多對多關(guān)聯(lián)(它需要對多個表進行關(guān)聯(lián)查詢,效率很低),甚至一對多關(guān)聯(lián)也很少做。

(六) 懶加載

懶加載,即只有在要用到數(shù)據(jù)時才到數(shù)據(jù)庫里讀取。通過session.load()可以實現(xiàn)對象的懶加載,從而盡量減少數(shù)據(jù)庫訪問次數(shù)以緩解系統(tǒng)的壓力。需要注意的是,能夠懶加載的對象都是被改寫過的代 理 對象,當相關(guān)聯(lián)的session沒有關(guān)閉時,訪問這些懶加載對象(代 理 對象)的屬性(getId、getClass除外)Hibernate會初始化這些代 理 ,或用Hibernate.initialize(proxy)來初始化代 理 對象;當相關(guān)聯(lián)的session關(guān)閉后,再訪問懶加載對象將出現(xiàn)異常。

(七) 緩存

緩存又可分為一級緩存跟二級緩存。

一級緩存,是Session級共享。save、update、saveOrUpdate、load、get、list、iterate、lock這些方法都會將對象放入一級緩存中,由于一級緩存不能控制緩存的大小,不宜操作過大的數(shù)據(jù),否則容易造成內(nèi)存溢出,為此需用session.evict(Object)、session.clear()方法清除緩存中的內(nèi)容。

二級緩存,是SessionFactory級共享。Hibernate并沒有實現(xiàn)二級緩存,而是將之交給第三方緩存組件(如:EhCache、OSCache等)實現(xiàn)。

四 整合Struts2、Spring、Hibe, rnate構(gòu)建J2EE應用

(一) 什么是J2EE

J2EE即Java2平臺企業(yè)版(Java 2 Platform Enterprise Edition),是一套以Java 2平臺為基礎(chǔ)的技術(shù)架構(gòu)。包含許多組件,目的在于簡化并規(guī)范應用系統(tǒng)的開發(fā)與部署,進而提高可移植性、安全性與再用價值。J2EE核心是一組技術(shù)規(guī)范與指南,它給開發(fā)人員提供了一個應用標準,定義了一個標準的應用體系結(jié)構(gòu),J2EE作為解決企業(yè)級應用的標準,將企業(yè)級應用劃分成不同層次,便于應用開發(fā),管理和部署。J2EE應用服務器支 持 各種組件,如Servlet、JSP、EJB等,這些組件分別安裝和部署于各自的容器中,使用標準的J2EE service API連接,靈活地實現(xiàn)應用。

(二) J2EE多層應用分析與實現(xiàn)

經(jīng)典的J2EE三層結(jié)構(gòu)是指表示層(Presentation),業(yè)務邏輯層(Business logic)以及基礎(chǔ)架構(gòu)層(Infrastructure)。在實際項目開發(fā)中,往往會對三層體系結(jié)構(gòu)做一些擴展來滿足項目的需要。如今較流行的方式是將三層體系擴展為五層體系,即在表示層與業(yè)務邏輯層之間增加控制層(在某些情況下甚至還會在控制層與業(yè)務邏輯層再增加代 理 層),再把基礎(chǔ)架構(gòu)層細分為數(shù)據(jù)訪問層、數(shù)據(jù)層。Struts2 + Spring + Hibernate可以實現(xiàn)J2EE的這種多層結(jié)構(gòu)。其中Struts2用于表示層與控制層,而Spring工作的中心在業(yè)務層,同時又粘合控制層、業(yè)務層與數(shù)據(jù)訪問層,Hibernate則用于數(shù)據(jù)訪問與持久化工作。

(三) J2EE層次結(jié)構(gòu)

1. 數(shù)據(jù)層

數(shù)據(jù)層是指提供所需數(shù)據(jù)的數(shù)據(jù)庫系統(tǒng)。數(shù)據(jù)庫里記錄了系統(tǒng)所需要的所有數(shù)據(jù)。由于數(shù)據(jù)庫系統(tǒng)本身的多樣性,J2EE提供了JDBC接口用于數(shù)據(jù)庫之上的組件能訪問各種數(shù)據(jù)庫系統(tǒng)。Hibernate則進一步封裝了JDBC對數(shù)據(jù)庫的操作。

2. 數(shù)據(jù)訪問層

包括數(shù)據(jù)查詢與持久化工作。本層將完成具體的數(shù)據(jù)處理工作,包括增、查、改、刪(CRUD)。

本層運用DAO設(shè)計模式,通過使用Hibernate的ORM技術(shù)很好的解決了“阻抗不匹配”(即對象操作與關(guān)系數(shù)據(jù)庫操作方式不同)的問題。DAO進一步封裝了JDBC對數(shù)據(jù)庫表的CRUD操作,實現(xiàn)了用一致的面向?qū)ο蟮姆绞讲僮鞑煌瑪?shù)據(jù)庫,同時也降低了數(shù)據(jù)操作的難度。

3. 服務層

本層是整個系統(tǒng)架構(gòu)的核心,需完成所有業(yè)務規(guī)則的制定、業(yè)務流程的實現(xiàn)等與業(yè)務需求有關(guān)的系統(tǒng)設(shè)計。Spring的引入很大程度的簡化這一層的復雜性。例如事務處理,開發(fā)者不再為事務邊界控制而為難。本層把一些算法、數(shù)據(jù)處理(通過調(diào)用DAO層)等與業(yè)務相關(guān)的處理封裝于一體,交由控制層調(diào)用。把服務層與控制層分離,使層次更加分明,分工更加細致,從而更方便團隊調(diào)配工作。

4. 控制層

本層接受客戶端的請求,轉(zhuǎn)交給服務層處理,最后將處理結(jié)果返回給客戶。通過引入Struts2框架,控制層會以Struts2為主導。(相對Struts1而言)Struts2作為一個Filter而不再只是Servlet,在請求到來時(在必要的情況下會)對信息進行驗證、處理(如類型轉(zhuǎn)換),只有驗證通過的請求才會轉(zhuǎn)交給業(yè)務層處理,最后將處理結(jié)果返回給客戶。盡管在未引入Struts2的情況下Servlet可以做相同的事,但相比之下Struts2使這些工作規(guī)范化、模式化,開發(fā)者只需在模式化的處理(Action)類填補一些代碼,甚至可以通過XML文件的配置來實現(xiàn)這些操作,大大簡化了代碼,提高了開發(fā)效率。

5. 視圖層

視圖層是呈現(xiàn)給客戶的界面,通常是JSP、HTML等頁面。在使用Struts2框架的應用中,會使用Struts2提供的功能豐富的標簽庫增強頁面動態(tài)內(nèi)容的輸出能力。

(四) 為什么要整合Struts2、Spring、Hibernate

通過以上各層的分析,可以清楚的看到Struts2、Spring、Hibernate在整個J2EE應用中的作用以及它們相互間的協(xié)作關(guān)系。Hibernate負責底層數(shù)據(jù)庫操作,Spring協(xié)調(diào)整個應用各功能組件,并在業(yè)務層中解耦該層與數(shù)據(jù)訪問層,而Struts2則在控制層做主導,并對視圖層頁面輸出能力做了增強。三個框架功能互補,讓整個J2EE應用確實體現(xiàn)高效、易擴展、健壯。

一個簡單的應用示例

(一) 項目介紹與準備工作

為進一步分析如何通過Struts2、Spring、Hibernate構(gòu)建J2EE應用,并且能在盡可能小的篇幅說明開發(fā)的過程,下面將通過項目開發(fā)中常見的“管理員登錄”的例子演示它們的整合過程。與此登錄過程無關(guān)的數(shù)據(jù)、設(shè)計過程、代碼將不做說明。另外,以下所講的各層,并不是真實項目開發(fā)的“步驟”,事實上正是框架的引入最大限度的使各層解耦,從而允許各層并行的開發(fā)。以下是項目的整體架構(gòu)圖(亦是工作流程圖):

(注:Spring的ContextLoaderListener及applicationContext.xml不屬于單獨的某一層,而是橫跨控制層、服務層、DAO層,管理各層組件。Hibernate的HibernateDaoSupport對JDBC進行了封裝。)

開發(fā)、測試環(huán)境:Eclipse6.5、jdk1.6、tomcat6.0、IE6

數(shù)據(jù)庫:mysql5.0

建立J2EE項目EShop2,并導入Spring、Hibernate、Struts2及整合所需相關(guān)jar包。將Spring、Struts2框架引進項目(Hibernate將由Spring引入)。(位于WebRoot\WEB-INF目錄下的)web.xml需做如下配置:

Struts2

org.apache.Struts2.dispatcher.FilterDispatcher

Struts2

/*

org.Springframework.web.context.ContextLoaderListener

(二) 數(shù)據(jù)庫設(shè)計

管理員表admin相關(guān)字段:

ID帳號? &, nbsp;?????????????????????????????? 密碼

id(int)??? LoginName(char(12))?????? loginPwd(char(12))

(三) Domain對象及O/R Mapping映射文件建立

Domain對象源文件Admin.java如下:

public class Admin {

private Integer id;

private String loginName;

private String loginPwd;

public Admin(){}

public Integer getId() {

? return id;

}

public void setId(Integer id) {

? this.id = id;

}

//其它getter、setter略

}

O/R Mapping映射文件Admin.hbm.xml主要內(nèi)容:

?

??

?

?

??

?

?

??

?

Hibernate正是通過本文件建立了對象與數(shù)據(jù)庫表的映射關(guān)系,從而程序員可以通過操作對象的方式操作數(shù)據(jù)庫表。

(四) DAO層

面向接口編程,這是好的做法。如下是AdminDao接口:

public interface AdminDao {

public Admin findAdminByNP(String LoginName,String LoginPwd);

//還有其它方法如saveAdmin(),removeAdmin()等略。

}

接口實現(xiàn)類:

//本類繼承于HibernateDaoSupport,這是Hibernate提供的一個重要的類,通過它操作數(shù)據(jù)庫,使代碼如此簡潔,以至程序無需任何注釋了。

public class AdminDaoImpl extends HibernateDaoSupport implements AdminDao {

public Admin findAdminByNP(String loginName, String loginPwd) {

? String hql="from Admin where LoginName=? and LoginPwd=?";

? String []values={loginName, loginPwd};

? List list=(List)this.getHibernateTemplate().find(hql,values);

? if (list.size()>0)

? {

?? return list.get(0);

? }

? return null;

}

//其它實現(xiàn)方法略。

}

(五) 服務層

還是面向接口,AdminService接口代碼如下:

public interface AdminService {

public Admin adminLogin(String loginName,String loginPwd) throws Exception;

//其它業(yè)務方法略

}

接口實現(xiàn)AdminServiceImpl:

public class AdminServiceImpl implements AdminService {

private AdminDao adminDao; //服務層通過DAO層接口操作數(shù)據(jù)庫

public Admin adminLogin(String loginName, String loginPwd) throws Exception {

? Admin admin = adminDao.findAdminByNP(loginName, loginPwd);

? return admin;

}

}

盡管服務層是項目的核心,通常也是開發(fā)過程中最復雜的一個環(huán)節(jié),但可以看到,有了DAO層,本例程序相當簡單。這似乎未見Spring的身影。好,我們擴展一下功能,設(shè)想登錄時需要更新管理員的登錄次數(shù)并記錄日志。日志對象會對應數(shù)據(jù)庫的另一個表。這樣登錄時將同時寫兩個表,出于數(shù)據(jù)一致性的考慮,這時就需要開啟事務,如何管理呢?看如下代碼:

//引入Spring事務注解及事務傳播屬性注解類

import org.Springframework.transaction.annotation.Transactional;

import org.Springframework.transaction.annotation.Propagation;

@Transactional?? //注解管理事務

public class AdminServiceImpl implements AdminService {

private AdminDao adminDao;

//指定本方法須在同一事務內(nèi)處理

@Transactional(propagation=Propagation.REQUIRED)

public Admin adminLogin(String loginName, String loginPwd) throws Exception {

? Admin admin = adminDao.findAdminByNP(loginName, loginPwd);

? if (admin!=null)

? {

?????? //更新管理員登錄次數(shù),代碼略

?????? //添加管理員登錄事件記錄,代碼略

? }

? return admin;

}

}

事務的創(chuàng)建、開啟、回滾、提交等操作交由Spring管理,程序不會因為事務的引入增加多少代碼(只是增加兩句注解語句而已),盡管可以通過xml配置的方式管理事務,但我認為這是最優(yōu)雅的做法。

(六) 控制層

控制層將以Struts2為主導,首先是Struts2配置文件struts.xml,它應位于源文件夾src根目錄下(編譯后將位于classes根目錄下)。

核心代碼如下:

?

??

?? error.jsp

?

?

?

?? index.jsp

?? login.jsp

?

AdminAction.java涉及相關(guān)代碼:

import com.opensymphony.xwork2.ActionContext;

//通過繼承ActionSupport我們的Action類將獲得一些像自動成員賦值、校驗、類型轉(zhuǎn)換等功能。

public class AdminAction extends ActionSupport {

private Admin admin;

private AdminService adminService;

//相關(guān)getter、setter方法略

public String login() throws Exception {

? String result=this.ERROR;

? String loginName,loginPwd;

? /**

?? * 領(lǐng)域模型的賦值是通過繼承ActionSupport,由Struts2為我們做的。

?? * 盡管可以在此驗證this.getAdmin().getLoginName()、

?? * this.getAdmin().getLoginPwd()值的合法性(如是否非空、長度是否

?? * 適合等)但這不是規(guī)范的做法,這部分工作應該交由validate()方法處理

?? */?

? loginName=this.getAdmin().getLoginName();

? loginPwd=this.getAdmin().getLoginPwd();

? //調(diào)用服務層方法實現(xiàn)登錄驗證的操作,根據(jù)是否獲得Admin對象確定登錄成功與否

? Admin admin=this.getAdminService().adminLogin(loginName, loginPwd);

? if (admin!=null)

? {

?? Map session = ActionContext.getContext().getSession();

?? session.put("adminId",admin.getId()); //盡管可以把整個admin對象放入session,但這不是好的做法,畢竟除了id跟LoginName其它信息基本不使用。

?? session.put("adminLoginName",admin.getLoginName());

?? result=this.SUCCESS;

? }

? else

? {

?? Map request=(Map)ActionContext.getContext().get("request");

?? request.put("errorMessage", "用戶名或密碼輸入不正確!");

? }

? return result;

}

@Override

public void validate() {

? // 具體驗證實現(xiàn)略

}

}

前面除了在業(yè)務層擴展登錄方法,其它地方一直沒有出現(xiàn)Spring,必須承認 ContextLoaderListener是很容易讓人遺忘它的存在(除了在配置web.xml的時候),事實上站在開發(fā)者的角度看Spring很大程度是通過applicationContext.xml文件發(fā)揮作用的。盡管Spring不屬于控制層,但控制層是它為我們的項目服務的最后一層,是時候請出我們的功臣了。如下是applicationContext.xml配置:

class="org.apache.commons.dbcp.BasicDataSource">

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" destroy-method="close">

?

可以看出,整個開發(fā)中除了視圖層Spring未涉足,從數(shù)據(jù)層到控制層,Spring一直在發(fā)揮作用。它調(diào)配好各項準備工作,使各層有機的融合在一起。

(七) 視圖層

視圖層是客戶向服務器發(fā)起請求的窗口,表單頁面login.jsp主要代碼如下:

<%@ taglib uri="/Struts-tags" prefix="s" %>

<SPAN style=" Roman’?="" New="" ’Times="" Roman’;="" 宋體;="" 150%;="" 12pt;="">用戶名" required="true" />

<SPAN style=" Roman’?="" New="" ’Times="" Roman’;="" 宋體;="" 150%;="" 12pt;="">密碼" required="true"/>

<SPAN style=" Roman’?="" New="" ’Times="" Roman’;="" 宋體;="" 150%;="" 12pt;="">登錄">

<SPAN style=" Roman’?="" New="" ’Times="" Roman’;="" 宋體;="" 150%;="" 12pt;="">重置">

另外還有一個用于顯示錯誤報告的頁面error.jsp,內(nèi)容略。

(八) 程序運行

輸入http://localhost:8080/EShop2/adminope/login.jsp進入登錄頁面:

輸入不完整信息(未輸入密碼),程序返回登錄頁并提示錯誤:

輸入驗證未通過的信息(用戶名或密碼錯誤),需說明的是,因為是以dispatcher方式跳轉(zhuǎn),所以隱藏了error.jsp的真實地址(仍為表單目標地址adminLogin.action):

輸入正確信息,成功登錄后臺:

(九) 總結(jié)

至此“管理員登錄”功能已開發(fā)完畢。當然,本例所談的開發(fā),僅指編碼,事實上它只是軟件開發(fā)的一個環(huán)節(jié)。關(guān)于可行性研究、需求分析、設(shè)計、測試以及運行、維護不是本文所討論的范疇。通過以上的分析與說明,相信讀者能看出整個流程的規(guī)范化。盡管看起來有些按部就班,但事實上這正是現(xiàn)代軟件業(yè)向大規(guī)模、群體、團隊開發(fā)的必由之路。J2EE的規(guī)范以及為我們提供的指南是每個軟件開發(fā)從業(yè)人員所必須深刻學習的。而Struts2、Spring、Hibernate框架的學習與整合三者構(gòu)建J2EE應用,從小的方面看是幫助我們領(lǐng)會與實踐J2EE思想、提高軟件開發(fā)素質(zhì),從大的方面看是提高軟件開發(fā)效率(各種框架為我們做了很多工作)、使軟件易于維護(規(guī)范化的代碼),進而促進軟件業(yè)的發(fā)展。

參考書目:

1.《輕量級Java EE企業(yè)應用實戰(zhàn)-struts2+spring+hibernate整合開發(fā)》 李剛 電子工業(yè)出版社

2.《spring揭秘》 王福強 人民郵電出版社

3.《Struts 2深入詳解》孫鑫 電子工業(yè)出版社

4.《J2EE 企業(yè)級應用測試實踐》 白勝 清華大學出版社

?

http://www.striveday.com/newsshow/532.html

總結(jié)

以上是生活随笔為你收集整理的整合Struts2、Spring、Hibernate构建J2EE应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

国内偷拍精品视频 | 久久国产精品久久久久 | 91免费高清观看 | 免费黄在线看 | 欧美在线视频精品 | 日日夜夜中文字幕 | 久久精品毛片 | 超碰97.com | 国产一级淫片免费看 | 91丨九色丨首页 | 一级黄色片在线播放 | 国产精品一区二区久久久久 | 超碰在线人人97 | 一区二区影院 | 久亚洲精品 | 久久综合九色综合97婷婷女人 | 91九色精品女同系列 | 亚洲国产中文在线观看 | 婷婷网站天天婷婷网站 | .精品久久久麻豆国产精品 亚洲va欧美 | 精品久久久久久亚洲综合网站 | 在线影院av | 久久久人人人 | 日韩中文字幕免费视频 | 国产破处视频在线播放 | 在线小视频你懂的 | 97天堂| 成人网色 | 黄色在线视频网址 | 久久无码精品一区二区三区 | 成人在线播放视频 | 久久图| 成人黄色小说在线观看 | 国产成人一级电影 | 激情文学综合丁香 | 日本丶国产丶欧美色综合 | 少妇bbbb | 成人久久精品视频 | 射久久 | 91精品免费在线视频 | 国产福利av | 亚洲视频1 | 午夜精品久久久久久99热明星 | 亚洲成av人片一区二区梦乃 | 国产v亚洲v| va视频在线| 91资源在线免费观看 | 日韩高清免费在线观看 | 亚洲国产视频在线 | 一区精品在线 | 天天操天天操天天操天天操天天操天天操 | 国产黄色精品在线 | 91女人18片女毛片60分钟 | 免费看黄色小说的网站 | 国产精品麻豆果冻传媒在线播放 | 日本在线观看一区二区三区 | 五月婷婷毛片 | 久久艹欧美 | 88av色 | 精品影院一区二区久久久 | 在线成人看片 | 在线a人v观看视频 | 91精品久久久久久 | 色av男人的天堂免费在线 | 99久久精品免费看国产四区 | 久久精品国产一区二区电影 | 97久久久免费福利网址 | 亚洲乱码中文字幕综合 | 国产在线观看午夜 | 亚洲精品麻豆 | 亚洲清纯国产 | 五月婷婷中文网 | 日韩毛片久久久 | 激情 一区二区 | 久久99精品久久只有精品 | 美女福利视频在线 | 在线黄色免费av | 欧美性色综合网 | 胖bbbb搡bbbb擦bbbb | 欧美在线观看视频一区二区三区 | 亚洲影院国产 | 成人资源在线观看 | 999成人国产| 国产精品一区二区果冻传媒 | 欧美久久影院 | 激情欧美网| 久久成人麻豆午夜电影 | 久久亚洲免费 | 中午字幕在线观看 | 日本婷婷色 | 日韩欧美精品一区二区三区经典 | 久久特级毛片 | 五月婷婷久 | 婷婷激情综合网 | 日韩大片免费在线观看 | 亚洲一区二区精品 | 久色婷婷| 久久综合影音 | 玖玖国产精品视频 | 综合精品久久久 | 婷婷激情五月 | 欧美日韩国产一区二区在线观看 | 99国产在线视频 | 五月天欧美精品 | 91精品电影| 综合网久久 | 久久这里有精品 | 亚洲午夜久久久久久久久久久 | 色多多污污 | 久久免费激情视频 | 久久ww| 亚洲精品乱码久久久久v最新版 | 激情视频综合网 | 国产精品国产三级国产aⅴ无密码 | 一级黄色片在线播放 | 91视频在线免费看 | 亚洲精品午夜久久久 | 国产一二区精品 | 午夜在线免费观看视频 | 日韩精品欧美专区 | 欧美精品一区二区蜜臀亚洲 | 亚洲理论在线观看 | 国产精品18videosex性欧美 | 91亚洲精品国偷拍自产在线观看 | 在线观看日本韩国电影 | 日韩在线观看视频在线 | 91成人免费在线视频 | 中文字幕你懂的 | 一级一级一片免费 | 在线成人av | 免费av网站在线看 | 91在线成人| 免费在线一区二区三区 | 99久热在线精品视频观看 | 在线观看日韩免费视频 | 婷婷午夜激情 | 人人插超碰 | 亚洲色影爱久久精品 | 日韩精品无码一区二区三区 | 天天曰 | 国产亚洲婷婷免费 | 日韩乱色精品一区二区 | 久久久国产电影 | 国产99久久久欧美黑人 | 久草影视在线 | 少妇av片| 六月丁香综合 | 草莓视频在线观看免费观看 | 欧美日韩亚洲在线观看 | 国产精品一区免费观看 | 欧美大片大全 | 超碰国产在线播放 | 天天操夜夜操天天射 | www日韩在线观看 | 91视频在线国产 | 日韩在线视频一区 | 99精品福利视频 | 网站在线观看日韩 | 亚洲一级久久 | 九九影视理伦片 | 成人av电影免费在线观看 | 亚洲一区精品二人人爽久久 | 日韩av专区 | 亚洲高清视频在线观看 | 欧美性护士 | 欧美天天综合网 | 日韩精品在线免费观看 | 国产精品久久久一区二区三区网站 | 久久免费观看少妇a级毛片 久久久久成人免费 | 97免费在线观看 | 精品人人爽| 成人在线观看资源 | 日韩国产精品久久 | 伊人色播 | 777视频在线观看 | 欧美日韩国产伦理 | 国产高清中文字幕 | 国产成人免费网站 | 久久这里只有精品视频首页 | 六月色婷婷 | 婷婷深爱五月 | 国产黄色在线网站 | 国产69久久久欧美一级 | 国产精品午夜在线 | 成人国产精品久久久久久亚洲 | 国产99久久99热这里精品5 | 久久久久国产a免费观看rela | 日韩中文字幕免费 | 欧美日韩高清一区二区三区 | 日日天天狠狠 | 亚洲第一区精品 | 日女人电影 | 日韩 精品 一区 国产 麻豆 | 在线观看成人 | 在线日韩中文 | av免费观看高清 | 色综合久久精品 | 久草在线视频中文 | 美女福利视频在线 | 91日本在线播放 | 久久成人黄色 | 欧美污污网站 | 久久少妇av | 国产伦精品一区二区三区… | 国产美女视频免费观看的网站 | 黄av在线| 日韩av电影手机在线观看 | 国产999精品 | 91黄色成人 | 久久一区二区三区日韩 | 精品久久在线 | 天天操天天射天天操 | 亚洲精品色婷婷 | 亚洲免费黄色 | 美女在线免费视频 | 00av视频 | 欧美日韩一区二区在线观看 | 欧美精品生活片 | 国产精品国产三级国产不产一地 | 欧美色精品天天在线观看视频 | 五月婷婷播播 | 黄色成人av在线 | 色综合久久中文综合久久牛 | 成年人免费观看国产 | 国内精品久久久精品电影院 | 开心婷婷色 | 国产高清视频免费观看 | 欧美日韩亚洲精品在线 | 久久成人黄色 | 国产剧情av在线播放 | www黄com | 日本中文乱码卡一卡二新区 | 欧美激情视频一区二区三区免费 | 夜夜夜夜夜夜操 | 国产一性一爱一乱一交 | 成年人免费在线观看网站 | 日本系列中文字幕 | 黄色成年片 | 成人少妇影院yyyy | 中文字幕在线观看日本 | 欧美大香线蕉线伊人久久 | 久久人91精品久久久久久不卡 | 亚洲国产精品电影 | 久久综合久色欧美综合狠狠 | 午夜av激情 | 日韩免费电影在线观看 | www.伊人网| 97超级碰碰碰碰久久久久 | 99视频黄| 欧美黑人性爽 | 成人在线观看你懂的 | 成人福利在线 | 日韩中文字幕在线 | 亚洲人成人在线 | 亚洲精品综合在线观看 | 在线视频观看亚洲 | 四虎影视成人永久免费观看视频 | 99在线免费视频 | 久久国产精品一区二区三区四区 | 色综合天天狠天天透天天伊人 | 在线看岛国av | 欧美精品一区二区三区四区在线 | 91黄色免费网站 | 在线观看亚洲视频 | 嫩草91影院| 亚洲午夜不卡 | 1024手机看片国产 | 色视频网页 | 五月天欧美精品 | 欧美亚洲精品在线观看 | 中国一级片在线观看 | 欧美a视频在线观看 | 欧美色伊人| 欧美精品在线观看 | 狠狠色伊人亚洲综合网站色 | 欧美色插 | 久久精品一区二区三区四区 | 在线亚洲免费视频 | 久久人人爽爽人人爽人人片av | 色小说av | 亚洲在线不卡 | 久热免费在线观看 | 色老板在线| 狠狠五月天 | 中文在线8资源库 | 在线免费视频一区 | 欧美日韩精品久久久 | 精品99久久| 成人午夜性影院 | 久久久av免费| 手机看片99 | 伊人激情综合 | 在线免费国产 | 国产生活一级片 | 日韩精品免费在线观看 | 99热超碰 | 国产.精品.日韩.另类.中文.在线.播放 | 国产精品久久久久久久久久免费看 | 91免费观看视频网站 | 精品国产乱码一区二 | 999久久| 人人看人人 | 久草在线视频国产 | 黄色大片日本免费大片 | 国产亚洲在线 | 在线亚洲激情 | 免费美女久久99 | 狠狠色综合网站久久久久久久 | 黄色在线小网站 | 丁香婷婷综合网 | 国产精品久久久久久久久久 | 日韩a在线看 | 日韩久久精品一区二区 | 亚洲天堂网在线视频观看 | 日韩精品免费一线在线观看 | 成人9ⅰ免费影视网站 | 日韩一二区在线 | 综合激情久久 | 黄色免费电影网站 | 国产在线视频导航 | 日韩在线不卡视频 | 奇米网网址 | 午夜av在线免费 | 国产成人精品在线观看 | 国产精品免费看久久久8精臀av | 久草在线中文888 | 波多野结衣在线播放一区 | 99久久精品国产一区二区成人 | 91av手机在线观看 | 玖玖玖在线 | 五月天激情综合 | 欧美午夜精品久久久久久孕妇 | 亚洲激情综合网 | 2022国产精品视频 | 国产精品视频地址 | 亚洲精品91天天久久人人 | 日韩偷拍精品 | 天天摸天天舔天天操 | 激情综合五月婷婷 | 日韩高清在线不卡 | 夜色.com| 97超级碰碰碰碰久久久久 | 国内小视频 | 久久这里只有精品23 | 夜色资源网 | 国产精品视频大全 | 天天爽夜夜爽人人爽曰av | 在线播放视频一区 | 国产精品美女在线观看 | www.国产视频| 免费网站黄 | 91精品一 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 99精品亚洲| 久久99精品久久久久久清纯直播 | 激情导航 | 97精品一区 | 色姑娘综合 | 婷婷六月天综合 | 久久精品久久精品 | 成人观看视频 | 在线国产欧美 | 91精品啪在线观看国产 | 成年美女黄网站色大片免费看 | 亚洲色综合 | 欧美国产视频在线 | 97在线视频免费观看 | 色九九视频 | 久久综合免费视频 | 色婷婷精品 | 三级av免费看 | 日韩免费电影网站 | 免费看的黄色片 | 国产精品毛片一区视频播 | www.看片网站 | 国产精品12345 | 久草网首页| 在线看片日韩 | 欧美日韩一区二区三区视频 | 国产视频亚洲 | 免费日韩高清 | 国产精品18久久久久vr手机版特色 | 欧美日韩亚洲在线观看 | 在线视频麻豆 | 色狠狠综合 | 一级性视频 | 国产午夜激情视频 | 91成人天堂久久成人 | av一区二区在线观看中文字幕 | 免费在线观看毛片网站 | 日韩精品一区二区三区水蜜桃 | 91片在线观看 | 国产精品久久久久999 | 草久久久久久 | 日韩免费一级a毛片在线播放一级 | 天天操夜操视频 | 日本深夜福利视频 | 91av福利视频| 国产精品99免费看 | 国产免费中文字幕 | 欧美色一色 | 久草五月 | 黄色天堂在线观看 | 在线观看国产高清视频 | 伊人伊成久久人综合网小说 | 国产精品久久久久久久av大片 | 麻豆国产精品va在线观看不卡 | 一级全黄毛片 | 999精品视频 | 99久视频 | 国产乱对白刺激视频不卡 | 国产精品6999成人免费视频 | 国产三级久久久 | 午夜久久影视 | 国产系列精品av | 97爱爱爱 | 久久精品久久精品久久 | 免费成人在线网站 | 99久久精品免费视频 | 天天操夜夜操夜夜操 | 国产韩国日本高清视频 | 99色资源 | 亚洲精品在线播放视频 | 不卡的av电影在线观看 | 中文永久免费观看 | 天天操天天操 | av在线网站大全 | 亚洲精品国产精品国自产观看浪潮 | 久久99热精品这里久久精品 | 国产精品久久电影网 | 亚州精品在线视频 | 国产一级免费av | 午夜视频欧美 | 日本特黄一级片 | 久久久午夜精品福利内容 | 成年人在线免费看片 | 国产91影院 | 欧美a级成人淫片免费看 | 色婷五月天 | 99热最新在线 | 国产精品久久中文字幕 | 久草视频一区 | 久久一精品 | 色妞久久福利网 | 最新在线你懂的 | 激情视频久久 | 在线日本看片免费人成视久网 | 日韩高清片 | www色综合| 欧美日韩国产二区三区 | 亚洲精区二区三区四区麻豆 | 午夜成人免费电影 | 99国产精品一区 | 五月天精品视频 | 天躁狠狠躁 | 精品一区二区三区香蕉蜜桃 | 色多多在线观看 | 91精品在线看 | 欧美aaa视频| 成人a免费视频 | 久久久999精品视频 国产美女免费观看 | 精品国精品自拍自在线 | 免费视频久久久久 | a色网站 | 九九九在线 | 91黄视频在线 | 欧美日韩视频观看 | 久久精品亚洲 | 992tv人人网tv亚洲精品 | 国产少妇在线观看 | 天天夜夜亚洲 | 午夜免费电影院 | 天天操网| 99视频在线播放 | 国产精品免费久久 | 久久久久女人精品毛片九一 | 色999视频| 久久99久久99免费视频 | 91私密视频 | 欧美激情综合五月 | 天天爽天天摸 | 国产精品淫 | 久久久久福利视频 | 国产精品久久久免费 | 亚洲精品午夜一区人人爽 | 欧美日韩在线精品一区二区 | 在线免费黄 | 久久精品免费电影 | 亚洲成av人片一区二区梦乃 | 成人av免费电影 | 亚洲精品综合一二三区在线观看 | 国产一区二区免费看 | 国产短视频在线播放 | 在线看成人 | 国产精品欧美久久久久三级 | 久久成人18免费网站 | a在线免费 | 成人一级黄色片 | 久久久久久久久久久福利 | 午夜视频在线观看网站 | 久久国内精品 | 成人影片在线免费观看 | 国产在线视频不卡 | www.色五月 | 精品在线观看一区二区 | 中文字幕在线日 | 久久综合九色综合欧美就去吻 | 麻豆传媒一区二区 | 国产九九在线 | 亚洲婷久久 | 国产免费久久久久 | 国产91精品看黄网站在线观看动漫 | 狠狠干天天 | 久久激情综合 | 精品久久久久久久久亚洲 | 五月激情六月丁香 | 91麻豆精品国产91久久久更新时间 | 久久99热这里只有精品国产 | 日韩精品免费一线在线观看 | 久草综合在线观看 | а天堂中文最新一区二区三区 | 99精品免费视频 | 五月天综合色激情 | 国产在线视频一区二区三区 | 欧美精品做受xxx性少妇 | 一区二区毛片 | 国产精品综合av一区二区国产馆 | 激情视频久久 | 成人免费在线观看av | 国产麻豆果冻传媒在线观看 | 亚洲国产精品成人综合 | 精品在线观看一区二区 | 五月激情天 | 国色天香第二季 | 精品99久久 | 天天天操操操 | 久草视频免费看 | 视频在线日韩 | 开心色婷婷 | 99爱这里只有精品 | 九九免费精品 | 国产高清视频免费 | 久久久久久激情 | www欧美日韩 | 99久久久成人国产精品 | 久久久久99精品成人片三人毛片 | 国产精品一区二区无线 | 国产精品都在这里 | 国产亚洲婷婷 | 久草视频在线免费看 | 丝袜精品视频 | 日韩免费网站 | 色综合久久五月天 | 超碰99在线 | 在线免费观看av网站 | 国产精品毛片一区二区三区 | 亚洲精品动漫成人3d无尽在线 | 五月婷婷丁香在线观看 | 精品伊人久久久 | 国产aa免费视频 | 日韩av在线免费看 | 亚洲电影影音先锋 | 狠狠五月婷婷 | 国产小视频在线免费观看视频 | 91精品在线观看入口 | 国产精品18videosex性欧美 | 婷婷色九月 | 国产小视频在线播放 | 亚洲 成人 欧美 | 亚洲清纯国产 | 免费看v片网站 | 97狠狠操 | www.久久99| 中文字幕视频在线播放 | 精品亚洲免费视频 | 黄色免费网 | 国产特级毛片aaaaaa | 日日夜夜婷婷 | 欧美一区二区在线 | 亚洲热久久 | 中文字幕乱码亚洲精品一区 | 日韩欧美网址 | 国产资源在线免费观看 | 久久综合九色综合欧美就去吻 | 日韩在线高清 | 久草精品视频在线看网站免费 | 精品美女久久久久 | 91爱看片| 国产精品久久精品 | 91亚洲国产成人 | 最新国产精品亚洲 | 中文字幕在线一区观看 | 在线观看国产日韩欧美 | 亚洲最新视频在线 | 欧美一区二视频在线免费观看 | 99热国产在线 | 久久久精品一区二区 | 国产小视频免费观看 | 国产拍揄自揄精品视频麻豆 | 久久精品国产v日韩v亚洲 | 中文字幕日本特黄aa毛片 | 久久99久久99精品免视看婷婷 | 成在人线av | 77国产精品| 欧美黄色免费 | 国产日韩欧美精品在线观看 | 一区二区丝袜 | 久久精品综合 | 欧美韩国在线 | 五月婷婷另类国产 | 日韩中文字幕亚洲一区二区va在线 | 久久一区91 | 日韩特黄一级欧美毛片特黄 | 少妇bbw搡bbbb搡bbbb | 久久国产精品一区二区 | 麻豆系列在线观看 | av高清免费在线 | 亚洲一区二区三区精品在线观看 | 香蕉视频久久久 | 日韩欧美久久 | 国产精品久久久久久久毛片 | 一级大片在线观看 | 久久精品国产亚洲精品 | 欧美性精品 | 麻豆视频在线免费观看 | 999精品视频| 日韩欧美在线免费 | av手机在线播放 | av在线永久免费观看 | 日韩欧美大片免费观看 | 一本一道久久a久久精品蜜桃 | 欧美日韩在线精品 | 久久 在线 | 国产97色在线 | www.久久91| 久草在线精品观看 | 视频成人永久免费视频 | 日韩免费高清 | 综合色站导航 | 免费a v在线 | 亚洲成人资源网 | 欧美另类高清 videos | 黄色www在线观看 | 日韩精品一区二区三区免费视频观看 | 久久亚洲在线 | 天天弄天天操 | 黄色av网站在线免费观看 | 久久精品电影院 | 日韩爱爱片 | 久久视频在线观看免费 | 激情偷乱人伦小说视频在线观看 | 国产在线视频一区二区三区 | 久久精彩 | 四虎成人精品永久免费av | 在线观看韩日电影免费 | 色综合久久88色综合天天人守婷 | 黄色亚洲大片免费在线观看 | 欧美一级片免费在线观看 | av福利超碰网站 | 精品电影一区二区 | 中文字幕日韩免费视频 | 九九色在线观看 | 日韩中文字幕免费电影 | 国产黄在线 | 午夜精品一区二区三区在线 | 亚洲精品高清在线观看 | 99久久婷婷国产综合精品 | 国产精品美女久久久久久免费 | 麻豆精品传媒视频 | 色av网站 | 亚洲日本一区二区在线 | 国产欧美综合视频 | 亚洲精品视频在线免费播放 | 69国产精品视频 | 国产精品视频999 | 午夜av在线免费 | 日日干天天爽 | 久久99在线 | www.夜夜| 欧美国产一区在线 | 一本色道久久精品 | 91一区二区三区久久久久国产乱 | 国产精品粉嫩 | 国产精品va在线播放 | 婷婷中文字幕 | 日韩欧美一区二区在线 | 日本精品视频在线 | 久久手机精品视频 | 91在线观看欧美日韩 | 99在线免费视频观看 | 久久久久久久久久网站 | 中文字幕av在线免费 | 亚洲精品在 | 亚洲精品视频在 | 69精品久久 | 日韩在线免费 | 国产黄色片久久 | 国产精品99久久久久久久久久久久 | 91福利影院在线观看 | 欧美大荫蒂xxx | a√资源在线 | 国产精品av在线免费观看 | 99精品国产高清在线观看 | 免费看一级黄色 | 国产一级黄色电影 | 中文字幕免费成人 | 久久视频精品 | 在线观看电影av | 国产精品毛片久久久久久久久久99999999 | 亚洲伊人色 | 日本乱码在线 | 综合铜03| 成人av.com | 九九交易行官网 | 在线视频 一区二区 | 中文字幕乱视频 | 亚洲精品国偷自产在线91正片 | 日韩在线一区二区免费 | 日韩久久午夜一级啪啪 | 国产午夜精品一区二区三区四区 | 91九色国产在线 | 国产糖心vlog在线观看 | www.久久精品视频 | 四虎国产精品永久在线国在线 | 成人一级片视频 | 国产精品久久久久高潮 | 99热这里只有精品国产首页 | 麻豆传媒一区二区 | 欧美精品国产综合久久 | 欧美日韩xx | 97国产人人| ,久久福利影视 | 黄色官网在线观看 | 国产成人免费观看 | 久久福利国产 | 国产精品对白一区二区三区 | 国产无套一区二区三区久久 | 色婷婷视频网 | 久久不射电影院 | 91色偷偷 | 美女一区网站 | 日韩电影在线看 | 久久蜜桃av | 国产精品igao视频网入口 | 黄a在线看 | 九色91在线视频 | 成人久久久电影 | 亚洲高清在线 | 精品爱爱 | 在线观看精品黄av片免费 | www黄色大片 | 久热久草在线 | 伊人狠狠色丁香婷婷综合 | 日本精品久久久一区二区三区 | 国产不卡毛片 | 精品久久一二三区 | 91成人在线观看喷潮 | 亚洲激情在线 | 一区二区三区电影 | 青草视频免费观看 | 99福利片| 色视频成人在线观看免 | 免费在线国产视频 | 就要干b| 亚洲黄色a | 成人18视频 | 国产亚洲成人精品 | 精品一区精品二区高清 | 免费视频久久久 | 涩涩爱夜夜爱 | 日韩在线国产精品 | 日韩在线一区二区免费 | 日韩在线免费看 | 91精品国产综合久久福利不卡 | 成年人免费看的视频 | 99性视频| 国产精品久久久久久久久岛 | 国产精品久久久久久久久毛片 | 青青河边草手机免费 | 中文字幕国产一区 | 黄色大全视频 | 午夜av一区| 91香蕉视频在线下载 | 日韩高清一二区 | 91日韩在线播放 | 成年人在线观看视频免费 | 尤物九九久久国产精品的分类 | 午夜久久电影网 | 成人免费网站在线观看 | 亚洲国产成人高清精品 | 欧美aa在线观看 | 一区二区三区手机在线观看 | 玖玖国产精品视频 | 91在线影视 | 69性欧美| 天天操天天添 | 国产69精品久久久久久久久久 | 日本视频精品 | 日本视频网 | 欧美精品在线一区二区 | 中文字幕日韩av | 欧美三级高清 | 亚洲精品网址在线观看 | 波多野结衣小视频 | 欧美韩国在线 | 国产特级毛片aaaaaaa高清 | 国产精品一区二区三区在线 | 少妇搡bbbb搡bbb搡69 | 中文av在线免费观看 | 国产日韩中文字幕 | 欧美日韩不卡在线 | 免费亚洲电影 | 精品999在线 | 国产精品专区h在线观看 | 六月激情丁香 | 国内精品视频免费 | 日本精品视频一区二区 | 免费网址在线播放 | 福利网在线 | 婷婷在线视频 | 久久久久国产一区二区三区四区 | 777久久久 | 免费成人av网站 | 手机看片99| 成年人视频在线观看免费 | 最新日韩视频 | 久久福利影视 | 人人干狠狠操 | 久久天天躁狠狠躁亚洲综合公司 | 欧美 日韩 成人 | 丁香综合av| 国产一级特黄毛片在线毛片 | 精品久久久久一区二区国产 | 国产黄色片免费观看 | 国产资源在线免费观看 | 日韩在线观看免费 | 欧美日韩国产精品一区二区亚洲 | 久久视频在线视频 | 天天射综合网视频 | 麻豆视频大全 | 亚洲视频分类 | 色综合久久久久综合 | 国产精品6 | 成人久久久久久久久 | 四虎成人精品永久免费av | 五月亚洲| 91爱爱网址 | 亚洲免费色 | 人人干人人爽 | 伊人永久在线 | 国产精品网红直播 | 亚洲国产成人高清精品 | 国产人成在线视频 | www毛片com| 国产成人一区二区三区 | 亚洲经典视频 | 成人h在线观看 | 亚洲va欧美va人人爽 | 日韩免费高清在线观看 | 欧美日韩国产页 | 国产福利在线不卡 | 久久首页| 婷婷av网| 91大神一区二区三区 | 成年人视频在线免费播放 | 日韩精品短视频 | 国产一级大片在线观看 | 日韩动漫免费观看高清完整版在线观看 | 欧美与欧洲交xxxx免费观看 | 丁香综合网| 在线观看久久久久久 | av888.com| 91精品国自产拍天天拍 | 深爱激情五月网 | 午夜av色| 精品国产伦一区二区三区观看说明 | 久草在线视频首页 | 日韩中字在线观看 | 日韩有码在线播放 | 久草在线在线精品观看 | 永久免费毛片在线观看 | 奇米影视777四色米奇影院 | 99久久精品国产一区 | 欧美日韩高清一区二区 国产亚洲免费看 | 丁香婷婷在线 | 伊人色综合久久天天网 | 黄色av电影免费观看 | 深爱婷婷网 | 最近中文字幕大全中文字幕免费 | 久久女同性恋中文字幕 | 天天干天天色2020 | www.久久99| 超碰在线官网 | 亚洲aⅴ一区二区三区 | 亚洲国产资源 | 久久久久久欧美二区电影网 | 免费黄在线看 | 激情视频综合网 | 亚洲乱码精品久久久久 | 免费av免费观看 | 亚洲视频久久久久 | 中文字幕永久在线 | 久久精品毛片 | 天天曰天天射 | 综合五月 | 国产精品 日韩 | 高清在线观看av | 亚洲精品久久久久中文字幕二区 | 在线观看成人av | 亚洲永久精品视频 | 四季av综合网站 | 精品在线观看一区二区 | 色av男人的天堂免费在线 | 在线 你懂| 成人免费视频观看 | 久久精品a | av成人黄色| 97视频网站| 国产69精品久久久久久 | 激情网色 | 国产精品免费麻豆入口 | 碰超在线观看 | 97视频免费在线看 | 日韩中文在线播放 | 日日干天天干 | 欧美成人精品欧美一级乱 | 成年人在线免费看片 | 综合网欧美 | 国产精品1区2区在线观看 | 亚洲黄色精品 | 91久久精品日日躁夜夜躁国产 | 亚洲mv大片欧洲mv大片免费 | 欧美视频二区 | 精品爱爱 | 欧美成人区| www.狠狠色| 国产精品大全 | 国产精品综合久久久 | 天天爱天天射天天干天天 | 黄色一级在线观看 | 欧美a影视 | 九九爱免费视频 | 一级全黄毛片 | 免费人成网 | 五月婷婷综合激情网 | 91爱爱电影 | 国产视频精选 | 美女久久99 | 免费视频久久久久久久 | 在线三级中文 | 中文字幕乱码一区二区 | 午夜免费视频网站 | 午夜18视频在线观看 | 美女天天操 | 探花视频在线观看+在线播放 | 久久久久久亚洲精品 | 久久免费看a级毛毛片 | 69av网| 免费av在 | av中文字幕av | 天天操天天干天天综合网 | 五月婷在线观看 | 国产精品久久久久久久久毛片 | 婷婷久久网站 | 在线免费视频a | 亚洲婷婷免费 | 国产无吗一区二区三区在线欢 | 免费手机黄色网址 | 97人人模人人爽人人少妇 | 色七七亚洲影院 | 日韩中文在线电影 | 91看片在线看片 | 成人欧美一区二区三区在线观看 | 久久精品综合视频 | 中文字幕视频免费观看 | 欧洲性视频 | 免费高清在线视频一区· | 99夜色| 日韩在线电影 | 亚洲va欧美va人人爽 | 久草影视在线 | 色丁香综合 | www天天干 | 精品人人人 | 精品国产成人在线影院 | 91久久国产精品 | 国产高清绿奴videos | 日韩中文字| 中国一级片在线观看 | 久久久久免费精品视频 | 午夜视频在线观看网站 | 午夜视频免费播放 | 精品国产欧美一区二区 | 夜添久久精品亚洲国产精品 | 在线免费观看视频你懂的 | 九九欧美视频 | 亚洲综合欧美日韩狠狠色 | 色就色,综合激情 |