亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        500 Internal Server Error


        nginx
        500 Internal Server Error

        500 Internal Server Error


        nginx
        500 Internal Server Error

        500 Internal Server Error


        nginx
        500 Internal Server Error

        500 Internal Server Error


        nginx
        500 Internal Server Error

        500 Internal Server Error


        nginx
        500 Internal Server Error

        500 Internal Server Error


        nginx

        結(jié)合AOP思想和依賴注入技術(shù)的輕量級MVC框架

        2016-01-22 09:07:46姜林美李國剛杜勇前
        關(guān)鍵詞:數(shù)據(jù)庫

        姜林美, 李國剛, 杜勇前

        (華僑大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院, 福建 廈門 361021)

        ?

        結(jié)合AOP思想和依賴注入技術(shù)的輕量級MVC框架

        姜林美, 李國剛, 杜勇前

        (華僑大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院, 福建 廈門 361021)

        摘要:為了解決目前Java主流模型-視圖-控制器(MVC)框架日益龐大,從而導(dǎo)致性能低下的問題,提出了一個輕量級的MVC框架.該框架利用面向方面編程(AOP)技術(shù)實(shí)現(xiàn)了橫向業(yè)務(wù)的剝離,采用控制反轉(zhuǎn)設(shè)計模式實(shí)現(xiàn)了模塊間的最低耦合,并通過Java反射技術(shù)實(shí)現(xiàn)了數(shù)據(jù)庫記錄與Java對象的自動轉(zhuǎn)換.實(shí)驗(yàn)結(jié)果表明:該框架以僅僅70 KB左右的JAR包實(shí)現(xiàn)了比其龐大數(shù)百倍的類似框架的主要功能,同時支持網(wǎng)絡(luò)應(yīng)用和移動應(yīng)用的開發(fā),具有更高的執(zhí)行效率.

        關(guān)鍵詞:Java反射; 依賴注入; 控制反轉(zhuǎn); 模型-視圖-控制器框架; 面向方面編程; 移動應(yīng)用開發(fā)

        在面向?qū)ο笤O(shè)計領(lǐng)域,框架是由一組相互協(xié)作的可重用設(shè)計的類構(gòu)成,對這些類進(jìn)行特化(specialized),即可創(chuàng)建不同的客戶應(yīng)用程序[1].目前,框架設(shè)計已成為加速信息系統(tǒng)開發(fā)和軟件重用的一項(xiàng)關(guān)鍵技術(shù)[2],盡可能地降低模塊之間的耦合性.模型-視圖-控制器(model view controller,MVC)框架的核心是能夠?qū)崿F(xiàn)三層甚至多層的松散耦合[3].面向方面編程(aspect oriented programming,AOP)的核心思想是對軟件系統(tǒng)中各個互相獨(dú)立的橫切關(guān)系(如日志記錄、權(quán)限檢查、緩存和持久化等)加以模塊化,使之可以有效地集中被管理,而不會讓其分散到程序代碼的各個地方[4].AOP把一個系統(tǒng)看作一批關(guān)注點(diǎn),強(qiáng)調(diào)調(diào)用者與被調(diào)用者之間的解耦,并能夠自動將橫切關(guān)注點(diǎn)織入到面向?qū)ο蟮能浖到y(tǒng)中[5],將業(yè)務(wù)關(guān)注點(diǎn)和橫切關(guān)注點(diǎn)分離[6-7].依賴注入是Martin Fowler對IoC(inversion of control)模式的一種擴(kuò)展解釋,即高層不應(yīng)依賴于底層,兩者都應(yīng)依賴于抽象;抽象不應(yīng)依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)依賴于抽象[8].在Java中,依賴注入一般通過反射機(jī)制來實(shí)現(xiàn).Java反射機(jī)制允許在運(yùn)行時加載、探知和使用編譯期完全不知道的類[9].目前,SSH(struts2 spring hibernate)框架在Java Web輕量級應(yīng)用開發(fā)領(lǐng)域得到了廣泛的應(yīng)用.SSH是由Struts2,Spring和Hibernate三個獨(dú)立組件組合而成,它們各有自己的不同的版本,這些版本相互組合存在兼容性問題和執(zhí)行效率低下的問題.另外,Hibernate因采用對象關(guān)系映射(ORM)技術(shù)導(dǎo)致效率比精心編寫的JDBC(java data base connectivity)差[10].最后,SSH的各個組件的尺寸越來越大,所帶來的問題是應(yīng)用系統(tǒng)的可維護(hù)性差,運(yùn)行效率的降低.為此,本文提出應(yīng)用AOP和Java依賴注入技術(shù)的思想的輕量級MVC框架.

        1框架的設(shè)計

        文中提出的框架運(yùn)行于Web容器之上,其總體結(jié)構(gòu)如圖1所示.

        圖1 框架結(jié)構(gòu)Fig.1 Structure of the framework

        1.1 派遣過濾器

        派遣過濾器是框架與Web容器交互的界面.派遣過濾器實(shí)現(xiàn)了javax.servlet.Filter接口.Filter接口的配置管理器由派遣過濾器創(chuàng)建并調(diào)用,負(fù)責(zé)讀取并解析系統(tǒng)配置文件.frame.xml.init()方法中,通過配置管理器讀取框架的配置文件frame.xml,并進(jìn)行解析.Filter接口的doFilter()方法中,利用Action調(diào)度器對Web容器發(fā)來的HttpServletRequest請求進(jìn)行處理,并將處理結(jié)果通過HttpServletResponse反饋給Web容器.

        1.2 配置管理器

        配置管理器由派遣過濾器創(chuàng)建并調(diào)用,它負(fù)責(zé)讀取并解析系統(tǒng)配置文件frame.xml.根據(jù)配置文件中的配置項(xiàng)生成各類映射表,包括Action映射表、攔截器映射表、終結(jié)器映射表、DAO(data access object)映射表、結(jié)果視圖映射表和常量映射表.前4種映射表是Action調(diào)度器進(jìn)行依賴注入的依據(jù).另外,配置管理器還通過反射機(jī)制創(chuàng)建數(shù)據(jù)庫連接池.該連接池在DAO對象調(diào)用數(shù)據(jù)庫操作工具包進(jìn)行數(shù)據(jù)庫訪問時被自動引用,并在派遣過濾器銷毀時自動銷毀.

        1.3 Action調(diào)度器

        當(dāng)客戶端的HTTP請求經(jīng)Web服務(wù)器送達(dá)Web容器后,Web容器生成相應(yīng)HttpServletRequest請求,派遣過濾器則會在其doFilter() 方法中截獲該請求,并通過Action調(diào)度器對該請求進(jìn)行處理,并反饋處理結(jié)果.因此,Action調(diào)度器是整個框架的核心.

        1.3.1依賴注入依賴注入是Action調(diào)度器對一次HttpServletRequest請求所做的第一個操作,需要調(diào)用反射工具包中的反射處理函數(shù)配合完成.首先,Action調(diào)度器會根據(jù)請求的URL(universal resource locator)信息,在配置管理器的Action映射表中查找相應(yīng)的Action類名.如果找到,則通過依賴注入創(chuàng)建相應(yīng)的Action實(shí)例;否則,立即終止請求,并輸出錯誤提示.Action實(shí)例成功創(chuàng)建之后,調(diào)度器繼續(xù)在配置管理器的映射表中查找與該Action相關(guān)的攔截器和終結(jié)器,查找成功,即通過依賴注入創(chuàng)建相應(yīng)的實(shí)例.此外,調(diào)度器還將在配置管理器的DAO映射表中查找與該Action相關(guān)聯(lián)的DAO,如果查找成功,則創(chuàng)建DAO實(shí)例,并將創(chuàng)建的DAO實(shí)例注入該Action對象.最后,調(diào)度器通過Java反射功能檢查該Action中的成員變量中是否有表單類型的對象,如果有,則創(chuàng)建表單實(shí)例,并為表單對象的各成員變量注入值.所注入的值來自HttpServletRequest中與成員變量同名的請求參數(shù),表單類型指的是直接或間接從Form類繼承的類.

        1.3.2攔截器調(diào)度器在完成依賴注入之后,在配置文件中,以攔截器配置的先后順序依次調(diào)用攔截器對象的intercept()方法,該方法以接收請求相應(yīng)的Action對象作為其參數(shù).在攔截器中可以對請求做任何橫切事務(wù)處理,并根據(jù)橫切處理結(jié)果決定是否要繼續(xù)執(zhí)行Action對象中的目標(biāo)方法.

        1.3.3ActionAction是框架提供給上層應(yīng)用的主要接口,應(yīng)用程序應(yīng)當(dāng)是在Action中或Action的交互類中實(shí)現(xiàn)業(yè)務(wù)處理的核心代碼.

        如節(jié)1.3.1所述,Action中若有DAO類型的成員變量,并在frame.xml中進(jìn)行了相應(yīng)的配置,該成員變量的值會在依賴注入階段進(jìn)行注入.另外,Action中表單類型的成員變量的值也會在依賴注入階段進(jìn)行注入.因此,在Action中可以直接使用DAO進(jìn)行數(shù)據(jù)庫訪問,也可以通過表單類型的成員變量直接獲得客戶端提交的數(shù)據(jù).

        在Action中,可通過“表單-POJO(plain ordinary java objects)轉(zhuǎn)換器”將表單對象轉(zhuǎn)換成POJO對象.轉(zhuǎn)換的原則是同名成員變量做類型轉(zhuǎn)換后,進(jìn)行相應(yīng)的賦值,轉(zhuǎn)換后的POJO對象即可供業(yè)務(wù)處理使用.此后,若業(yè)務(wù)處理過程需要進(jìn)行數(shù)據(jù)庫操作,可使用DAO對象來完成.在DAO中只需編寫SQL語句,然后調(diào)用數(shù)據(jù)庫操作工具包中的相應(yīng)方法執(zhí)行該SQL語句,即可完成任何數(shù)據(jù)庫操作.若執(zhí)行的是有結(jié)果集(Resultset)的SQL語句,所取得所有記錄行(結(jié)果集中的)會通過“記錄行-POJO轉(zhuǎn)換器”轉(zhuǎn)換成POJO對象,然后整個結(jié)果集中的數(shù)據(jù)將被封裝成一個List列表(POJO數(shù)據(jù)集)返回.

        1.3.4結(jié)果視圖結(jié)果視圖對應(yīng)MVC框架的視圖部分,在Action中對業(yè)務(wù)邏輯進(jìn)行處理之后,可根據(jù)處理結(jié)果選擇在frame.xml中配置好的屬于Action的任一結(jié)果視圖.框架支持的結(jié)果類型包括FORWARD,REDIRECT,REDIRECT_TOP,CHAIN,PLAINTEXT,JSON和XML.前3種類型一般用于JSP頁面,其中,F(xiàn)ORWARD類型用于直接在服務(wù)端轉(zhuǎn)發(fā)請求的JSP頁面;RIDRECT類型則用于重新轉(zhuǎn)發(fā)到一個新的URL頁面;REDIRECT_TOP和RIDRECT一樣,但在原始頁面由多個frame(指html的〈frame〉或〈iframe〉)構(gòu)成時,會在頂層顯示轉(zhuǎn)發(fā)后的結(jié)果頁面.CHAIN類型用于直接調(diào)用另一個Action作后續(xù)處理的頁面;使用PLAINTEXT類型會向客戶端傳送普通文本;使用JSON類型則會將Action中的處理結(jié)果格式化成JSON字符串,再傳送給客戶端.最后,XML類型意味著向客戶端傳送XML文檔.

        1.3.5終結(jié)器Action調(diào)度器處理的最后一步,在配置文件中,對終結(jié)器配置的先后順序依次調(diào)用終結(jié)器對象的intercept()方法,該方法同樣以接收請求相應(yīng)的Action對象作為其參數(shù),可對請求做任何橫切事務(wù)處理.

        2框架的實(shí)現(xiàn)

        框架源碼實(shí)現(xiàn)時含4個包,分別是工具包util、數(shù)據(jù)庫包db、核心包c(diǎn)ore和活動包action.整個框架最終被打包成xxdw-platform.jar提供給上層應(yīng)用程序來使用,框架的源碼組織結(jié)構(gòu),如圖2所示.

        圖2 源碼組織結(jié)構(gòu)Fig.2 Organization of the source codes

        工具包util提供整個框架的一些工具類,工具類只有一些靜態(tài)的方法,以便通過類名直接調(diào)用.其中:ReflectUtil類是實(shí)現(xiàn)依賴注入的基礎(chǔ),同時也為Form2PojoUtil類進(jìn)行表單-POJO的轉(zhuǎn)換,以及為Record2PojoUtil進(jìn)行記錄行-POJO的轉(zhuǎn)換提供支持.ReflectUtil的核心操作是依賴注入和數(shù)據(jù)類型的轉(zhuǎn)換.

        ViewUtil定義了和視圖操作相關(guān)的一些方法,如取上下文路徑、視圖重定向等.CommonUtil則定義了其他一些常用的公共方法,如設(shè)置調(diào)試模式、獲取遠(yuǎn)端IP地址、特殊字符轉(zhuǎn)義處理等.

        數(shù)據(jù)庫包db中的類均與數(shù)據(jù)庫處理相關(guān).其中:ConnectionPoolFactory是用于創(chuàng)建連接池的工廠類;ConnectionPool是數(shù)據(jù)庫連接池.配置管理器在讀入并解析frame.xml時,實(shí)例化連接池工廠,并創(chuàng)建連接池;Dao是一個抽象類,應(yīng)用程序應(yīng)當(dāng)繼承該類以實(shí)現(xiàn)自身的各種數(shù)據(jù)庫訪問操作;DbUtil類提供一系列靜態(tài)方法以執(zhí)行任何SQL查詢操作,使用Record2PojoUtil工具可將數(shù)據(jù)庫記錄轉(zhuǎn)換成Java對象.

        核心包c(diǎn)ore實(shí)現(xiàn)整個框架的“控制”(即MVC中的Controller)部分,其中:FrameFilter是派遣過濾器,它被配置到Web容器的web.xml文件中,以截獲客戶端的ServletRequest請求;ConfigureManager即配置管理器,管理frame.xml中的各配置項(xiàng);ActionItem,ResultItem和DaoItem分別用于其中的Action配置項(xiàng)、結(jié)果視圖配置項(xiàng)和Dao配置項(xiàng);ActionDispatcher對應(yīng)框架中的Action調(diào)度器,對整個HttpServletRequest的請求處理過程進(jìn)行調(diào)度處理.

        活動包action中實(shí)現(xiàn)了一些應(yīng)用程序所必須繼承的基礎(chǔ)類或應(yīng)當(dāng)實(shí)現(xiàn)的接口,應(yīng)用程序主要通過這些類使用框架的各項(xiàng)功能.其中:Action類是業(yè)務(wù)活動基類,所有繼承該類的類應(yīng)當(dāng)在frame.xml中進(jìn)行配置,并會在框架的依賴注入階段被實(shí)例化;Form是所有表單類應(yīng)繼承的基類,用于接收客戶端提交的數(shù)據(jù),表單類也會在依賴注入階段被實(shí)例化,并被注入數(shù)據(jù);Interceptor和Finalizer分別為攔截器和終結(jié)器接口;Pojo類則是應(yīng)用程序中的簡單對象類.

        3實(shí)驗(yàn)結(jié)果與分析

        為驗(yàn)證所提出的輕量級MVC框架的性能,建立了兩個Web項(xiàng)目,分別采用struts 2框架和所提出的輕量級MVC框架對客戶端的請求進(jìn)行處理.客戶端通過多線程來模擬并發(fā)連接,每個線程可連續(xù)向服務(wù)端發(fā)起多個請求.線程數(shù)稱為并發(fā)數(shù);每個線程連續(xù)發(fā)起的請求數(shù)稱為每并發(fā)請求數(shù),簡稱請求數(shù).因此,總請求數(shù)=并發(fā)數(shù)×請求數(shù),客戶端向服務(wù)端提交請求的核心代碼如下所示.

        ∥建立一個Socket

        Socket socket=new Socket(InetAddress.getByName(“l(fā)ocalhost”),8080);

        ∥提交的數(shù)據(jù)

        String para=“username=alice&password=568998”;

        StringBuffer command=new StringBuffer()

        .append(“POST” +path+ “HTTP/1.1 ” )

        .append(“Accept:*/* ”)

        .append(“Content-Type: application/x-www-form-urlencoded ”)

        .append(“HOST:localhost:8080 ”)

        .append(“Connection:Close ”)

        .append(“Content-Length: ”+para.length() + “ ”)

        .append(“ ”+para);

        ∥發(fā)送命令

        BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

        writer.write(command.toString());

        writer.flush();

        ∥接收返回的結(jié)果

        BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));

        while (reader.readLine() != null);

        兩個Web項(xiàng)目所構(gòu)建的服務(wù)端接收相同的請求數(shù)據(jù)(即username=alice&password=123456)并對其進(jìn)行讀取,然后向客戶端返回相同的jsp響應(yīng)頁面.

        實(shí)驗(yàn)一的客戶端和服務(wù)器采用同一臺主機(jī),該主機(jī)的配置如下:CPU為Pentium (R) Dual Core CPU E5200@2.5 GHz,內(nèi)存3.0 G,操作系統(tǒng)為Windows 7,32位旗艦版 Service Pack 1,Web服務(wù)器為Apache Tomcat 6.0.26.

        實(shí)驗(yàn)二的服務(wù)端同實(shí)驗(yàn)一,客戶端則為一臺安卓華為C8813手機(jī).華為C8813的主要參數(shù):操作系統(tǒng)為Android OS 4.1,CPU為高通驍龍Snapdragon MSM8625Q雙核1.2 GHz,內(nèi)存512 M.

        兩個實(shí)驗(yàn)各自的總請求數(shù)均為2 500(基本接近Tomcat 6所能接受的并發(fā)連接數(shù)的上限),各自測試3種具有代表性的情形:并發(fā)數(shù)為1,每并發(fā)連接數(shù)為2 500;并發(fā)數(shù)為50,每并發(fā)連接數(shù)也為50;并發(fā)數(shù)為2 500,每并發(fā)連接數(shù)為1.第1,3種情形屬于極端情況,中間一種情形代表了普通情況.3種情況下,采用struts 2的服務(wù)端和采用文中MVC框架的服務(wù)端的平均耗時(每種情形均進(jìn)行1 000次測試),如表1所示.表1中:T為并發(fā)數(shù);R為請求數(shù).由表1可知:采用輕量級MVC框架的服務(wù)端所用時間遠(yuǎn)低于采用struts 2的服務(wù)端所用時間.

        表1 處理2 500個連接的耗時

        為更清晰地觀察兩個框架的性能區(qū)別,根據(jù)表1計算出的兩個框架每秒所能處理的請求數(shù),如表2所示.由表2可知:在客戶端為PC機(jī)的情況下,相比于struts 2,采用文中輕量級MVC框架可提升處理請求的能力平均達(dá)57.11%;在客戶端為手機(jī)的情況下,受限于移動終端的并行處理能力,相比于struts 2,采用文中輕量級MVC框架可提升處理請求的能力小一些,但平均仍達(dá)16.64%.

        每秒所能處理的連接數(shù)對比,如圖3所示.圖3中:橫軸標(biāo)識中的T表示并發(fā)數(shù);R表示每并發(fā)請求數(shù).由圖3可以直觀地看出:文中輕量級MVC框架的性能優(yōu)越性.

        (a) PC客戶端 (b) Android客戶端圖3 每秒所能處理的連接數(shù)對比Fig.3 Connection processing performance comparison

        從實(shí)驗(yàn)結(jié)果可以看出:兩個框架在并發(fā)數(shù)和每并發(fā)請求數(shù)均衡的普通情況下的處理能力均優(yōu)于各自的極端情況,但是在任何情形下,文中所述框架在性能上均優(yōu)于struts框架.

        表2 每秒處理的請求數(shù)和性能比較

        4結(jié)束語

        鑒于AOP程序設(shè)計和MVC框架在Web應(yīng)用程序開發(fā)中日益廣泛的應(yīng)用,而現(xiàn)存的采用Java平臺的MVC框架(如SSH)日益龐大繁雜,提出了一個精簡的輕量級的結(jié)合AOP和依賴注入的MVC框架.該框架的成品jar包庫僅有72.1 KB,遠(yuǎn)小于SSH和Spring MVC等框架的jar包庫.實(shí)驗(yàn)數(shù)據(jù)說明:該框架相比于struts 2具有更好的運(yùn)行性能.另外,該框架已在多個Web和移動應(yīng)用項(xiàng)目中得到應(yīng)用.實(shí)踐結(jié)果證明:該框架能極大地提升應(yīng)用開發(fā)的效率.最后,增加Web服務(wù)支持可以更大地提高框架的通用性,這也是進(jìn)一步的研究方向.

        參考文獻(xiàn):

        [1]LI Fangxing,BROADWATER R P.Software framework concepts for power distribution system analysis[J].IEEE Transactions on Power Systems,2004,19(2):948-956.

        [2]CHEN Liyan,GAO Qing.Research on framework developing technology based on MVC[J].Advances in Information Sciences and Service Sciences,2011,3(3):25-31.

        [3]張忻.基于MVC模式的Struts框架在物流管理信息系統(tǒng)中的應(yīng)用[D].成都:西南交通大學(xué),2005:7-8.

        [4]徐倩穎,楊宗源.面向方面編程的一種新型設(shè)計模式[J].華東師范大學(xué)學(xué)報(自然科學(xué)版),2008,2008(1):68-74.

        [5]史玉珍,李波.一種面向方面的UML建模方法研究[J].計算機(jī)測量與控制,2009,17(12):2497-2499.

        [6]陳月娟,李慧,劉光遠(yuǎn),等.基于AOP的信息管理系統(tǒng)的研究與實(shí)現(xiàn)[J].計算機(jī)應(yīng)用與軟件,2010,27(2):130-132,140.

        [7]卞世暉,李龍澍,陳圣兵,等.基于AOP理念的Struts 2攔截器的研究與應(yīng)用[J].電子設(shè)計工程,2010,18(1):8-9.

        [8]ROBERT C M.敏捷軟件開發(fā):原則、 模式與實(shí)踐[M].北京:清華大學(xué)出版社,2003:116-118.

        [9]費(fèi)廷偉,劉淑芬,屈志勇,等.Java反射驅(qū)動的規(guī)則引擎技術(shù)研究[J].計算機(jī)應(yīng)用,2010,30(5):1324-1326,1330.

        [10]柏銀.基于Struts+Spring+Hibernate多架構(gòu)的性能分析系統(tǒng)[D].成都:四川大學(xué),2006:26-30.

        (責(zé)任編輯: 陳志賢英文審校: 吳逢鐵)

        A Light-Weight MVC Framework Combining

        AOP and Dependency Injection

        JIANG Linmei, LI Guogang, DU Yongqian

        (College of Computer Science and Technology, Huaqiao University, Xiamen 361021, China)

        Abstract:To solve the problem of low performance caused by gradually increased size of the most popular Java MVC(Model-View-Control) frameworks, a novel light-weight MVC framework is presented. In the proposed framework, AOP(Aspect Oriented Programming) technology is used to deal with the cross-cutting business logic, and Inversion-of-Control pattern is adopted to achieve the lowest coupling among modules. Meanwhile, Java reflection technology is used to transfer a database record to a Java object automatically. The experimental results show that although the JAR package of the proposed framework takes only around 70 KB, it not only realizes all the primary functions of the similar frameworks whose size are hundreds of times more massive, but also supports the development of both web application and mobile application with higher execution efficiency.

        Keywords:Java reflection; dependency injection; inversion of control; model view controller; aspect oriented programming; mobile application development

        基金項(xiàng)目:福建省廈門市重大科技計劃項(xiàng)目(3502Z20131019)

        通信作者:姜林美(1976-),男,講師,博士研究生,主要從事網(wǎng)絡(luò)安全與網(wǎng)絡(luò)應(yīng)用軟件的研究.E-mail:clough@hqu.edu.cn.

        收稿日期:2014-07-30

        中圖分類號:TP 393.01

        文獻(xiàn)標(biāo)志碼:A

        doi:10.11830/ISSN.1000-5013.2016.01.0092

        文章編號:1000-5013(2016)01-0092-06

        猜你喜歡
        數(shù)據(jù)庫
        數(shù)據(jù)庫
        財經(jīng)(2017年15期)2017-07-03 22:40:49
        數(shù)據(jù)庫
        財經(jīng)(2017年2期)2017-03-10 14:35:35
        兩種新的非確定數(shù)據(jù)庫上的Top-K查詢
        數(shù)據(jù)庫
        財經(jīng)(2016年15期)2016-06-03 07:38:02
        數(shù)據(jù)庫
        財經(jīng)(2016年3期)2016-03-07 07:44:46
        數(shù)據(jù)庫
        財經(jīng)(2016年6期)2016-02-24 07:41:51
        數(shù)據(jù)庫
        財經(jīng)(2015年3期)2015-06-09 17:41:31
        數(shù)據(jù)庫
        財經(jīng)(2014年21期)2014-08-18 01:50:18
        數(shù)據(jù)庫
        財經(jīng)(2014年6期)2014-03-12 08:28:19
        數(shù)據(jù)庫
        財經(jīng)(2013年6期)2013-04-29 17:59:30
        500 Internal Server Error

        500 Internal Server Error


        nginx
        500 Internal Server Error

        500 Internal Server Error


        nginx
        500 Internal Server Error

        500 Internal Server Error


        nginx
        亚洲成av人片在www| 自拍偷拍亚洲一区| 99riav精品国产| 日本一区二区不卡超清在线播放| 亚洲av综合色区久久精品天堂| 国产美女冒白浆视频免费| 白白色免费视频一区二区在线| 日本丰满老妇bbw| 成人精品天堂一区二区三区| 末成年女a∨片一区二区| 精品亚洲成a人在线观看青青| 99久久精品国产一区二区蜜芽| 狼人国产精品亚洲| 激情一区二区三区视频| 日韩亚洲一区二区三区四区 | 亚洲人成网网址在线看| 国产顶级熟妇高潮xxxxx| 无套内谢的新婚少妇国语播放| 国产又黄又爽又无遮挡的视频| 中文字幕亚洲精品码专区| 色播视频在线观看麻豆| 欧美牲交a欧美牲交aⅴ免费下载 | 91精品国产91久久综合桃花| 在线观看日韩精品视频网站| 日韩女优视频网站一区二区三区 | 日本久久视频在线观看 | 超碰97人人做人人爱少妇| 2021国产精品视频| 久久精品国产亚洲AⅤ无码剧情| 久久婷婷色香五月综合激激情| 国内自拍视频一区二区三区| 亚洲欧洲av综合色无码| 米奇7777狠狠狠狠视频影院| 免费a级毛片无码a| 91精品国产福利尤物免费| 日本啪啪一区二区三区| 一本久道竹内纱里奈中文字幕| 精品国产精品国产偷麻豆| 亚洲国产长腿丝袜av天堂| 欧美久久中文字幕| 加勒比婷婷色综合久久|