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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】 使用 AppFuse 快速构建 J2EE 应用

發布時間:2025/3/21 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】 使用 AppFuse 快速构建 J2EE 应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文檔選項

未顯示需要 JavaScript 的文檔選項

打印本頁

將此頁作為電子郵件發送

樣例代碼


級別: 中級

沈 銳 (shenrui@cn.ibm.com), 軟件工程師, IBM CSDL

2006 年 10 月 19 日

本 文以一個 J2EE 開發者的角度,借助一個簡單的應用示例,在融合了個人經驗的基礎上介紹了如何用 AppFuse 一步步地構建 J2EE 項目。通過閱讀本文,讀者不僅能夠學會用 AppFuse 進行開發,而且能夠充分體會到 AppFuse 提供的“快速開發”的優越性。

關于 AppFuse 的特性、架構以及為什么要使用 AppFuse,AppFuse 的創始人 Matt Raible 在 《使用 AppFuse 的七個理由》一文中已經做了很詳盡的闡述,這里就不再贅言。本文將著力于實踐,即如何運用 AppFuse 開發 J2EE 應用。

使 用 AppFuse,你需要對 Ant 有一些基本的了解,比如什么叫 target、什么是 build.xml 以及如何運行 Ant,等等。如果你現在還不知道 Ant 是什么,就需要找些相關資料學習一下。下表列出了本文中用到的也是較為常用的 AppFuse 的 target:


表 1. Ant 中常用的 AppFuse target
target說明所在文件
new這個 target 是使用 AppFuse 必須要用到的,它用來在 AppFuse 同級的目錄下創建一個新項目。創建過程是交互式的,會讓用戶輸入項目名稱、數據庫名稱以及根包路徑。AppFuse 安裝目錄下的 build.xml
setup用于初始化一個新的項目,它包含了從數據庫創建、Tomcat 設置到 war 文件的生成和部署等一系列操作。項目根目錄下的 build.xml
deploy如果你修改的代碼不涉及到數據庫的更改,那么可以使用這個 target,因為它只負責生成并重新部署 war 包。項目根目錄下的 build.xml
setup-db如果你只是要對數據庫進行更改,使用這個 target。比如,重新創建數據庫,重新加載樣本數據等操作。項目根目錄下的 build.xml
installAppGen 的 target。如果你不希望使用 AppGen 幫你生成 dao 類和 service 類以及其他的代碼,就使用這個 target。extras/appgen 目錄下的 build.xml
install-detailedAppGen 的 target。如果你希望使用 AppGen 幫你生成所有代碼,就使用這個 target。extras/appgen 目錄下的 build.xml

本文將按如下順序展開敘述:

  • 示例介紹
  • 搭建開發環境
  • 新建項目
  • 創建數據庫表
  • 用 AppGen 生成代碼
  • 根據項目需求調整代碼
  • 其他功能
    • 語言國際化
    • 頁面布局和樣式
    • 系統安全
    • 事務控制
    • 日志
    • 郵件
    • 緩存




回頁首


示例介紹

本 文的示例實現對員工信息的增刪查改等基本功能。用 Tapestry 實現表示層,用 Hibernate 開發持久層,用 Spring 提供事務控制等跨模塊服務,并用 Acegi 進行安全管理。本示例只用到一個域模型:Employee,下面是它的 UML 圖。


圖 1. Employee UML 圖





回頁首


搭建開發環境

本文的代碼開發平臺采用的是 Windows 操作系統,因此,以下環境設置也是針對 Windows 操作系統的。

  • 從 AppFuse 下載頁面 下載 appfuse-tapestry-1.9.3-src.zip,并解壓縮在任意目錄下。這個 zip 已經定制了使用 Tapestry 作為表現層的實現框架,因而使用起來較為直接。
  • 從 http://java.sun.com 下載最新的 JDK,并安裝或解壓縮到任意目錄下。本文采用 JDK 1.5.0。設置環境變量 JAVA_HOME 指向 JDK 所在的目錄,并在 PATH 中添加 %JAVA_HOME%/bin。
  • 從 http://jakarta.apache.org/tomcat 下載最新版的 Tomcat,并安裝或解壓縮到任意目錄下。本文采用 Tomcat 5.5.17。設置環境變量 CATALINA_HOME 指向 Tomcat 的安裝目錄。
  • 從 http://ant.apache.org下 載最新版的 Ant,并解壓縮到任意目錄下。AppFuse 要求的最低版本是 1.6.2,本文采用的是 1.6.5。設置 ANT_HOME 指向 Ant 所在的目錄,并在 PATH 中添加 %ANT_HOME%/bin。另外,要拷貝一個 junit.jar 到 %ANT_HOME%/lib 下,如果 lib 下沒有 junit.jar,AppFuse 的腳本在運行時會給出警告信息。junit.jar 可以從 http://www.junit.org 獲得,也可以從 %AppFuse%/lib/junit3.8.1 目錄下獲得。
  • 從 http://www.mysql.com 下載最新版的 MySQL,并安裝或解壓縮到任意目錄下。本文采用的是 5.0。
  • 從 http://www.eclipse.org 下載 Eclipse 3.1 或 3.2,安裝到任意目錄下。

AppFuse 的 Ant 腳本可以在命令行中運行,也可以在 Eclipse 里運行。有關如何在 Eclipse 里執行 Ant 腳本,請參考《用Eclipse開發AppFuse應用》。到此,我們已經為 AppFuse 開發應用準備好了環境,下面讓我們開始使用 AppFuse 創建項目。





回頁首


新建項目

AppFuse 的便捷與強大之處在于它已經為我們提供了多種開源框架的集成,并且通過使用 Ant 將所有的構建過程自動化。另外,AppFuse 利用 XDoclet 能夠為我們生成絕大多數重要的代碼,例如 dao 類、service 類以及測試用例,等等,并且能夠將大量的配置文件也一并生成好,從而極大地節省了開發人員的時間。

用 AppFuse 進行開發通常有三種模式:“自上而下”,“自下而上”以及“混合模式”。采用“自上而下”(由 Java 對象向數據庫對象創建的過程)的方式固然比較符合“面向對象”的設計思維,但是為此要編寫大量的 XDoclet 的 tag 也確是一件痛苦的事情。相比較而言,采用“自下而上”(由數據庫對象生成 Java 對象的過程)就顯得簡單許多 -- 只需要提供數據庫表結構。然而,對于較為復雜的系統,尤其是類之間具有大量的關聯的情形,仍然需要采用“自上而下”的創建模式。因此,在實際的項目開發 中,將兩種模式進行混合使用比較常見,這也就是“混合”模式。本文采用“自下而上”的模式。

本文的 AppFuse 安裝在 "c:\opt" 下面。打開命令行控制臺,進入 "c:\opt\appfuse",運行 “ant new”,為簡單起見,所有參數選用默認值,見圖 2。


圖 2. ant new -- 新建項目

腳本運行成功后,新項目創建在 c:\opt\myapp 下(與 AppFuse 目錄同級),myapp 是 AppFuse 默認的項目名稱。將該項目導入到 Eclipse 中,并根據 《用Eclipse開發AppFuse應用》 進行必要的設置。以下是兩個你可能需要進行的配置:

  • AppFuse 默認連接 MySQL 的用戶名是 root,密碼為空。如果你的 root 密碼不是空,需要修改 C:\opt\myapp\build.properties 中的 database.admin.password 項,記得將注釋去掉。
  • AppFuse 默認不是用 utf-8 創建數據庫,如果你需要支持多語言,需要修改 C:\opt\myapp\metadata\sql\mysql-create.sql 中的創建數據庫的語句,修改如下:

    清單 1. 創建數據庫語句
    create database if not exists @DB-NAME@ CHARACTER SET utf8 COLLATE utf8_general_ci;
    |--10--------20--------30--------40--------50--------60--------70--------80--------9|

    |-------- XML error: The previous line is longer than the max of 90 characters ---------|

    注:AppFuse 會在構建期將 @DB-NAME@ 替換成你指定的數據庫名(本文中為“mydb”)。

在 c:\opt\myapp 下運行“ant setup test-all”。“setup” 完成了很多“設置”工作:創建數據庫、構建 dao 和 serive 類、加載樣本數據、創建 war 文件并部署到 tomcat,等等。“test-all” 運行所有的測試用例:對 dao,service 以及頁面的測試。如果這個腳本運行成功,說明開發環境一切就緒。這時,啟動 Tomcat,通過訪問 http://localhost:8080/myapp 就能夠看到 AppFuse 的登錄界面了。AppFuse 預定義了兩個用戶:mraible 和 tomcat,密碼都是 tomcat。mraible 屬于管理員角色(能夠管理用戶信息),tomcat 屬于普通用戶角色。用 mraible 登錄可以看到 圖 3的界面。


圖 3. AppFuse 的初始界面

或許此時,你已驚奇地發現,自己不過只運行了一次 Ant 腳本,但是系統已經擁有“用戶管理”、“郵件”、“文件上傳” 等功能 -- 這就是 AppFuse “開箱即用”的優勢。接下來讓我們開始開發前述的應用示例。





回頁首


創建數據庫表

在 mydb 數據庫中執行如下語句創建 employee 表:


清單 2. 創建 employee 語句
CREATE TABLE `employee` (
`id` bigint(20) NOT NULL auto_increment,
`code` varchar(10) NOT NULL,
`dept` varchar(50) NOT NULL,
`name` varchar(20) NOT NULL,
`status` varchar(10) NOT NULL,
`telephone` varchar(20) default NULL,
`title` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;





回頁首


用 AppGen 生成代碼

AppFuse 自帶了一個代碼生成工具 -- AppGen,它位于 c:\opt\myapp\extras\appgen 目錄下面。AppGen 可以生成絕大部分我們需要的代碼,比如 dao 類,service 類,菜單、增刪改的 web 頁面、配置文件、樣本數據,等等。AppGen 利用 XDoclet 生成代碼,因此可以在 extras/appgen/src 看到很多 .xdt 文件,這些就是 XDoclet 的模版定義文件。如果你希望自己編寫 dao 和 service 類,就運行“install”這個 target,否則就用 “install-detailed” ,它可以幫你搞定一切。下面就讓我們來運行 “install-detailed” 生成代碼。在 c:\opt\myapp\extras\appgen 下運行 “ant install-detailed”。


清單 3. 運行 install-detailed
...
[input] Would you like to generate code from a table or POJO? (table,pojo)
table
[input] What is the name of your table (i.e. person)?
employee
[input] What is the name, if any, of the module for your table (i.e. organization)?
hr
...

前兩個問題都很直觀:選擇從 table 生成代碼,表名是 employee。第三個問題是讓用戶輸入使用的模塊名,如果你希望 AppFuse 幫你按模塊生成代碼的話,就需要輸入一個模塊名稱。這里,我們輸入“hr”。如果運行成功,在 Eclipse 中會看到如下的目錄結構:


圖 4. “install-detailed” 執行后的 Eclipse

表 2 列出了 "install-detailed" 生成的主要文件。


表 2. "install-detailed" 生成的主要文件列表
文件說明
myapp/src/dao/org/appfuse/dao/hibernate/applicationContext-hibernate.xml在其中增加了 employeeDao 的聲明
myapp/src/dao/org/appfuse/hr/model/Employee.javaEmployee 類 -- Java Bean
myapp/build/dao/gen/org/appfuse/hr/model/Employee.hbm.xmlEmployee 類的 Hibernate 映射文件
myapp/src/dao/org/appfuse/hr/dao/EmployeeDao.java定義關于 employee 的 dao 層的操作
myapp/src/dao/org/appfuse/hr/dao/hibernate/EmployeeDaoHibernate.javaEmployeeDao 的 Hibernate 實現類
myapp/src/service/org/appfuse/service/applicationContext-service.xml在其中增加了employeeManager的聲明
myapp/src/service/org/appfuse/hr/service/EmployeeManager.java定義關于 employee 的 service 層的操作
myapp/src/service/org/appfuse/hr/service/impl/EmployeeManagerImpl.javaEmployeeManager 的實現類
myapp/src/web/org/appfuse/hr/webapp/action/EmployeeForm.javaemployee 的添加/修改頁面對應的 tapestry 類
myapp/src/web/org/appfuse/hr/webapp/action/EmployeeList.javaemployee 的列表頁面對應的 tapestry 類
myapp/test/dao/org/appfuse/hr/dao/EmployeeDaoTest.javaemployee dao 類的測試用例
myapp/test/service/org/appfuse/hr/dao/EmployeeManagerTest.javaemployee service 類的測試用例
myapp/test/web/org/appfuse/hr/webapp/action/EmployeeFormTest.javaemployee 添加/修改頁面類的測試用例
myapp/test/web/org/appfuse/hr/webapp/action/EmployeeFormTest.javaemployee 列表頁面類的測試用例
myapp/web/pages/hr/employeeForm.htmlemployee 添加/修改頁面 html 模版文件
myapp/web/pages/hr/employees.htmlemployee 列表頁面 html 模版文件
myapp/web/pages/hr/employeeForm.pageemployee 添加/修改頁面規格文件
myapp/web/pages/hr/employees.pageemployee 列表頁面規格文件

不 過,AppFuse 并不知道開發者需要加載哪些 hbm 文件,所以要手工將 Employee.hbm.xml 文件添加到配置文件中:打開 applicationContext-hibernate.xml,在 “sessionFactory” 的 bean 聲明中,找到 “mappingResources” 屬性的定義,增加 “<value>org/appfuse/hr/model/Employee.hbm.xml</value>”。


清單 4. applicationContext-hibnerate.xml 中添加 Employee.hbm.xml
...
<beans>
<!-- Hibernate SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
|-------10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
<list>
<value>org/appfuse/hr/model/Employee.hbm.xml</value>
<value>org/appfuse/model/Role.hbm.xml</value>
<value>org/appfuse/model/User.hbm.xml</value>
</list>
</property>
...

在 c:\opt\myapp 下運行 “ant deploy”。打開 “http://localhost:8080/myapp”,用 mraible/tomcat 登錄,“Employee List” 已經被添加到菜單里了。


圖 5. myapp 的原始主頁面

點擊 “Employee List” 鏈接,進入“員工信息列表”頁面。


圖 6. myapp 的原始員工信息列表頁面

點擊“添加”按鈕或點擊任意一行數據,進入“員工信息添加/修改/刪除”頁面。


圖 7. myapp 的原始員工信息添加/修改/刪除頁面

不難看出,雖然 AppFuse 幫我們生成了頁面,但是這些頁面并非那么“理想”,我們仍然需要根據實際的需求做些調整。





回頁首


根據項目需求調整代碼

在本文中,做了如下代碼修改:

  • 將 所有頁面文字翻譯成中文:AppFuse 中用到的所有 Resource Bundle 文件位于 myapp/web/WEB-INF/classes 目錄下(以ApplicationResources開頭的properties文件)。更改 ApplicationResources_zh_CN.properties 的文件編碼方式為“UTF-8”。然后,把 ApplicationResources.properties 中 “# -- Employee-START” 和 “# -- Employee-END” 之間的項拷貝到 ApplicationResources_zh_CN.properties 中,并逐項翻譯成中文。AppFuse 會在腳本運行的時候自動用 native2ascii 進行編碼轉換。另外,AppFuse 默認對 “button.done” 的翻譯是“做”,這不太合適,所以改為“完成”。
  • 在“員工信息列表頁面”去掉了 id 列,并調整了列的順序:只要修改 employees.html 就可以。
  • 在 “員工信息添加/修改/刪除頁面”,將“所在部門”、“職位”、“狀態”改為下拉列表:需要修改 employeeForm.html、employeeForm.page、EmployeeForm.java。用 PropertySelection 組件實現下拉列表,用 Resource Bundle 文件定義真正顯示的選項文本。
  • 增加了一個“人事管理”的角色,用來執行員工信息管理的權限控制:具體介紹見“系統安全”。
  • 添加了一個新的主題 “mytheme”(只是更改了界面的顏色):具體介紹見“頁面布局和樣式”。

應用了上述修改后,在 c:\opt\myapp 中運行 “ant deploy” 重新打包整個項目并發布。以下是修改后的界面截圖:


圖 8. 修改后的 myapp 主頁面


圖 9. 修改后的 myapp 員工信息列表頁面


圖 10. 修改后的 myapp 員工信息添加/修改/刪除頁面


圖 11. 修改后的 myapp 用戶管理頁面





回頁首


其他功能

一個系統除了包含核心邏輯之外,還有其他一些輔助功能,它們也是非常重要的。下面,讓我們來看看如何在 AppFuse 中開發這些功能。

語言國際化

如 果你的系統不僅僅支持一種語言,那么就需要考慮這個問題。在 AppFuse 中,Resource Bundle 文件是位于 web\WEB-INF\classes 目錄下的以 ApplicationResources 開頭的 properties 文件。Tapestry 有自己的國際化文本機制。但是在 AppFuse 中,并不全是 Tapestry 頁面,仍有些地方使用 jsp,而這些頁面使用 JSTL 的 fmt 標簽顯示國際化文本。不過,AppFuse 已經將這二者的“源頭”進行了整合,因此,對用戶而言,只需要在 ApplicationResources*.properties 中定義需要國際化的文本。

但是,在 Eclipse 中可以看到,AppFuse 的 properties 文件默認的編碼不是 UTF-8,而是 ISO-8859-1,這樣會導致最后通過 native2ascii 轉換后的文件都是 “???”,所以用戶需要自己把這些文件轉成 UTF-8。轉換的方法很簡單:在 properties 文件上點右鍵,在右鍵菜單上選擇 Properties,打開屬性窗口后,更改 “Text file encoding” 為 UTF-8。在修改編碼前,最好先把已有的文字拷貝出來,轉換好之后再粘貼回去,否則會導致原先翻譯好的文字變成亂碼。


圖 12. ApplicationResources_zh_CN.properties 的屬性窗口

AppFuse 在發布項目的時候,會自動用 native2ascii 轉換這些資源文件。如果你想使用其他資源文件名,可以修改 web\WEB-INF\web.xml 中的 “javax.servlet.jsp.jstl.fmt.localizationContext” 的參數值。

頁面布局和樣式

使 用 AppFuse,能夠很方便的修改系統的整體布局和樣式,因為 AppFuse 使用了一種強大的 “CSS框架”。項目創建好之后,在 web\styles 目錄下,有三個目錄:andreas01,puzzlewithstyle 和 simplicity。這些是 AppFuse 自帶的三種主題,目錄名即 CSS 框架的主題名。屬于“管理員”角色的用戶可以在登錄后通過在 url 后面添加形如 "?theme=andreas01" 的參數更改系統使用的主題。如下圖:


圖 13. 應用了 “puzzlewithstyle” 的 myapp

系 統默認使用的主題由 web\WEB-INF\web.xml 中的 “theme” 參數指定,AppFuse 默認使用的主題是 “simplicity”。更改或創建新的主題也很簡單,只要在 web\styles 目錄下,新建一個自己的目錄,并參照已有主題的編寫規范定義自己的主題。本文中,拷貝了 simplicity 目錄,更名為 “mytheme”,然后將里面的字體顏色從“藍色”基調改成了“綠色”基調,并修改 web.xml 中的 theme 參數值為 “mytheme”,這樣 myapp 默認使用的就是 mytheme 的主題了,如圖 8所示。你也可以從 http://css.appfuse.org/themes/ 得到更多關于 “CSS框架” 的信息。

系統安全

AppFuse 使用 Acegi 進行安全管理。Acegi 的配置信息位于 web\WEB-INF\classes\security.xml。事實上,Acegi 是被集成到 Spring 當中的,因此這個文件是 Spring 的配置文件格式。在 web\WEB-INF\web.xml 中,該文件被指定在應用啟動前會被加載:


清單 5. web.xml 關于 Spring 配置文件的定義
...
<!-- Context Configuration locations for Spring XML files -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext-*.xml,/WEB-INF/security.xml</param-value>
</context-param>
...

本文關于系統安全的實現如下:

  • 在數據庫中增加新的角色“hr”:編輯 myapp\metadata\sample-data.xml 文件,增加如下黑體的部分:

    清單 6. sample-data.xml 中角色 “hr” 的記錄
    ...
    <table name='role'>
    <column>id</column>
    <column>name</column>
    <column>description</column>
    <row>
    <value>1</value>
    <value>admin</value>
    <value><![CDATA[Administrator role (can edit Users)]]></value>
    </row>
    <row>
    <value>2</value>
    <value>user</value>
    <value><![CDATA[Default role for all Users]]></value>
    </row>
    <row>
    <value>3</value>
    <value>hr</value>
    <value><![CDATA[Role for employee mangement]]></value>
    </row>

    </table>
    ...

    AppFuse 使用 dbunit 加載樣本數據到數據庫中,sample-data.xml 為 dbunit 提供樣本數據定義。修改完 sample-data.xml,在 c:\opt\myapp\ 下運行 “ant db-load”,樣本數據被重新加載。這樣,我們就在數據庫中定義了一個新的角色記錄 “hr”。
  • 定義角色名稱的中文顯示文本:在 myapp/sr/web/webapp/action/UserForm.java 的方法 pageBeginRender 中找到如下代碼:
    // initialize drop-downs
    if (getAvailableRoles() == null) {
    List roles = (List) getServletContext().getAttribute(Constants.AVAILABLE_ROLES);
    setAvailableRoles(new RoleModel(roles));
    }

    將其做如下修改:
    // initialize drop-downs
    if (getAvailableRoles() == null) {
    List roles = (List) getServletContext().getAttribute(Constants.AVAILABLE_ROLES);
    for(int i=0;i<roles.size();i++){
    LabelValue role=(LabelValue) roles.get(i);
    role.setLabel(getText("rolelabel_"+role.getValue()));
    }
    setAvailableRoles(new RoleModel(roles));
    }

    并在 web\WEB-INF\classes\ApplicationResources_zh_CN.properties 中增加角色名稱的定義:
    rolelabel_admin=系統管理員
    rolelabel_user=普通用戶
    rolelabel_hr=人事管理

    AppFuse 默認在用戶管理界面上顯示的角色的名稱是表 role 中的名稱,這樣無論切換到何種語言,角色名稱都是 “admin”、"user"、“hr” 等等,角色名稱不能根據 Locale 用相應的語言顯示。因此,本文將角色的名稱用 Resource Bundle 文件定義,數據庫中存儲 “key” 值。修改后的效果見 圖 10。
  • 配置“安全策略”:在 web\WEB-INF\security.xml 的 bean "filterInvocationInterceptor" 聲明中增加如下“黑體”的一行:
    <bean id="filterInvocationInterceptor"
    class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
    <property name="authenticationManager" ref="authenticationManager"/>
    <property name="accessDecisionManager" ref="accessDecisionManager"/>
    <property name="objectDefinitionSource">
    <value>
    PATTERN_TYPE_APACHE_ANT
    /clickstreams.jsp*=admin
    /flushCache.*=admin
    /passwordHint.html*=ROLE_ANONYMOUS,admin,user
    /reload.*=admin
    /signup.html*=ROLE_ANONYMOUS,admin,user
    /users.html*=admin
    /employees.html*=hr
    /**/*.html*=admin,user
    </value>
    </property>
    </bean>

    “/employees.html*=hr” 的意思是:只有 hr 這個角色可以訪問形如 “/employees.html*” 的 url。
  • 將“員工信息維護”菜單關聯到指定角色 hr:在 web\WEB-INF\menu-config.xml 中在 “EmployeeMenu” 的定義中增加 “roles='hr'”:
    <!--Employee-START-->
    <Menu name="EmployeeMenu" title="employeeList.title" page="/employees.html" roles="hr"/>
    |--10--------20--------30--------40--------50--------60--------70--------80--------9|
    |-------- XML error: The previous line is longer than the max of 90 characters ---------|
    <!--Employee-END-->

    于是,“員工信息維護”的菜單入口只對屬于“人事管理”角色的用戶顯示,對其他用戶則隱藏。
  • 分配角色 “hr” 給 tomcat:將“人事管理”角色分配給某一用戶,例如 tomcat。則 tomcat能夠看見并訪問“員工信息維護”相關頁面,而其他用戶的界面上則沒有“員工信息維護”這個菜單入口。并且,如果用戶試圖通過url訪問 employees.html的時候會看到如下頁面:

    圖 14. “訪問被拒絕”頁面


    圖 14是 AppFuse 提供的默認“訪問被拒絕”頁面,你可以通過修改 web\403.jsp 把它定制成自己喜歡的頁面。
  • 事務控制

    AppFuse 利用 Spring 的事務管理機制。Spring 可以以聲明的方式,對方法進行事務控制,并且可以根據實際的需要,調整控制粒度。“聲明方式”的好處在于:核心代碼只需要關注業務邏輯,而將事務控制完全 交由配置文件管理,一方面是核心代碼簡潔清晰,另一方面也便于進行集中配置管理。

    事務控制一般是定義在 service 類的方法上的。AppFuse 的所有 service 類都聲明在 src\service\applicationContext-service.xml 中,該文件中包含有一個 “txProxyTemplate” bean 的聲明,它定義了基本事務策略。其它的 service 類從 “txProxyTemplate” 繼承,并可以“重寫”事務策略。例如,AppFuse 對 userManager 的聲明如下:

    <!-- Transaction template for Managers, from:
    http://blog.exis.com/colin/archives/2004/07/31/concise-transaction-definitions-spring-11/ -->
    |-------10--------20--------30--------40--------50--------60--------70--------80--------9|
    |-------- XML error: The previous line is longer than the max of 90 characters ---------|
    <bean id="txProxyTemplate" abstract="true"
    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager" ref="transactionManager"/>
    <property name="transactionAttributes">
    <props>
    <prop key="save*">PROPAGATION_REQUIRED</prop>
    <prop key="remove*">PROPAGATION_REQUIRED</prop>
    <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
    </props>
    </property>
    </bean>
    <!-- Transaction declarations for business services. To apply a generic transaction proxy to
    |-------10--------20--------30--------40--------50--------60--------70--------80--------9|
    |-------- XML error: The previous line is longer than the max of 90 characters ---------|
    all managers, you might look into using the BeanNameAutoProxyCreator -->
    <bean id="userManager" parent="txProxyTemplate">
    <property name="target">
    <bean class="org.appfuse.service.impl.UserManagerImpl">
    <property name="userDao" ref="userDao"/>
    </bean>
    </property>
    <!-- Override default transaction attributes b/c of UserExistsException -->
    <property name="transactionAttributes">
    <props>
    <prop key="save*">PROPAGATION_REQUIRED,-UserExistsException</prop>
    <prop key="remove*">PROPAGATION_REQUIRED</prop>
    <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
    </props>
    </property>
    <!-- This property is overriden in applicationContext-security.xml to add
    method-level role security -->
    <property name="preInterceptors">
    <list>
    <ref bean="userSecurityInterceptor"/>
    </list>
    </property>
    </bean>

    Spring 提供了大量的參數和選項使開發者能夠靈活地管理事務。有關 Spring 使用方面的知識,請參閱 Spring 的文檔。另外,《Spring in Action》也是一個不錯的選擇。

    日志

    AppFuse 集成了 Log4j 進行日志管理,log4j.properties 位于 web\WEB-INF\classes 目錄下。AppFuse 已經在絕大多數基類(諸如,BasePage.java、BaseDaoHibernate.java 以及 BaseManager.java 等)中加入了如下用于輸出日志的成員變量:

    protected final Log log = LogFactory.getLog(getClass());

    因此,開發者只需要在自己的代碼中調用 log 的方法就可以了,例如:“log.debug("entered 'delete' method");”。

    郵件

    AppFuse 集成了 Spring 的發送郵件的功能。發送郵件需要用的參數,如主機、端口等信息在 web\WEB-INF\classes\mail.properties 中進行配置。和發送郵件相關的 bean 已經在 applicationContext-service.xml 中聲明:mailEngine、mailSender、velocityEngine 以及 mailMessage。用戶只需要在自己的類中 “注入” mainSender 的實例,就可以發送郵件了。具體使用方法,請參閱Spring的文檔。

    緩存

    AppFuse 對緩存機制的支持源自 Hibernate 對緩存的支持。Hibernate 提供了對五種緩存機制的集成,AppFuse 默認提供了其中的兩種:Ehcache 和 Oscache。開發者也可以根據需要自行添加和配置。Acegi 默認提供了對 Ehcache 支持的實現,所以 Ehcache 是較好的選擇。ehcache.xml 和 oscache.properties 位于 web\WEB-INF\classes 中。





    回頁首


    結束語

    使用 AppFuse 創建 Web 應用,步驟非常簡單,你只需要了解如何運行 Ant 就能夠使用 AppFuse;使用 AppFuse 創建 Web 應用,非常快速,因為 AppFuse 已經幫我們完成大部分代碼生成/集成/配置的工作;使用 AppFuse 創建 Web 應用,非常省力,因為 AppFuse 已經提供了很多“開箱即用”的功能。體驗快速開發,從 AppFuse 開始。






    回頁首


    下載

    描述名字大小下載方法myapp 項目代碼(不含lib目錄)
    myapp.zip3531KBHTTP
    關于下載方法的信息


    參考資料

    學習
    • AppFuse:AppFuse 項目主頁。

    • 使用 AppFuse 的七個理由(developerWorks,2006 年 8 月):來自項目創始人關于 AppFuse 的特性、架構以及為什么要使用 AppFuse 的介紹。

    • AppFuse Demos:AppFuse 演示和視頻

    • AppFuse 快速入門指南:快速入門并使用 AppFuse。

    • AppFuse 教程:深入學習更多有關使用 AppFuse 的知識。

    • CSS Framework:了解更多 AppFuse 中使用到的 CSS Framework 的知識。


    獲得產品和技術
    • Ant:下載并學習如何使用 Ant。

    • Eclipse:下載并學習如何使用 Eclipse。

    • Tomcat:下載并學習如何使用 Tomcat。

    • MySQL:下載并學習如何使用 MySQL。

    • Tapestry:優秀的 Web 框架。

    • Spring:強大的輕量級容器。

    • Hibernate:杰出的 ORM 持久化框架。

    • Acegi:了解和學習如何用 Acegi 進行系統安全配置。


    關于作者

    沈銳在 J2EE 項目開發方面有多年的經驗,目前在 IBM CSDL 從事 IBM Workplace Dashboard Framework 產品的開發工作。他對 Java 的開源技術有著濃厚的興趣,歡迎使用 shenrui@cn.ibm.com 與他交流。

    總結

    以上是生活随笔為你收集整理的【转】 使用 AppFuse 快速构建 J2EE 应用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    国产艹b视频 | 久久久久福利视频 | 中文字幕一区二区三区视频 | 人人草人 | 91九色在线观看视频 | 九色视频自拍 | 97狠狠干 | 国产精品久久久久一区二区国产 | 91超碰免费在线 | 又污又黄网站 | av电影免费| 色吊丝av中文字幕 | 欧美一二区在线 | www在线观看视频 | 偷拍福利视频一区二区三区 | 91精品蜜桃 | 天天干天天操天天 | 久久亚洲精品国产亚洲老地址 | 免费观看性生活大片3 | 日韩在线电影一区 | 亚洲蜜桃在线 | av在线看网站| 香蕉久草 | 国产日韩欧美中文 | 亚洲精选在线观看 | 亚洲伊人网在线观看 | 97天堂| 国产成人免费在线观看 | 操碰av| 国产亚洲精品久久久久久久久久久久 | 九九天堂| 日本爽妇网 | 中文字幕色在线视频 | 欧美一区免费观看 | 欧美午夜精品久久久久久浪潮 | 午夜久久 | 伊人狠狠色丁香婷婷综合 | 深爱激情婷婷网 | 久草在线资源观看 | 一二三精品视频 | 国产看片网站 | 天天射,天天干 | 国内精品久久久久久久久 | 免费在线91 | 国产精品专区一 | 亚洲国产小视频在线观看 | 亚洲国产精品第一区二区 | 久久久久久久久免费 | 国产一级免费观看 | 国产日产精品一区二区三区四区的观看方式 | 久久免费在线视频 | 国产精品mm | 亚洲精品国产综合久久 | 国产美女在线精品免费观看 | 激情av网址| 四虎最新域名 | 亚洲 欧美 日韩 综合 | 91香蕉亚洲精品 | 久久福利精品 | 亚洲jizzjizz日本少妇 | 免费高清看电视网站 | 播五月婷婷 | 久久96| aav在线 | 91精品国产综合久久婷婷香蕉 | 日本中文字幕免费观看 | 91亚洲欧美激情 | 麻豆视频免费版 | 国产精品久久久久久久久久久久午夜片 | 久久特级毛片 | 久久久国产精品亚洲一区 | 91av超碰 | 日韩免费播放 | 成人网大片| 在线观看韩日电影免费 | 日韩免费网址 | 日韩免费一区二区在线观看 | 干亚洲少妇 | 精品福利视频在线 | 91黄视频在线观看 | 免费看黄的视频 | 久久国产精品免费观看 | bayu135国产精品视频 | 成人久久 | 久久精品视频免费播放 | 欧美在线aaa| 午夜黄色一级片 | 亚洲不卡123 | 免费男女网站 | 国产黄a三级三级三级三级三级 | 亚洲精品国产成人av在线 | 国产精品aⅴ | 亚洲丝袜一区 | 国产免费小视频 | 亚洲精品美女久久久久网站 | 亚洲成人黄色 | 黄色99视频 | 日韩电影一区二区在线观看 | 亚洲资源在线观看 | 免费情趣视频 | 国产日韩精品在线观看 | 天天射天天射天天 | 一级黄色片在线免费观看 | 超碰在线97国产 | 国产精品一区二区在线免费观看 | 国产成人av电影在线 | 在线观看国产日韩欧美 | 在线中文字幕视频 | 韩国av免费 | 久久久久久久99精品免费观看 | 亚洲天天在线 | 国产打女人屁股调教97 | 久久人人爽人人爽人人片 | 在线免费观看不卡av | 日本久久精品 | 日日夜夜精品网站 | 国产视频在线观看免费 | 狠狠狠狠狠色综合 | 日韩视频中文字幕在线观看 | 香蕉视频导航 | 色婷婷福利 | 亚洲黄色大片 | 欧美日bb| 一区二区三区手机在线观看 | 色欲综合视频天天天 | av在线8 | 五月天天av| 久久久福利视频 | 激情网第四色 | 美女免费网视频 | 99视频在线免费 | 国产人免费人成免费视频 | 亚洲精品国产精品国自产观看 | 国产精品自在线拍国产 | av在线激情 | 免费在线激情电影 | 91av网址| 国产成人精品久久久 | 欧美成人精品三级在线观看播放 | 亚洲人成网站精品片在线观看 | 天天天天射 | 亚洲视频高清 | 天天舔夜夜操 | 国产97碰免费视频 | 人人精品| 久热只有精品 | 麻豆视频国产在线观看 | 九九视频网站 | 免费看麻豆 | 成年人天堂com | 亚洲精品在线一区二区 | 久久久国产精品一区二区三区 | 天天干天天干天天操 | 91精品久久久久久久91蜜桃 | 夜色在线资源 | 天堂网av 在线 | 福利片免费看 | www.香蕉视频在线观看 | 久久99精品久久久久久 | 有没有在线观看av | 97视频资源| 国产成年免费视频 | 国产成人a v电影 | 精品999| 精品国产一区二区三区四区在线观看 | 又爽又黄在线观看 | 亚洲不卡123 | 亚洲成色 | 91亚洲激情| 成人在线视频一区 | 黄色网大全 | 国产资源 | 国产aa精品| 午夜av片| 日韩三级一区 | a资源在线| 午夜精品福利一区二区 | 天天爱天天操 | 中文字幕一区在线 | 最新av中文字幕 | 亚洲一区二区麻豆 | 成人黄色av免费在线观看 | 欧美一区二区日韩一区二区 | 国产盗摄精品一区二区 | 色网站视频 | 欧美电影黄色 | 91网址在线| 日日干影院 | 99视频在线播放 | 婷婷丁香导航 | 国产视频二区三区 | 国产永久网站 | 一级理论片在线观看 | 久久成年人 | 天堂va在线观看 | 狠狠色丁香婷婷综合基地 | 一区二区三区高清不卡 | 国产a高清 | 国产综合久久 | 超碰国产在线观看 | 久碰视频在线观看 | 99综合电影在线视频 | 国产免费中文字幕 | 日韩精品久久久久久久电影99爱 | 在线欧美日韩 | 九九有精品 | 西西444www大胆无视频 | 69av在线播放 | 91网站在线视频 | 中文字幕av全部资源www中文字幕在线观看 | 日韩专区在线 | 99视频免费 | 91视频在线观看免费 | 久久国产露脸精品国产 | 色无五月 | 丁香在线观看完整电影视频 | 久久国产露脸精品国产 | 97av影院| 国产精品自在线拍国产 | 亚洲国产电影在线观看 | 草久久影院 | 亚洲精品视频免费看 | 国产精品久久久久婷婷 | 亚洲高清视频一区二区三区 | 亚洲激情一区二区三区 | 午夜国产福利在线 | 日韩电影久久久 | 日韩三区在线观看 | 久久免费黄色 | 国产在线不卡视频 | 国产护士hd高朝护士1 | 成人丁香花 | 成人一级片免费看 | 色吊丝av中文字幕 | 麻豆一区二区 | 成人av一区二区三区 | 亚洲最新视频在线 | 国产91在线播放 | 久久婷婷国产色一区二区三区 | 97人人澡人人添人人爽超碰 | 91麻豆精品国产91久久久更新时间 | 91爱爱免费观看 | 欧美精品免费一区二区 | 中文字幕专区高清在线观看 | 九九免费精品 | 在线91av| 国产在线视频一区二区三区 | 日韩在线观看中文字幕 | 在线观看视频一区二区三区 | av成人在线网站 | 久久国内视频 | 久久试看 | 亚洲成人频道 | 天天综合色天天综合 | 色免费在线 | 91麻豆精品国产91 | 精品主播网红福利资源观看 | 国产精品国产自产拍高清av | 日韩视频一二三区 | 亚洲综合在线观看视频 | 337p日本欧洲亚洲大胆裸体艺术 | 中文区中文字幕免费看 | 国产第一页福利影院 | 久久精品中文视频 | 久久久久久久久久久福利 | 久久综合九色九九 | 黄色视屏在线免费观看 | 亚洲精选在线 | 国产精品高潮久久av | 99精品视频免费看 | 色婷婷午夜 | 中国美女一级看片 | 在线观看中文字幕亚洲 | 草久久久 | 国产精品一区二区三区在线免费观看 | 婷婷av网站 | 在线观看aaa | 懂色av一区二区三区蜜臀 | 国产四虎在线 | 国产精品人人做人人爽人人添 | 久久久久电影网站 | 亚洲午夜久久久久久久久电影网 | 深爱激情五月综合 | 中文字幕免费高清在线观看 | 国产系列精品av | 精品久久久免费视频 | 国产黄色在线看 | 精品自拍网 | 五月天激情综合 | 中文字幕一区在线观看视频 | 国产91九色蝌蚪 | 久久久国产精品视频 | 天天草天天干天天 | 国产精品日韩高清 | 色夜视频 | 久久久久久久久毛片精品 | 国产精品亚洲综合久久 | 韩国视频一区二区三区 | 久久久久伊人 | 97视频人人澡人人爽 | 成人一区影院 | 操一草| 一区二区三区免费在线 | 亚洲精品白浆高清久久久久久 | 国产成人精品一区一区一区 | 精品久久久久久久久久 | 亚洲黄在线观看 | 日本精品久久久久久 | 日韩av成人在线观看 | 久草在线免费播放 | 国产精品视频免费 | 精品国产成人av | 久久理论片 | 国产成人精品午夜在线播放 | 日韩精品视频网站 | 久久免费试看 | 99久久久久久 | 成人a免费视频 | 国产亚洲精品久久久久久大师 | 99视频免费在线观看 | 免费观看视频的网站 | 96精品高清视频在线观看软件特色 | 亚洲午夜大片 | 久久精品国产亚洲 | 99精品国产在热久久下载 | 国产第一页福利影院 | 国产精品高清在线 | 在线观看免费福利 | 亚洲天堂免费视频 | 97免费在线观看视频 | 日韩精品免费在线视频 | av丝袜美腿 | 久久精品国产免费观看 | 超碰免费成人 | 国产在线色视频 | 91亚洲欧美| 久久精品麻豆 | 色播亚洲婷婷 | 黄色影院在线免费观看 | 狠狠干中文字幕 | 天天躁日日躁狠狠 | 久久久久成人精品 | 国产精品久久99精品毛片三a | 天天干一干 | 91九色在线播放 | 国产一区二区精品在线 | 国产正在播放 | av黄色一级片 | 免费看的黄网站软件 | 日本久久久久久久久久久 | 精品久久久999 | 欧美日本三级 | 亚洲伊人网在线观看 | 中文字幕久久亚洲 | 国产99久久久国产精品免费二区 | 操高跟美女 | 欧美精品久久久久久久久久白贞 | 亚洲免费国产 | 成年人免费在线 | 最近日本mv字幕免费观看 | 天天亚洲 | 久久美女免费视频 | 国产精品黄色影片导航在线观看 | 四虎在线免费观看视频 | 欧美在线视频免费 | 亚洲精品久久视频 | 免费亚洲视频 | 碰超在线观看 | 91成年视频 | 黄a网 | 久久情侣偷拍 | 成人免费视频a | 欧美日韩国产mv | 成片免费观看视频 | 国内外成人在线 | 欧美综合在线观看 | 色哟哟国产精品 | 日韩视频图片 | 97国产视频 | 欧美一二三视频 | 麻豆传媒电影在线观看 | 五月婷婷六月综合 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 国产91成人 | 五月天婷婷综合 | 中文字幕一区2区3区 | 精品在线观看一区二区 | 国产日韩精品久久 | 久久专区| 五月激情在线 | 日韩中文免费视频 | 久久国产视频网 | 欧美一区二区三区在线视频观看 | 日日草视频| 欧美成人理伦片 | 在线小视频 | 911香蕉视频 | 日本久久久久久 | 国产精品 日韩 | 91精品蜜桃 | 91在线视频观看免费 | 色天堂在线视频 | 国产精品在线看 | 国产精品网站 | 免费三级影片 | 免费观看一级特黄欧美大片 | 国产精品久久久久久欧美 | 国产精品久久久99 | 欧美日本不卡高清 | 一区二区三区免费看 | 69av在线播放| 中文字幕有码在线观看 | 久久成电影 | 日韩啪啪小视频 | 日韩视频免费在线观看 | 亚洲成人蜜桃 | 九九热在线观看 | 欧美日韩一区二区三区不卡 | 综合婷婷久久 | 国产精品 视频 | 国产 日韩 欧美 在线 | 国产精品18久久久久久首页狼 | 四虎影视av | 一区二区三区电影 | 九九九在线 | 九色91福利| 国产亚洲精品美女久久 | 亚洲精品乱码久久久久v最新版 | 摸阴视频 | 国产欧美日韩精品一区二区免费 | 欧美日韩精品在线一区二区 | 欧美精品网站 | 三级性生活视频 | 亚洲精品免费播放 | 深爱综合网 | 热99在线| 婷婷色在线观看 | 黄色特一级片 | 亚洲精品女人久久久 | 免费在线观看成人av | 在线观看视频你懂的 | 狠狠色综合网站久久久久久久 | 激情视频综合网 | 成人小视频在线 | 毛片99 | 久久韩国免费视频 | 国产精品99久久免费黑人 | 在线岛国av | 久久伊人色综合 | 午夜av在线电影 | 黄色a在线 | 成人h电影在线观看 | 久久艹影院 | 久久综合九色综合久99 | 日韩激情视频 | 在线国产欧美 | 国产精品国产三级国产不产一地 | 狠狠色噜噜狠狠狠合久 | 麻豆国产露脸在线观看 | 日本黄色黄网站 | 亚洲精品白浆高清久久久久久 | 在线蜜桃视频 | 欧美成人视 | 欧美在线资源 | 最近日韩中文字幕中文 | 日日夜夜91 | 日韩精选在线 | 成人午夜剧场在线观看 | 成人免费一级片 | 国产黄色一级片在线 | 国产又粗又猛又黄又爽的视频 | 西西4444www大胆艺术 | 午夜美女av| 四虎5151久久欧美毛片 | 成人久久18免费网站图片 | 日韩一级片大全 | 黄色午夜网站 | 欧美亚洲国产精品久久高清浪潮 | 国产精品九九久久久久久久 | 亚洲欧洲成人精品av97 | 亚洲精选视频免费看 | 玖玖玖在线 | 日韩精品一区二区三区免费观看视频 | 国产精品久久综合 | 99电影| 久久国产99 | 97碰在线视频 | 欧美日韩中文字幕在线视频 | 免费观看一区二区 | 国产精品理论视频 | 亚洲伊人天堂 | 久久国语露脸国产精品电影 | 国产专区在线播放 | 日精品在线观看 | 国产激情电影综合在线看 | 国产高清绿奴videos | 国产成人99av超碰超爽 | 毛片久久久 | 中文乱幕日产无线码1区 | 欧美疯狂性受xxxxx另类 | 成片免费观看视频999 | 亚洲精品美女在线观看播放 | 高清在线一区 | 黄色在线免费观看网站 | 久草在线观看视频免费 | 日本韩国在线不卡 | 97在线视频免费 | 亚洲人成在线电影 | 人操人| 91亚洲激情 | 天天色天天操天天爽 | 夜色成人av| 黄色小说网站在线 | 在线观看一区视频 | 国产粉嫩在线观看 | 日韩中文字幕免费 | 一区二区精 | 国产永久免费高清在线观看视频 | 91成人免费在线视频 | 91看片在线播放 | 国产永久免费观看 | 视频在线91 | 亚洲精品福利在线 | 国产成人av一区二区三区在线观看 | 免费在线观看国产黄 | 久99久在线| 天天色天天干天天 | 天天综合成人网 | www.99热精品 | 中文字幕视频免费观看 | www.天天射.com | 99视频精品全部免费 在线 | 久久精品国产99国产 | 操综合| 色www.| av大全在线免费观看 | 国产精品国产精品 | 亚洲香蕉视频 | 久久久穴 | 久av在线 | 麻豆传媒视频观看 | 国产中文字幕视频在线观看 | 久久成人国产精品免费软件 | 国产精品99久久久久久宅男 | 国产色在线视频 | 亚洲精品视频一二三 | 国产亚洲精品久久19p | 中文电影网 | 国产精品婷婷午夜在线观看 | av网站手机在线观看 | 波多野结衣理论片 | 天天操福利视频 | 丁香激情综合久久伊人久久 | 在线免费观看的av网站 | 中文字幕日本在线观看 | 亚洲精品美女久久久久 | 伊人春色电影网 | 亚洲少妇天堂 | 久久艹国产视频 | 欧美一级免费高清 | 欧美日韩视频精品 | 99热超碰 | 免费a级大片 | 日韩中字在线 | 91精品国产成人www | 韩日精品中文字幕 | 久久精品一区二区 | 一区二精品 | 国产91精品欧美 | 国产精品久久艹 | 在线观看香蕉视频 | 国产特黄色片 | 免费影视大全推荐 | 在线免费av观看 | 久久精品久久精品久久精品 | 99久久精品免费视频 | 欧美日韩免费观看一区二区三区 | 日韩激情网 | 99在线免费观看 | 久久精品一二三区 | 亚洲国产久 | 国产精品 日韩 欧美 | 久久国产精品精品国产色婷婷 | 国产原厂视频在线观看 | 亚洲国产精品成人综合 | 欧美日韩伦理在线 | 免费在线一区二区 | 国产 欧美 日产久久 | www.久久久| 成人国产精品电影 | 欧美一区二区精美视频 | 欧美成人亚洲 | 色五月成人 | 综合成人在线 | 午夜三级大片 | 久久婷婷激情 | 91在线超碰 | 在线观看视频在线 | 国产99久久久国产 | 美女国产在线 | 亚洲美女精品区人人人人 | 国产在线播放一区二区三区 | 精品国产1区2区3区 国产欧美精品在线观看 | 欧美一级特黄高清视频 | 在线日韩中文 | 久久久精品 一区二区三区 国产99视频在线观看 | 亚洲精品乱码久久久久久蜜桃不爽 | 一区二区三区免费看 | 粉嫩av一区二区三区四区 | 日韩在线观看视频网站 | 欧美精品乱码久久久久 | 免费看的黄色的网站 | av网站在线观看免费 | 日本精品视频一区 | 特黄特色特刺激视频免费播放 | 97人人人人 | 中文字幕在线一区二区三区 | www.香蕉视频 | 一区二区三区污 | www.天天成人国产电影 | 日韩免费三区 | 麻豆精品传媒视频 | 午夜在线日韩 | 99视频精品免费观看, | va视频在线观看 | 久久久久久国产一区二区三区 | 五月婷婷一级片 | a级片在线播放 | 性色av免费在线观看 | 亚洲精品久久视频 | 国产小视频在线免费观看视频 | 色狠狠一区二区 | 日本久久成人中文字幕电影 | 激情久久久久久久久久久久久久久久 | 久久66热这里只有精品 | 午夜丁香视频在线观看 | 亚洲在线免费视频 | 日韩在线视频免费播放 | 日韩成人免费在线 | av在线免费在线 | 国产福利不卡视频 | 在线视频18在线视频4k | www在线观看视频 | 成人h动漫精品一区二 | 黄网站www| 九九99 | 日韩影片在线观看 | 国产激情久久久 | 福利电影一区二区 | 中文字幕在线观看免费观看 | 国产精品一区二区在线免费观看 | 96视频在线 | 久久xx视频 | 久久久久久久精 | 欧美在线视频一区二区三区 | 美女在线观看av | 999精品 | 久久不见久久见免费影院 | 欧美粗又大 | 欧美国产日韩一区二区三区 | 最近中文字幕mv免费高清在线 | 国产色视频网站 | 高清日韩一区二区 | 天天操天天操天天操天天操天天操 | 黄色a视频免费 | 黄色网www| 99色亚洲 | 1024手机基地在线观看 | 婷婷综合伊人 | 五月激情五月激情 | 国内精品久久久久 | 色婷婷国产 | 9ⅰ精品久久久久久久久中文字幕 | 亚洲第一区在线观看 | 天天操综合 | 国产精品观看视频 | 亚洲成aⅴ人片久久青草影院 | 国产一级黄色av | 国产91aaa | 日韩欧美高清一区二区 | a成人v在线| 丝袜美腿在线播放 | 国产黄色理论片 | 亚洲国产一二三 | 伊人五月在线 | 久久尤物电影视频在线观看 | 成年人视频在线 | 日日干美女 | 日韩和的一区二在线 | 国产精品乱码久久久 | 婷婷日日 | 福利视频| 97精品国产97久久久久久春色 | 亚洲美女免费精品视频在线观看 | 狠狠色狠狠色综合日日92 | 一区二区三区不卡在线 | 五月天激情综合 | 久久精品亚洲 | 日韩免费看 | 成人毛片a| 九九视频一区 | 日韩欧美高清一区二区 | 久久久久免费精品国产小说色大师 | 在线观看av麻豆 | 最近中文字幕国语免费高清6 | www.夜色.com | 一区二区视频在线播放 | 日日干干夜夜 | 国际精品网 | 干亚洲少妇 | 色综合久久综合中文综合网 | 日韩av中文字幕在线 | 精品av在线播放 | 国产精品免费麻豆入口 | 日韩视| 亚洲国产资源 | 毛片区 | 久久字幕精品一区 | 国产精品专区h在线观看 | 日韩中文在线字幕 | 亚洲视频电影在线 | 亚洲97在线 | 中文字幕一区三区 | 国产黄a三级三级三级三级三级 | 国产日韩在线播放 | 成人a在线观看高清电影 | 欧美激情精品久久久久久 | 激情视频一区二区三区 | 黄p在线播放| 亚洲精品一区中文字幕乱码 | 香蕉日日 | 中文字幕精品一区久久久久 | 国产精品观看 | 国产在线观看午夜 | 麻豆久久 | 精品福利视频在线观看 | 国产一级特黄电影 | 麻豆传媒视频在线免费观看 | 午夜丁香网 | 97国产大学生情侣白嫩酒店 | www黄| 日韩成人免费在线电影 | 欧美疯狂性受xxxxx另类 | 日日干视频| 欧美在线观看视频 | 一区二区三区在线视频观看58 | 欧美精品久久久久久久亚洲调教 | 国产精品乱码高清在线看 | 成人丁香花 | 亚洲国产中文字幕在线观看 | 久久免费视频播放 | 人人玩人人添人人澡97 | 丁香婷婷久久久综合精品国产 | 免费国产在线精品 | 伊人久操 | 国产精品免费看久久久8精臀av | av在线免费观看不卡 | 日韩二区三区在线 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 97香蕉久久国产在线观看 | 成人网在线免费视频 | 国产夫妻av在线 | 日韩在线播放av | 国产精品黄色影片导航在线观看 | 高清av在线免费观看 | 欧美十八| 九色自拍视频 | 91精品人成在线观看 | 日日干天天插 | 久久久午夜精品福利内容 | 激情 婷婷| 四川妇女搡bbbb搡bbbb搡 | 国产高清免费视频 | 一区二区伦理电影 | 久久久www成人免费毛片麻豆 | 免费精品人在线二线三线 | 国产黄网站在线观看 | 夜夜躁日日躁 | 久久成电影| 日韩精品在线免费播放 | 久久不卡av | 97视频免费观看2区 亚洲视屏 | 国产一级a毛片视频爆浆 | 免费看久久久 | 亚洲国产精品传媒在线观看 | 六月色丁 | 日本特黄一级 | 五月婷婷视频在线观看 | 性色av免费在线观看 | 国产亚洲精品久久网站 | 亚洲精品一区二区三区四区高清 | 精品主播网红福利资源观看 | 97超碰在线免费 | 欧美在线观看视频一区二区三区 | 午夜av影院 | 精品久久综合 | 久久九九久久九九 | www.狠狠操.com | 天天干天天射天天操 | av无限看| 欧美激情va永久在线播放 | 亚洲永久精品在线 | 99精品免费视频 | 久久久不卡影院 | 国产伦理久久 | 狠狠色丁香久久婷婷综 | 九九国产精品视频 | 国产91全国探花系列在线播放 | 成人午夜片av在线看 | 日日夜夜草 | 六月色婷 | 亚洲精品美女久久久久网站 | 亚洲一一在线 | 九九免费在线看完整版 | 久久精品—区二区三区 | av福利网址导航大全 | 亚洲精品videossex少妇 | 一二区电影| 激情 一区二区 | 全久久久久久久久久久电影 | 在线观看视频一区二区三区 | 伊人色综合久久天天 | 蜜桃av人人夜夜澡人人爽 | 色黄www小说 | 一区精品久久 | 精品国内自产拍在线观看视频 | 99热精品国产一区二区在线观看 | 深爱激情五月网 | 欧美成人性战久久 | 美女网站视频免费黄 | 欧美性极品xxxx娇小 | 国产尤物在线观看 | 色综合天天色综合 | 国产亚洲欧美一区 | 国产在线 一区二区三区 | 国产色啪 | 精品一区二区三区电影 | 亚洲免费观看视频 | www.亚洲精品在线 | 色噜噜狠狠狠狠色综合 | 日韩精品不卡 | 五月婷婷黄色网 | 久久尤物电影视频在线观看 | 国产又粗又长的视频 | 婷婷激情站 | 日本精品一区二区在线观看 | 欧美成年黄网站色视频 | 日韩激情视频在线观看 | 在线黄色观看 | 中文字幕在线看视频国产中文版 | 久草爱视频 | 欧美成人黄 | 国产拍揄自揄精品视频麻豆 | 久久精品亚洲一区二区三区观看模式 | 日韩欧在线 | 国产精品网在线观看 | 韩国av免费 | 在线观看视频一区二区 | 九九电影在线 | 最新日韩精品 | 欧美激情精品久久久久 | 久久国产精品免费一区二区三区 | 亚洲精品天天 | 天天综合日日夜夜 | 久久久久黄 | 久久99精品久久久久久 | 日本视频久久久 | 99麻豆久久久国产精品免费 | 激情丁香 | 91伊人久久大香线蕉蜜芽人口 | 国产一线二线三线在线观看 | 91精选在线 | 欧美日韩另类在线 | 婷婷久月 | 欧美不卡在线 | 国产精品免费久久久久久久久久中文 | 在线播放日韩av | 成人久久久精品国产乱码一区二区 | 中文超碰字幕 | 日韩伦理片一区二区三区 | 狠狠狠狠狠色综合 | av资源免费观看 | 日本公妇色中文字幕 | 99视频国产精品免费观看 | 99精品国产一区二区 | 亚洲专区一二三 | 不卡电影免费在线播放一区 | 高潮毛片无遮挡高清免费 | 婷婷丁香久久五月婷婷 | 色婷婷久久久 | 久久精品激情 | 亚洲精品中文字幕在线观看 | 免费av的网站 | 国产精品免费视频一区二区 | 午夜免费视频网站 | 成人在线免费av | 又黄又刺激视频 | 伊人婷婷网 | 精品视频不卡 | 狠狠狠狠狠色综合 | 中文字幕在线看片 | 国产五月婷 | 国产99久久久国产精品成人免费 | 麻豆高清免费国产一区 | 色资源中文字幕 | 99久久视频| 日韩一区二区免费视频 | 国产精品国产三级国产不产一地 | 国产69精品久久久久99 | 中文字幕免费成人 | 色婷五月| 亚洲国产精品女人久久久 | 久久久99国产精品免费 | 最近中文字幕免费大全 | 天天曰天天射 | 亚洲午夜精品久久久久久久久久久久 | 天天天插| 日本精品一区二区三区在线观看 | 啪啪午夜免费 | 久久www免费视频 | 色吧久久 | 一区二区三高清 | 久久小视频 | 天天干天天操天天操 | 日本久久免费视频 | 国产黄色av | 亚洲成aⅴ人片久久青草影院 | 18性欧美xxxⅹ性满足 | 国产成人av福利 | 日韩国产欧美在线播放 | 欧洲色综合 | 91成人短视频在线观看 | 韩日av在线 | 免费久久久久久 | 亚洲成人精品在线观看 | 国产在线观看国语版免费 | 日本老少交| 黄污视频大全 | 欧美日韩视频精品 | 激情网五月婷婷 | 人人澡人人草 | 亚洲精品欧美精品 | 亚洲免费不卡 | 色婷婷狠狠五月综合天色拍 | 中文字幕精品三级久久久 | 九九在线精品视频 | 国产在线精品一区二区三区 | 日日成人网| 国产精品成人av电影 | 色网址99 | 久久久国产影视 | 日本中文字幕在线免费观看 | 麻豆精品视频在线观看免费 | 天天综合导航 | 中文字幕国产一区二区 | 美女网站在线看 | 91av电影在线 | 亚洲日本va在线观看 | 国产精品久久久久婷婷二区次 | 午夜色大片在线观看 | 91九色视频在线 | 久久国产精彩视频 | 99免费| 在线免费看片 | 欧美做受xxx | 欧美乱码精品一区二区 | 国产99在线 | 欧美性直播| 天天干天天操天天干 | 99r精品视频在线观看 | www久久国产 | 九九久久视频 | 久久精品国产美女 | 日免费视频 | 日韩亚洲国产中文字幕 | 久久人人97超碰精品888 | 国产免费观看视频 | 中文字幕视频三区 | 在线观看日本高清mv视频 | 精品1区二区 | 狠狠色噜噜狠狠狠狠2021天天 | 69国产精品成人在线播放 | 午夜av免费在线观看 | 欧美一区在线观看视频 | 999久久国精品免费观看网站 | 99久久99精品 | 久久美女电影 | 99久久这里有精品 | 91av视频在线观看 | 日韩精品一区二区三区水蜜桃 | 国产99久久九九精品免费 | 欧美成人tv | 国产麻豆电影在线观看 | 欧美日韩一区二区三区免费视频 | 超级碰碰碰免费视频 | 欧美与欧洲交xxxx免费观看 | 成人在线视频免费看 | 免费国产黄线在线观看视频 |