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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Struts 2基础

發布時間:2024/4/20 编程问答 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts 2基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Struts 2基礎


第2章?Struts 2

此內容是《Java Web開發教程——入門與提高篇(JSP+Servlet)》一書附贈資料的一部分。

2.1概述

Struts現在分兩個版本:Struts 1.X和Struts 2.X。Struts 1.X已經有很多年了,可以說非常流行,但是因為其他框架的快速發展以及自身存在的問題,Struts 2誕生了,Struts 2與Struts 1的區別非常大,實際上Struts 2的核心思想是基于另外一個非常成功的Web框架WebWork。兩者的區別如表20.1所示。下面主要針對Struts 2進行介紹。

表2.1 Struts1和Struts2的比較

Feature

Struts 1

Struts 2

Action類

在Struts 1中要求Action類繼承抽象的基類。在Struts 1中一個普遍存在的問題就是面向抽象類編程,而不是面向接口編程。

Struts 2中的Action可以實現一個Action接口,同時可以實現其他的接口,這樣可以使用戶有選擇性地使用其它自定義的服務。Struts 2提供了基礎類ActionSupport,該類實現了一些通用的接口。Action接口不是必須的。任何具有execute方法的POJO對象都可以用作Struts 2的Action對象。

線程模型

Struts 1的Actions是單例的,因為只有一個類的實例來處理所有對這個Action的請求,所以必須是線程安全的。單例策略對Struts 1的Action的能夠完成的功能有很大限制,有些功能需要額外的努力才能完成。Action資源必須是線程安全的或者synchronized

Struts 2的Action對象是為每個請求實例化的,因此沒有線程安全的問題。(在實踐中,Servlet容器會為每個請求生成多個throw-away對象,增加的對象不會對性能產生太大影響或者對垃圾回收產生影響)

Servlet依賴

Struts 1的Action依賴Servlet API,因為當調用Action的execute方法時需要傳參數HttpServletRequest和HttpServletResponse。

Struts 2的Action與容器不是緊密結合在一起的。多數情況下,servlet上下文被表示為Map對象,允許對Action進行獨立的測試。如果需要,Struts 2的Action仍然可以訪問原始的request和response對象。?然而,其它框架元素可以減少或者消除對HttpServetRequest和HttpServletResponse對象進行直接訪問的必要。

可測試性

測試Struts 1 Action的一個主要障礙就是execute方法使用了Servlet API。1個第三方擴展Struts TestCase,為Struts 1提供了一組模擬(mock)對象。

Struts 2的Action可以通過實例化、設置屬性和調用方法進行測試。依賴注入支持使測試更簡單。

獲取輸入

Struts 1使用ActionForm對象來獲取輸入。像Action一樣,所有的ActionForm必須繼承一個基類。因為其它的JavaBean不能用作ActionForm,開發人員經常需要創建多余的類來獲取輸入??梢允褂脛討BForm來替換傳統的ActionForm類,但是開發人員同樣可能需要重新描述已有的JavaBean。

Struts 2使用Action的屬性作為輸入屬性,不用創建第二個輸入對象。輸入屬性可以是復雜的對象類型,還可以有自己的屬性??梢栽陧撁嬷型ㄟ^taglib訪問Action屬性。Struts 2也支持ActionForm模式,以及POJO表單對象和POJO Action。復雜對象類型,包括業務或者域對象,都可以作為輸入/輸出對象。模型驅動的特性簡化了標簽庫對POJO輸入對象的引用。

表達式語言

Struts 1集成了JSTL,所以可以使用JSTL的EL語言,EL提供了基本的對象結構遍歷(object graph traversal),但是集合以及索引屬性支持比較弱。

Struts 2可以使用JSTL,同時Struts還支持另外一種功能更強大、使用更靈活的表達式語言,這種語言是Object Graph Notation Language,簡稱OGNL。

值與視圖的綁定

Struts 1使用了標準的JSP機制把對象與要訪問的頁面上下文綁定。

Struts 2使用了一種ValueStack技術,這樣標簽庫不用把視圖與要呈現的對象類型關聯就可以訪問值。ValueStack策略允許重用涉及多個類型的視圖,這些類型可能有相同的屬性名,但是屬性類型不同。

類型轉換

Struts 1的ActionForm屬性通常都是字符串類型。Struts 1?使用Commons-Beanutils進行類型轉換。轉換器是針對每個類的,而不能為每個實例配置。

Struts 2使用OGNL進行類型轉換,框架包含了常用對象類型和基本數據類型的轉換器。

驗證

Struts 1支持手動驗證,通過ActionForm的validate方法或者通過繼承通用的驗證器來完成。對于同一個類可以有不同的驗證上下文環境,但是不能鏈接到對子類型的驗證。

Struts 2支持通過驗證方法進行手工驗證和XWork驗證框架。Xwork驗證框架支持對子屬性的鏈接驗證,使用為屬性類型定義的驗證規則和上下文。

Action執行的控制

Struts 1支持為每個模塊提供獨立的請求處理器(生命周期),但是同一個模塊中的所有Action具有相同的生命周期。

Struts 2通過攔截器棧支持為每個Action創建不同的生命周期。必要的時候,可以使用不同的Actio創建和使用自定義棧。

注:來自Struts的官方網站:http://struts.apache.org/2.0.11.2/docs/comparing-struts-1-and-2.html

Strust 2結構圖如圖2.1(原圖來自Strust 2文檔)所示:

圖2.1 Struts2結構圖

在處理一個請求的時候,主要使用3個類:Action、Interceptor和Result

處理流程:

u??請求到達服務器之后,首先經過一系列過濾器,有的是可選的,最主要的過濾器是FilterDispatcher。所有的請求都會提交給它處理,該過濾器是在web.xml中配置的。配置代碼如下:

????<filter>

????????<filter-name>struts2</filter-name>

????????<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

????</filter>

?

????<filter-mapping>

????????<filter-name>struts2</filter-name>

????????<url-pattern>/*</url-pattern>

????</filter-mapping>

u??FilterDispatcher過濾器接收到請求之后調用ActionMapper查看是否需要調用Action。ActionMapper提供了HttpRequest與Action調用請求之間的映射關系,可以決定當前請求是否需要調用Action。如果ActionMapper返回的信息表明需要調用Action。FilterDispatcher過濾器把控制前交給ActionProxy;

u??ActionProxy調用配置文件管理器ConfigurationManager,該管理器從struts.xml配置文件中獲取配置信息,獲取的信息主要包括當前請求對應哪個Action(對用戶的請求進行處理),對應哪些Result(決定了如何對用戶響應),有時候還涉及攔截器。然后根據這些信息創建ActionInvocation對象,該對象負責具體的調用過程。struts.xml是用戶需要提供的最主要的配置文件。下面是一個struts.xml配置文件的部分內容。

<struts>

????<package name="default" extends="struts-default">

?

????????<action name="Logon" class="mailreader2.Logon">

????????????<result name="input">/pages/Logon.jsp</result>

????????????<result name="cancel" type="redirectAction">Welcome</result>

????????????<result type="redirectAction">MainMenu</result>

????????????<result name="expired" type="chain">ChangePassword</result>

????????</action>

?

????????<action name="Logoff" class="mailreader2.Logoff">

????????????<result type="redirectAction">Welcome</result>

????????</action>

?

????</package>

</struts>

u??ActionInvocation對象按照順序執行當前請求所對應的攔截器,攔截器能夠對請求進行預處理,例如驗證、文件上傳等,并能夠對響應內容進行再處理。通常攔截器是由系統提供的,如果需要,編程人員只需要進行配置即可。在調用Action的方法之前,會調用攔截器的預處理方法;

u??ActionInvocation對象調用攔截器的預處理方法之后會調用Action的execute方法,Action中的代碼主要由編程人員根據功能進行編寫的,通常從數據庫檢索信息或者向數據庫存儲信息。Action的方法返回一個字符串。下面是一個簡單的Action例子。

package simple;

import java.util.Map;

import javax.servlet.http.HttpSession;

?

import com.opensymphony.webwork.ServletActionContext;

import com.opensymphony.xwork.ActionSupport;

?

public class LogoutAction extends ActionSupport {

?

????public String execute() throws Exception {

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

?????session.remove("logined");

?????session.remove("context");

????????return SUCCESS;

????}

?

}

u??ActionInvocation對象根據Action方法的返回結果以及struts配置文件生成Result對象。Result對象選擇一個模板文件來響應用戶,模板文件可以是JSP、FreeMarker和Velocity。

u??容器加載并執行模板文件,使用在Action中獲取的信息對模版中的變量進行賦值,也可能從資源文件或者其他內部對象中獲取信息。最終向瀏覽器呈現的是HTML、PDF或者其他內容。

u??模板文件執行的結果會經過攔截器進行再處理,最后通過過濾器返回給客戶端。

在該結構圖中,既包含了Struts框架提供的基礎接口,也包括了用戶要編寫的文件。其中,ActionMapper、ActionProxy、ConfigurationManager、ActionInvocation和Result是框架提供的核心類。過濾器和攔截器是框架提供的,用戶可以根據需要進行配置,當然也可以編寫自己的過濾器和攔截器。用戶需要編寫的文件是struts.xml、Action和模板文件,這些也是用戶在使用Struts 2框架時需要做的工作。

2.2?開發人員的主要任務

框架為開發人員提供了大量的輔助類,用戶在使用框架開發的時候只需要編寫很少文件。在使用Struts 2開發的時候,首先應該把環境搭建起來,然后使用Struts 2提供的標簽開發界面,然后編寫Action類,最后進行配置。

環境搭建

在進行具體的開發之前,需要先搭建環境。包括如下過程:

u??創建Web工程;

u??加載Struts 2的核心類庫,核心類庫包括commons-logging-1.0.4.jar、freemarker-2.3.8.jar、ognl-2.6.11.jar、struts2-core-2.0.11.2.jar和xwork-2.0.5.jar,把這些類庫放到Web工程的WEB-INF/lib下面;

u??配置web.xml,主要配置Struts中心控制器FilterDispatcher,下面是1個例子。

<?xml version="1.0" encoding="UTF-8"?>

<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

?

????<display-name>Struts Blank</display-name>

?

????<filter>

????????<filter-name>struts2</filter-name>

????????<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

????</filter>

?

????<filter-mapping>

????????<filter-name>struts2</filter-name>

????????<url-pattern>/*</url-pattern>

????</filter-mapping>

?

????<welcome-file-list>

????????<welcome-file>index.html</welcome-file>

????</welcome-file-list>

?

</web-app>

u??創建struts.xml配置文件,與類文件放在一起,空白的struts文件如下所示。在使用Struts 2進行開發所有的配置基本上都在這個文件中完成。也可以根據需要創建多個配置文件,然后在這個配置文件中使用<include file="example.xml"/>進行包含。

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

????"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

????"http://struts.apache.org/dtds/struts-2.0.dtd">

?

<struts>

?

????<constant name="struts.enable.DynamicMethodInvocation" value="false" />

????<constant name="struts.devMode" value="false" />

?

????<include file="example.xml"/>

?

????<!-- Add packages here -->

?

</struts>

環境搭建完之后,在具體開發過程中主要完成3個方面的工作:

u??制作模板文件,可以使用JSP、FreeMarker或者Velocity等;

u??編寫Action,基本上每個動作對應1個Action;

u??配置,主要在struts.xml中進行配置。

下面分別介紹。

制作模板文件

模版文件的主要作用是接收用戶輸入的信息,并向用戶展示信息。Struts提供了多個標簽庫來簡化頁面的代碼量,使用標簽之后頁面也更容易維護。下面是一段標簽:

<s:actionerror/>

<s:form action="Profile_update" validate="true">

??<s:textfield label="Username" name="username"/>

??<s:password label="Password" name="password"/>

??<s:password label="(Repeat) Password" name="password2"/>

??<s:textfield label="Full Name" name="fullName"/>

??<s:textfield label="From Address" name="fromAddress"/>

??<s:textfield label="Reply To Address" name="replyToAddress"/>

??<s:submit value="Save" name="Save"/>

??<s:submit action="Register_cancel" value="Cancel" name="Cancel"

????????????οnclick="form.οnsubmit=null"/>

</s:form>

Struts 2中提供了兩類通用標簽和3類界面標簽:

u??控制標簽

u??數據標簽

u??Form標簽

u??Non-Form用戶接口標簽

u??Ajax標簽

下面對這些類型的標簽進行介紹。

控制標簽及其用法如表2.2所示。

表2.2?控制標簽

標簽名

描述

例子

if

與Java中的if基本相同

<s:if test="%{false}">

????<div>Will Not Be Executed</div>

</s:if>

<s:elseif test="%{true}">

????<div>Will Be Executed</div>

</s:elseif>

<s:else>

????<div>Will Not Be Executed</div>

</s:else>

else if

與Java中的else if基本相同

else

與Java中的else基本相同

append

按照順序把多個迭代器的元素組合到一個迭代器中,保持原來的順序不變。

<s:append var="myAppendIterator">

?????<s:param value="%{myList1}" />

?????<s:param value="%{myList2}" />

?????<s:param value="%{myList3}" />

</s:append>

<s:iterator value="%{#myAppendIterator}">

?????<s:property />

</s:iterator>

generator

根據val屬性的給定的值生成迭代器對象。

<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}">

?<s:iterator>

?????<s:property /><br/>

?</s:iterator>

</s:generator>

iterator

對迭代器或者集合進行遍歷,類似于Java中的for-each循環。

<s:iterator value="#it.days" status="rowstatus">

??<tr>

????<s:if test="#rowstatus.odd == true">

??????<td style="background: grey"><s:property/></td>

????</s:if>

????<s:else>

??????<td><s:property/></td>

????</s:else>

??</tr>

</s:iterator>

merge

把多個迭代器的元素合并到一個迭代器中,合并后的順序為1.1,2.1,3.1,1.2,1.3…,1.1表示第1個迭代器的第1個元素。

<s:merge var="myMergedIterator1">

?????<s:param value="%{myList1}" />

?????<s:param value="%{myList2}" />

?????<s:param value="%{myList3}" />

</s:merge>

<s:iterator value="%{#myMergedIterator1}">

?????<s:property />

</s:iterator>

sort

對List進行排序。

<s:sort var="mySortedList" comparator="myComparator" source="myList" />

subset

獲取集合的子集。

<s:subset var="mySubset" source="myList" count="13" start="3" />

數據標簽及其用法如表2.3所示。

表2.3?數據標簽

標簽名

描述

例子

a

生成HTML的<a>

<s:a href="%{testUrlId}"><img src="<s:url

value="/images/delete.gif"/>" border="none"/></s:a>

action

在JSP頁面中直接調用Action

<s:action name="actionTagAction" executeResult="true" />

bean

實例化JavaBean對象

<s:bean name="org.apache.struts2.example.counter.SimpleCounter" var="counter">

??<s:param name="foo" value="BAR" />

??The value of foot is : <s:property value="foo"/> <br />

</s:bean>

date

創建Date對象

<s:date name="person.birthday" format="dd/MM/yyyy" />

debug

?

?

i18n

得到ResourceBundle對象。

<s:i18n name="myCustomBundle">

</s:i18n>

include

包含1個JSP或者Servlet的輸出。

<s:include value="myJsp.jsp">

???<s:param name="param1" value="value2" />

</s:include>

param

為其他標簽提供參數

參考上面的例子

property

獲取屬性值

參考bean標簽的例子

push

把值保存起來使用

<s:push value="user">

????<s:propery value="firstName" />

????<s:propery value="lastName" />

</s:push>

set

把某個值保存到某個作用范圍的變量中。

<s:set name="personName" value="person.name"/>

Hello, <s:property value="#personName"/>. How are you?

text

呈現i18n的文本消息

<s:i18n name="struts.action.test.i18n.Shop">

????<s:text name="main.title"/>

</s:i18n>

url

用于生成URL

<s:url value="editGadget.action">

????<s:param name="id" value="%{selected}" />

</s:url>

Form標簽及其用法如表2.4所示。

表2.4 Form標簽

標簽名

描述

例子

checkbox

生成復選框

<s:checkbox label="checkbox test" name="checkboxField1"

value="aBoolean" fieldValue="true"/>

checkboxlist

生成多個復選框

<s:checkboxlist name="foo" list="bar"/>

combobox

輸入框與下拉框的組合。

<s:combobox

????label="My Favourite Fruit"

????name="myFavouriteFruit"

????list="{'apple','banana','grape','pear'}"

????headerKey="-1"

????headerValue="--- Please Select ---"

????emptyOption="true"

????value="banana" />

doubleselect

生成聯動菜單

<s:doubleselect label="doubleselect test1" name="menu"

list="{'fruit','other'}" doubleName="dishes"

doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />

head

生成HTML的head部分。

<head>

??<title>My page</title>

??<s:head/>

</head>

file

生成文件輸入框

<s:file name="anUploadFile" accept="text/*" />

?

form

生成form表單

<p/>

<s:form ... />

<p/>

hidden

生成隱藏域

<s:hidden name="foo" value="bar" />

label

生成標簽

<s:label key="userName" />

optiontrans

-ferselect

生成兩個列表框,可以通過中間的按鈕把左邊的選項移動到右邊,也可以把右邊的選項移動到左邊。

<s:optiontransferselect

?????label="Favourite Cartoons Characters"

?????name="leftSideCartoonCharacters"

?????list="{'Popeye', 'He-Man', 'Spiderman'}"

????doubleName="rightSideCartoonCharacters"

?????doubleList="{'Superman', 'Mickey Mouse', 'Donald Duck'}"

?/>

optgroup

在select中提供選項

<s:select label="My Selection"

???????????name="mySelection"

???????????value="%{'POPEYE'}"

???????????list="%{#{'SUPERMAN':'Superman', 'SPIDERMAN':'spiderman'}}">

???<s:optgroup label="Adult"

????????????????list="%{#{'SOUTH_PARK':'South Park'}}" />

???<s:optgroup label="Japanese"

????????????????list="%{#{'POKEMON':'pokemon','DIGIMON':'digimon',

'SAILORMOON':'Sailormoon'}}" />

</s:select>

select

生成下拉框

password

密碼輸入框

<s:password label="%{text('password')}" name="password"

size="10" maxlength="15" />

radio

單選按鈕

<s:radio label="Gender" name="male" list="#genders.genders"/>

reset

重值按鈕

<s:reset value="Reset" />

submit

提交按鈕

<s:submit value="OK" />

textarea

生成文本域

<s:textarea label="Comments" name="comments" cols="30" rows="8"/>

textfield

生成輸入框

<s:textfield key="user" />

?

token

阻止表單重復提交

<s:textfield key="user" />

?

updownselect

創建元素能夠上下移動的列表框

<s:updownselect

list="#{'england':'England', 'america':'America', 'germany':'Germany'}"

name="prioritisedFavouriteCountries"

headerKey="-1"

headerValue="--- Please Order Them Accordingly ---"

emptyOption="true" />

non-form UI標簽及其用法如表2.5所示。

表2.5 non-form標簽

標簽名

描述

例子

actionerror

呈現錯誤信息

<s:actionerror />

actionmessage

呈現提示信息

<s:actionmessage />

component

創建自定義組件

<s:component template="/my/custom/component.vm"/>

div

生成HTML <div>

?

fielderror

輸出關于輸入元素的錯誤信息

???<s:fielderror>

????????<s:param>field1</s:param>

????????<s:param>field2</s:param>

???</s:fielderror>

???<s:form .... >

??????....

???</s:form>

Ajax標簽包括a、autocompleter、bind、datetimepicker、div、head、submit、tabbedpanel、textarea、tree、treenode等。具體用法參考Struts 2幫助文檔。

編寫Action

針對每個功能可以編寫1個Action,也可以多個功能共享1個Action。Action完成的主要功能包括:

u??獲取用戶的輸入信息,這個獲取的過程是由框架完成的,但是用戶需要在Action中定義與用戶輸入表單元素名字相同的成員變量,關鍵是要提供對成員變量賦值的set方法,這樣框架在獲取用戶輸入信息之后會調用set方法把值賦給Action的成員變量。

u??根據用戶的請求信息,調用完成業務邏輯的JavaBean。如果希望要把某些執行結果傳遞給模板文件(JSP、FreeMarker和Velocity等),需要在Action中定義成員變量來表示這些結果,最關鍵的是要定義get方法,這樣在執行模版文件的時候會通過get方法來獲取這些信息。

u??根據執行的結果,返回1個字符串,這個字符串決定了使用什么模板對用戶進行響應。

下面是1個簡單的例子。

public class LoginAction extends ActionSupport {

?

????private String userId;

????private String passwd;

????//?對userId和passwd操作的setter和getter方法

????public String execute() throws Exception {

????????if ("admin".equals(userId) && "password".equals(passwd)) {

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

????????????session.put("logined","true");

????????????session.put("context", new Date());

????????????return SUCCESS;

????????}

????????return ERROR;

????}

}

注意:并不是必須繼承ActionSupport,主要提供execute方法即可。

配置

通過配置文件Struts.xml對Web應用的流程進行管理,包括Action映射和Result處理,前者把請求與Action關聯起來,后者把Action執行的結果與響應界面關聯起來。下面是一段配置。下面是一個簡單的例子。

<struts>

????<package name="default" extends="struts-default">

?

????????<action name="Logon" class="mailreader2.Logon">

????????????<result name="input">/pages/Logon.jsp</result>

????????????<result name="cancel" type="redirectAction">Welcome</result>

????????????<result type="redirectAction">MainMenu</result>

????????????<result name="expired" type="chain">ChangePassword</result>

????????</action>

?

????????<action name="Logoff" class="mailreader2.Logoff">

????????????<result type="redirectAction">Welcome</result>

????????</action>

?

????</package>

</struts>

Struts 2中完成的主要配置如表2.6所示。

表2.6 Struts 2的主要配置信息

配置元素

例子

JavaBean

<bean type="com.opensymphony.xwork2.ObjectFactory"

name="myfactory" class="com.company.myapp.MyObjectFactory" />

常量

<constant name="struts.devMode" value="true" />

<package name="employee" extends="struts-default" namespace="/employee">

???...

</package>

命名空間

包含

<include file="Home.xml"/>

攔截器

<interceptors>

??<interceptor name="security"

?class="com.company.security.SecurityInterceptor"/>

??<interceptor-stack name="secureStack">

????<interceptor-ref name="security"/>

????<interceptor-ref name="defaultStack"/>

??</interceptor-stack>

</interceptors>

引用攔截器

<action name="VelocityCounter"

class="org.apache.struts2.example.counter.SimpleCounter">

????<result name="success">...</result>

????<interceptor-ref name="defaultComponentStack"/>

</action>

全局Result:

<global-results>

????<result name="error">/Error.jsp</result>

????<result name="invalid.token">/Error.jsp</result>

</global-results>

Action

Result

異常配置

在Action中使用:

<exception-mapping exception="com.company.SecurityException" result="login"/>

全局:

<global-exception-mappings>

<exception-mapping exception="java.sql.SQLException" result="SQLException"/>

<exception-mapping exception="java.lang.Exception" result="Exception"/>

</global-exception-mappings>

Struts 2提供了大量的攔截器,用戶可以根據需要調用。

Struts 2的配置文件struts.xml的DTD定義如下。

<!--

???Struts configuration DTD.

???Use the following DOCTYPE

??

???<!DOCTYPE struts PUBLIC

??????????"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

??????????"http://struts.apache.org/dtds/struts-2.0.dtd">

-->

?

<!ELEMENT struts (package|include|bean|constant)*>

?

<!ELEMENT package (result-types?, interceptors?, default-interceptor-ref?, default-action-ref?, default-class-ref?, global-results?, global-exception-mappings?, action*)>

<!ATTLIST package

????name CDATA #REQUIRED

????extends CDATA #IMPLIED

????namespace CDATA #IMPLIED

????abstract CDATA #IMPLIED

????externalReferenceResolver NMTOKEN #IMPLIED

>?

?

<!ELEMENT result-types (result-type+)>

?

<!ELEMENT result-type (param*)>

<!ATTLIST result-type

????name CDATA #REQUIRED

????class CDATA #REQUIRED

????default (true|false) "false"

>?

?

<!ELEMENT interceptors (interceptor|interceptor-stack)+>

?

<!ELEMENT interceptor (param*)>

<!ATTLIST interceptor

????name CDATA #REQUIRED

????class CDATA #REQUIRED

>?

?

<!ELEMENT interceptor-stack (interceptor-ref*)>

<!ATTLIST interceptor-stack

????name CDATA #REQUIRED

>?

?

<!ELEMENT interceptor-ref (param*)>

<!ATTLIST interceptor-ref

????name CDATA #REQUIRED

>?

?

<!ELEMENT default-interceptor-ref (param*)>

<!ATTLIST default-interceptor-ref

????name CDATA #REQUIRED

>?

?

<!ELEMENT default-action-ref (param*)>

<!ATTLIST default-action-ref

????name CDATA #REQUIRED

>?

?

<!ELEMENT default-class-ref (param*)>

<!ATTLIST default-class-ref

????class CDATA #REQUIRED

>?

?

<!ELEMENT global-results (result+)>

?

<!ELEMENT global-exception-mappings (exception-mapping+)>

?

<!ELEMENT action (param|result|interceptor-ref|exception-mapping)*>

<!ATTLIST action

????name CDATA #REQUIRED

????class CDATA #IMPLIED

????method CDATA #IMPLIED

????converter CDATA #IMPLIED

>?

?

<!ELEMENT param (#PCDATA)>

<!ATTLIST param

????name CDATA #REQUIRED

>?

?

<!ELEMENT result (#PCDATA|param)*>

<!ATTLIST result

????name CDATA #IMPLIED

????type CDATA #IMPLIED

>?

?

<!ELEMENT exception-mapping (#PCDATA|param)*>

<!ATTLIST exception-mapping

????name CDATA #IMPLIED

????exception CDATA #REQUIRED

????result CDATA #REQUIRED

>?

?

<!ELEMENT include (#PCDATA)>

<!ATTLIST include

????file CDATA #REQUIRED

>?

?

<!ELEMENT bean (#PCDATA)>

<!ATTLIST bean

????type CDATA #IMPLIED

????name CDATA #IMPLIED

????class CDATA #REQUIRED

????scope CDATA #IMPLIED

????static CDATA #IMPLIED

????optional CDATA #IMPLIED

>?

?

<!ELEMENT constant (#PCDATA)>

<!ATTLIST constant

????name CDATA #REQUIRED

????value CDATA #REQUIRED???

>?

2.3實例

功能:登錄。

涉及的文件有:

l??Login.jsp,用于輸入登錄信息;

l??welcome.jsp,登錄之后的歡迎界面;

l??loginCheck.jsp,判斷用戶是否登錄;

l??LoginAction.java,完成登錄業務處理,正常情況下會調用其他業務邏輯JavaBean來完成;

l??LogoutAction.java,完成退出業務處理;

l??struts.xml,應用的配置文件。

下面分別介紹。

Login.jsp

源文件:Login.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

?pageEncoding="ISO-8859-1"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Insert title here</title>

</head><body>

<form action="login.action" method="post">

User id<input type="text" name="userId" /> <br/>

Password <input type="password" name="passwd" /> <br />

<input type="submit" value="Login"/>

</form>

</body>

</html>?

/pages/welcome.jsp?

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

????pageEncoding="ISO-8859-1"%>

<%@ taglib prefix="ww" uri="/webwork" %>

<jsp:include page="WEB-INF/inc/loginCheck.jsp" />

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Welcome</title>

</head>

?

<body>Welcome, you have logined. <br />

The attribute of 'context' in session is

<ww:property value="#session.context" />

<br /><br /><br />

<a xhref="<%= request.getContextPath() %>/logout.action">Logout</a>

<br />

<a xhref="<%= request.getContextPath() %>/logout2.action">Logout2</a>

</body>

</html>?

/WEB-INF/inc/loginCheck.jsp

<%@ taglib="/webwork" prefix="ww" %>
<ww:if test="#session.login != 'true'">
<jsp:forward page="<%= request.getContextPath() %>/login.jsp" />
</ww:if>?

simple.LoginAction.java

package simple;

import java.util.Date;import java.util.Map;

?

import javax.servlet.http.HttpSession;

?

import com.opensymphony.webwork.ServletActionContext;

import com.opensymphony.xwork.ActionSupport;

?

public class LoginAction extends ActionSupport {

?

????private String userId;

????private String passwd;

?

????public String execute() throws Exception {

????????if ("admin".equals(userId) && "password".equals(passwd)) {

//????????????HttpSession session = ServletActionContext.getRequest().getSession();

//????????????session.setAttribute("logined","true");

//????????????session.setAttribute("context", new Date());

// Better is using ActionContext

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

session.put("logined","true");

????????????session.put("context", new Date());

????????????return SUCCESS;

????????}

????????return ERROR;

????}

?

????public String logout() throws Exception {

//????????HttpSession session = ServletActionContext.getRequest().getSession();

//????????session.removeAttribute("logined");

//????????session.removeAttribute("context");

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

?session.remove("logined");

????????session.remove("context");

????????return SUCCESS;

????}

?

????public String getPasswd() {

????????return passwd;

????}

?

????public void setPasswd(String passwd) {

????????this.passwd = passwd;

????}

?

????public String getUserId() {

????????return userId;

????}

?

????public void setUserId(String userId) {

????????this.userId = userId;

????}

}

?simple.LogoutAction.java

package simple;

import java.util.Map;

import javax.servlet.http.HttpSession;

?

import com.opensymphony.webwork.ServletActionContext;

import com.opensymphony.xwork.ActionSupport;

?

public class LogoutAction extends ActionSupport {

?

????public String execute() throws Exception {

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

session.remove("logined");

session.remove("context");

????????return SUCCESS;

????}

?

}?

?/WEB-INF/classes/xwork.xml

<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">

?

<xwork>

????<include file="webwork-default.xml"/>

?

????<package name="default" extends="webwork-default">

????????<!-- Add your actions here -->

????????<action name="login" class="simple.LoginAction" >

????????????<result name="success" type="dispatcher">/pages/welcome.jsp</result>

????????????<result name="error" type="redirect">/login.jsp</result>

????????</action>

?

????????<action name="logout2" class="simple.LoginAction" method="logout" >

????????????<result name="success" type="redirect">/login.jsp</result>

????????</action>

?

????????<action name="logout" class="simple.LogoutAction" >

????????????<result name="success" type="redirect">/login.jsp</result>

????????</action>

????</package>

</xwork>


總結

以上是生活随笔為你收集整理的Struts 2基础的全部內容,希望文章能夠幫你解決所遇到的問題。

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

五月天久久 | 国产精品专区一 | 精品久久久久久一区二区里番 | 97超碰中文字幕 | 人人dvd| 欧美成年黄网站色视频 | 国产传媒中文字幕 | 丁香五月亚洲综合在线 | 国产99区 | 成人a视频在线观看 | 久久婷婷一区二区三区 | 天天干天天拍 | 免费看av在线 | 亚洲国产精品影院 | 欧洲不卡av| 中文字幕在线观看视频一区 | 久久激情五月激情 | 免费三级骚 | 黄网站污 | 久久av网| 在线视频免费观看 | 国产精品久久久久久69 | 麻花豆传媒一二三产区 | 色吊丝av中文字幕 | 菠萝菠萝在线精品视频 | 色婷婷97| 一区二区激情 | 欧美淫视频 | 亚洲无线视频 | 亚洲小视频在线 | 国产视频一区精品 | 成人午夜剧场在线观看 | 国产精品永久 | 国产区精品视频 | 91爱爱视频 | av女优中文字幕在线观看 | 天天射综合网站 | 国模视频一区二区 | 亚洲成a人片在线观看网站口工 | 丁香激情婷婷 | 日韩一区正在播放 | 久久久久综合 | 久草精品免费 | 特级毛片在线免费观看 | 麻豆一区在线观看 | 久久久精品福利视频 | 午夜av不卡 | 欧美精品久久久久a | 亚洲国产中文字幕 | 69国产盗摄一区二区三区五区 | 日韩v欧美v日本v亚洲v国产v | 一本一道久久a久久综合蜜桃 | av电影久久 | av天天色| 免费在线视频一区二区 | 日日操操 | 日韩av线观看 | 欧美一级黄色网 | 久久精品亚洲一区二区三区观看模式 | 国产中文字幕网 | 色狠狠婷婷| 免费的国产精品 | 国产黄色免费观看 | 欧美美女一级片 | 伊人国产视频 | 亚洲视频精品在线 | 天天看天天干天天操 | 97精品超碰一区二区三区 | 国产精品视频免费看 | 在线观看中文字幕dvd播放 | 久久久久久久久爱 | 午夜丁香网 | 国产精品精品久久久久久 | 久久社区视频 | 日日夜夜精品免费视频 | 欧美精品久久久久性色 | 亚洲 综合 国产 精品 | 日韩91精品 | 91av在线视频播放 | 国产精品久久在线观看 | 蜜臀久久99精品久久久无需会员 | 欧美日比视频 | 九月婷婷综合网 | 国产999免费视频 | 国产精品av在线 | 国产高清精 | 国产精品麻豆91 | 精品视频免费观看 | 久久精品福利 | 大荫蒂欧美视频另类xxxx | 91专区在线观看 | 精品欧美小视频在线观看 | 亚洲精品自在在线观看 | 久久夜靖品 | 色吧av色av | 天天操夜夜拍 | 国产剧情在线一区 | 美女激情影院 | 亚洲女欲精品久久久久久久18 | 五月婷香蕉久色在线看 | 91av视频| 99热精品国产 | 人人爱人人添 | 国产999精品视频 | 精品国产99国产精品 | 欧美一区二区三区在线看 | 亚洲午夜久久久久久久久电影网 | 亚洲伦理一区二区 | 天天操操操操操操 | 国产精品久久久久999 | 久久视频这里有久久精品视频11 | 69绿帽绿奴3pvideos | 91黄色在线看 | 中日韩三级视频 | 久青草视频在线观看 | 中文电影网 | 国产成人精品免费在线观看 | 亚洲最大的av网站 | 久久免费播放视频 | 五月婷婷综合久久 | 六月丁香在线视频 | 日韩理论片在线观看 | 国产成人精品在线观看 | 最新av在线免费观看 | 国产91精品一区二区麻豆亚洲 | 91完整版观看 | av在线h | 日韩久久久久久久久久 | 精品一区二区在线免费观看 | 探花视频在线观看免费版 | 国产精品视频专区 | 国内精品99| 天天操夜夜摸 | 久久高清视频免费 | 91精品一区在线观看 | 精品久久久久久国产91 | 草久久久久久久 | 91精品国产综合久久婷婷香蕉 | 日韩欧美精品一区 | 一区三区视频在线观看 | 国产.精品.日韩.另类.中文.在线.播放 | 久久这里有 | 久久人人爽av | 精品久久久久久国产 | 婷婷色网站 | www.午夜色.com | 91精品久久久久久久久久入口 | 久久精品亚洲精品国产欧美 | 亚洲精品一区二区在线观看 | 国产区精品在线观看 | 日韩精品资源 | 日韩av男人的天堂 | 麻豆视频入口 | 免费看黄在线网站 | 在线综合色 | 久久久国产视频 | 国产精品少妇 | 精品1区2区 | 成人久久久久久久久久 | 色www精品视频在线观看 | 久久国产成人午夜av影院潦草 | 91精品日韩 | 夜夜骑天天操 | 天天干天天做天天爱 | 色网站免费在线看 | 在线观看不卡视频 | 激情五月婷婷网 | 成人国产精品久久久春色 | 国产伦理精品一区二区 | 成人资源网 | 国产男女爽爽爽免费视频 | 欧美日韩99 | 欧美人人爱 | 69av在线播放 | 国产日韩一区在线 | 欧美最猛性xxxxx(亚洲精品) | 欧美日韩精品免费观看视频 | 国产精品99久久免费黑人 | 亚洲人成网站精品片在线观看 | 国产视频在线观看一区二区 | 高清在线观看av | 精品国产美女在线 | 亚洲第一成网站 | 免费国产ww | 日韩在线一二三区 | 国产视频日韩视频欧美视频 | 五月婷亚洲 | 久久精品综合 | 欧美性超爽 | 99久久日韩精品免费热麻豆美女 | 欧美专区日韩专区 | 国产精品视频99 | 免费看黄的视频 | 免费观看www视频 | 国产91成人 | 久久久国产精品电影 | 探花在线观看 | 五月婷婷深开心 | 日日夜夜人人天天 | 三日本三级少妇三级99 | 亚洲第一久久久 | 日韩免费小视频 | 成人黄色资源 | 亚洲国产影院 | 久久人人97超碰国产公开结果 | 中文字幕在线日本 | 99精品视频在线免费观看 | 日韩免费视频观看 | 国产在线播放一区二区 | 九七在线视频 | 国产麻豆剧传媒免费观看 | 美国三级黄色大片 | 91九色国产在线 | 色综合夜色一区 | 国产视频在线观看免费 | 九九九国产 | 久久这里只有精品1 | 在线视频一二三 | 五月开心色 | 精品在线亚洲视频 | 欧美一级免费高清 | 国产亚洲精品av | 午夜精品久久久久久久久久久久 | 高清色免费 | 亚洲成av人片在线观看香蕉 | 成人在线免费视频 | av成人在线电影 | 精产嫩模国品一二三区 | 五月视频 | 日本精品视频一区二区 | 又黄又刺激| 正在播放国产一区 | 婷婷丁香色综合狠狠色 | 999免费视频| av高清免费在线 | 国产黄色大片 | 久久精品看片 | 91午夜精品| 色网站免费在线观看 | 国产高清不卡 | 黄色日视频 | 婷婷久月 | 亚洲精品视频免费 | 91人人网 | 成人免费视频网站在线观看 | 国产视频一区二区在线播放 | 国产福利一区二区三区在线观看 | 日韩va亚洲va欧美va久久 | 91av大全| 午夜视频在线观看网站 | 天天干天天拍天天操 | 日韩精品在线播放 | 中文字幕中文字幕在线中文字幕三区 | 黄色一级免费电影 | 中文字幕日韩精品有码视频 | 国产精品一区二区在线观看免费 | 免费av大片| 美女中文字幕 | 蜜臀av性久久久久av蜜臀妖精 | 最新国产中文字幕 | 久久免费精品 | 久草视频在线新免费 | 色网av| 欧美 日韩 性 | 久久人人97超碰精品888 | 视频成人永久免费视频 | 人人干网站| 午夜色场| 日韩精品免费在线播放 | 久久精品成人欧美大片古装 | 国产精品久久久久久久久久 | 国产精选视频 | 国产天天综合 | 最近中文字幕免费视频 | 国产成人精品999 | 国产美女免费看 | 成人av电影网址 | 日韩在线视频不卡 | 中文字幕中文 | 国产精品国产三级国产不产一地 | 极品国产91在线网站 | 特黄色大片 | 欧美日韩一区二区三区免费视频 | 国产亚洲久一区二区 | 午夜少妇 | 97超碰国产精品女人人人爽 | 在线91精品 | 亚洲激情视频在线观看 | 一区二区久久 | 日韩精品免费一区二区三区 | 国产一区精品在线观看 | 国产一区二区精品在线 | 欧美日韩一区二区三区视频 | 亚洲综合小说电影qvod | 午夜精品麻豆 | 天天干天天干天天射 | av先锋影音少妇 | 国产一区二区不卡视频 | 久久伦理电影 | 狠狠色狠狠色综合系列 | 中文字幕欧美日韩va免费视频 | 免费av大全 | 日韩免费看片 | 国产手机视频在线 | 久久色视频 | 免费在线国产精品 | 国产人在线成免费视频 | 人人玩人人弄 | 国产成人黄色 | 成人 亚洲 欧美 | 激情图片qvod | 91人人网 | 国内精品免费久久影院 | 韩国在线一区二区 | 在线日韩中文 | 91精品伦理 | 天天操一操| 久99久在线 | 精品无人国产偷自产在线 | 亚洲国产精彩中文乱码av | 午夜黄色大片 | 久久亚洲福利视频 | 四虎5151久久欧美毛片 | 99久久er热在这里只有精品15 | 久久国内精品99久久6app | a天堂最新版中文在线地址 久久99久久精品国产 | 伊人中文网 | 欧美视频二区 | 国产精品欧美日韩 | 中文成人字幕 | 亚洲精品婷婷 | 色综合久 | 天天插伊人 | 久久伊人综合 | 91视频大全| 麻花天美星空视频 | 久久精品视频国产 | 99爱在线| 色多多污污在线观看 | 色悠悠久久综合 | 久久久综合电影 | 五月婷婷色播 | 国产 日韩 欧美 中文 在线播放 | 中文字幕中文字幕 | 一本一本久久a久久精品牛牛影视 | 国产精品一区二区三区免费视频 | 麻豆视频免费观看 | 91av在线视频免费观看 | 狠狠色噜噜狠狠狠狠2022 | 国产亚洲欧美精品久久久久久 | 婷婷视频导航 | 在线观看深夜福利 | 激情婷婷亚洲 | 色综合中文字幕 | 色99导航| 国产精品免费大片视频 | 久久中文字幕视频 | 久久婷五月 | 国产精品2020 | 夜夜骑天天操 | 午夜视频日本 | 亚洲一区二区三区四区精品 | 国产精品黄色影片导航在线观看 | 成人羞羞免费 | 国产国产人免费人成免费视频 | 在线 精品 国产 | 亚洲午夜电影网 | 久久久久成 | 欧美激情视频三区 | 伊人狠狠干 | 91精品视频一区 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 美女视频黄的免费的 | 免费的黄色av | 欧美乱码精品一区二区 | 天天操天天操天天操天天操 | 久久99久国产精品黄毛片入口 | 国产一区二区在线影院 | 亚洲人久久久 | 午夜精品久久久久久99热明星 | 午夜精品久久久久久久99 | 狠狠躁天天躁综合网 | 亚洲精品电影在线 | 国产自制av | 97超碰.com | 五月天亚洲综合 | 夜夜操网| 国产精品21区 | 色综合中文字幕 | 国产91精品在线观看 | av在线精品 | 午夜影院一区 | 久久草精品 | 六月丁香婷婷在线 | 久久电影国产免费久久电影 | 欧美一级日韩免费不卡 | 丁香激情网 | 久久综合9988久久爱 | 精品久久精品久久 | 精品成人国产 | 亚洲毛片一区二区三区 | 午夜成人免费电影 | 日韩剧 | 麻豆一精品传二传媒短视频 | 国产一级不卡毛片 | 久久久久免费视频 | 久久久久久黄 | 国产一区二区在线精品 | 成人免费精品 | 国产麻豆果冻传媒在线观看 | 午夜免费久久看 | 久久久久国产成人精品亚洲午夜 | 99 精品 在线 | 在线观看国产福利片 | 日韩精品中文字幕在线 | 久久精品韩国 | 91精品伦理 | 日韩欧美精品在线观看视频 | 久久久久这里只有精品 | 久久99精品久久久久久久久久久久 | 99视频精品免费观看, | 欧美在线一二 | 亚洲精品视频网 | 精品国产中文字幕 | 日韩最新中文字幕 | 亚洲理论电影网 | 日本中文字幕在线免费观看 | 欧美成人69av | 久久综合干 | 日本精a在线观看 | 日韩网站免费观看 | 99在线视频网站 | 在线 影视 一区 | 51久久夜色精品国产麻豆 | 日韩sese | 色偷偷97| 久草资源免费 | 99久久久久免费精品国产 | 蜜臀久久99静品久久久久久 | 黄色亚洲 | 97超碰.com| 国产成人av网站 | 国产亚州av | 最新精品视频在线 | 91精品国产乱码在线观看 | 97人人超碰在线 | 日韩二区三区在线观看 | 免费性网站 | 18国产精品福利片久久婷 | 日韩av男人的天堂 | 蜜桃av人人夜夜澡人人爽 | 亚州精品视频 | 在线视频18在线视频4k | 日韩精品视频免费看 | 中文字幕日本在线 | 一区二区三区精品在线视频 | 日韩videos高潮hd | 黄色免费电影网站 | 精品在线一区二区 | 97视频一区| 国产福利av在线 | 中文字幕在线观看1 | 91人人爽人人爽人人精88v | 国产美女精品人人做人人爽 | 91成人看片 | 麻豆影视在线播放 | 国产精品18久久久久久久网站 | 日韩色在线| 国产精品美女免费 | 日韩xxxxxxxxx| 成人免费视频视频在线观看 免费 | 精品视频专区 | 久久免费久久 | 玖玖爱免费视频 | 国产一级二级在线 | 99福利片| 97超碰精品 | 色婷婷88av视频一二三区 | 91九色国产 | 国产亚洲欧美精品久久久久久 | 麻豆系列在线观看 | 欧美视频www | 精品久久久久一区二区国产 | 精品国内自产拍在线观看视频 | 国产在线观看地址 | 最近日本韩国中文字幕 | 国产精品色婷婷视频 | 久久精品视频网站 | 人人爱爱 | 国产麻豆精品传媒av国产下载 | 欧美精品在线一区 | 国产色视频网站 | 成人少妇影院yyyy | 色视频成人在线观看免 | 久久国产精品久久久久 | 992tv在线观看 | 婷婷综合久久 | 国产精品精品国产 | 国产日韩精品视频 | 久久黄色网址 | 久久久久久久久久久高潮一区二区 | 成人午夜av电影 | 国产精品视频免费在线观看 | 国产一级片在线播放 | av怡红院| 一本一本久久a久久精品综合小说 | 久99久在线视频 | 精品一区精品二区高清 | 丁香婷婷深情五月亚洲 | 国产亚洲成av人片在线观看桃 | 揉bbb玩bbb少妇bbb | 美女在线免费观看视频 | 久久久久久久99精品免费观看 | 亚洲免费小视频 | 97视频在线免费播放 | 久热电影| 91成年视频 | 99成人免费视频 | 天天干天天操天天 | 久久精品日产第一区二区三区乱码 | 国产aa免费视频 | 日韩爱爱网站 | 波多野结衣久久精品 | 91.麻豆视频 | 国产亚洲精品成人av久久ww | 亚洲国产中文字幕在线观看 | 麻豆视频一区二区 | 国产视频日韩 | 国产成人精品亚洲日本在线观看 | 成人免费在线观看入口 | 波多野结衣最新 | 中文字幕在线有码 | 国外成人在线视频网站 | 久久影视中文字幕 | 成人97视频 | 免费观看一级特黄欧美大片 | 亚洲人成在线电影 | 特级毛片在线免费观看 | 久久国产精品99久久久久久丝袜 | 欧美视频在线观看免费网址 | 天天做天天看 | 在线直播av | 18久久久久久 | 免费在线| 亚洲精品一区二区18漫画 | 天天操,夜夜操 | 欧美精品久久久久久久久久丰满 | 奇米影视四色8888 | 亚洲国产精品一区二区久久hs | 999成人| 久久夜色精品国产亚洲aⅴ 91chinesexxx | 久久一级电影 | 日韩av三区 | 超碰人人干人人 | 欧美成人猛片 | 在线成人免费电影 | 中文在线a∨在线 | av中文字幕在线播放 | 精品一区三区 | 国产精品久久久久久久久毛片 | 99视频在线精品免费观看2 | 日韩在线高清视频 | 欧美在线观看视频一区二区三区 | 中文字幕精品视频 | 天天草天天干天天射 | 99久久久国产精品美女 | 日韩av不卡在线观看 | 五月开心婷婷 | 九九天堂 | 国产小视频网站 | 成人一级免费电影 | 91av在线看| 超级碰碰免费视频 | 中文字幕999| 久久精品福利视频 | 精品国产伦一区二区三区 | 九九久久久久久久久激情 | www.婷婷色 | 嫩草av影院 | 成人91在线| 又黄又刺激的视频 | 日韩中文字 | av在线播放国产 | 久久国产精品网站 | 福利av在线 | 九月婷婷色 | 五月天色丁香 | 色婷五月| 日韩高清成人 | 国产女人18毛片水真多18精品 | 香蕉影视在线观看 | 婷婷丁香五| 97超碰在线视 | 色综合天天综合在线视频 | 免费黄在线观看 | 午夜久久福利影院 | 亚洲精欧美一区二区精品 | 国产一级在线观看 | 色综合久久综合 | 91精品视频免费在线观看 | h视频日本 | 婷婷黄色片 | 亚洲无人区小视频 | 久精品视频 | 色妞色视频一区二区三区四区 | 黄色免费观看视频 | 亚洲精品视频中文字幕 | 99热国内精品 | 色婷婷狠 | 久久99久久精品国产 | 日韩在线| 一色屋精品视频在线观看 | 国内精品久久久久久久影视麻豆 | 久久国产免 | 婷婷视频 | 亚洲美女精品视频 | 亚洲精品永久免费视频 | 精品美女在线观看 | 日韩精品在线播放 | 天天做天天爱天天爽综合网 | 97网站| 久久久人人人 | 在线观看91av | 久久久精品亚洲 | 美女久久精品 | 欧美日本一二三 | 99久久精品国产一区 | 日韩色中色 | 国产精品久久久一区二区三区网站 | 免费一级日韩欧美性大片 | 日韩无在线| 亚洲精品动漫成人3d无尽在线 | 久久综合五月婷婷 | 成人三级av | 亚洲国产中文字幕在线观看 | 永久黄网站色视频免费观看w | 久草国产在线 | 婷婷综合久久 | 8090yy亚洲精品久久 | 手机在线欧美 | 91精品久久久久久粉嫩 | 久久99精品国产99久久 | 黄污在线观看 | 亚洲日韩中文字幕在线播放 | 五月天高清欧美mv | 国产精品成人一区二区三区 | 91成人精品观看 | 夜色成人网 | 日韩在线观看视频网站 | 日韩三级视频在线观看 | 成人免费中文字幕 | 国内精自线一二区永久 | 久久久免费看片 | 97色视频在线 | 国产精品麻豆99久久久久久 | 久热爱| 91麻豆产精品久久久久久 | 一区二区视 | 91mv.cool在线观看 | 国产精品21区 | 日本一区二区高清不卡 | 粉嫩av一区二区三区四区 | 欧美色888| 亚洲精品久久久久中文字幕m男 | 国产91精品欧美 | 天天久久综合 | 日韩欧美精品在线视频 | 日韩亚洲国产中文字幕 | 日本久久免费电影 | 一级免费黄视频 | 超碰在线91| 欧美日韩a视频 | 九九久久精品 | 日韩欧美电影 | 久久久久国产a免费观看rela | 欧美日韩免费观看一区二区三区 | 国产精品网红直播 | 麻豆视频免费在线播放 | 美女网站一区 | 久久夜色精品国产欧美乱极品 | 国产剧情av在线播放 | 在线观看久久 | 国产午夜亚洲精品 | 免费在线观看视频一区 | 国产精品成人自产拍在线观看 | 亚洲精品在线观 | 日本精品视频免费观看 | 热久久免费视频 | 久久综合狠狠综合久久综合88 | 国产精品18久久久久久不卡孕妇 | 欧美久久成人 | 日韩在线播放欧美字幕 | 五月天婷婷在线观看视频 | 国产精品青草综合久久久久99 | 欧洲精品久久久久毛片完整版 | 欧美日韩大片在线观看 | 久久国产二区 | 久草在线高清视频 | 日韩在线理论 | 亚洲精品免费在线播放 | 日韩av女优视频 | 欧美日韩国产区 | 丰满少妇麻豆av | 九九交易行官网 | 久久国内视频 | 国产精品一区二区在线看 | 视频在线在亚洲 | 国产精品小视频网站 | 中文字幕亚洲字幕 | 亚洲精品视频播放 | 日本99精品 | 国产黄色在线观看 | 中文字幕黄色 | 日韩成人免费电影 | 超级碰99 | 五月天九九| 国产小视频免费在线网址 | 中文字幕欧美三区 | 97精品国产97久久久久久春色 | 免费看国产曰批40分钟 | 狠狠操夜夜 | 久久国产精品一二三区 | 久久精品视频在线免费观看 | 国产精品激情在线观看 | 欧美一区二区三区在线看 | 美女免费黄视频网站 | 国产黄色精品在线 | 国产一区在线免费观看 | 欧美日韩精品影院 | 久久99久| 最近中文字幕免费av | 午夜av免费在线观看 | 亚洲精品播放 | 综合色在线 | 免费网站在线 | 欧美一区三区四区 | 久碰视频在线观看 | 久久久久久久久亚洲精品 | 中文字幕在线播放第一页 | 97超碰人人澡人人爱学生 | 99视频免费在线观看 | 国内精品久久久久久久97牛牛 | 色综合天天做天天爱 | 最近2019中文免费高清视频观看www99 | www.人人干| 深夜国产在线 | 亚洲尺码电影av久久 | 五月宗合网 | 国产视频不卡一区 | 国产黄在线免费观看 | 天天狠狠干 | 国产91精品看黄网站在线观看动漫 | 国产精品理论片在线观看 | 国产精品99久久久久久武松影视 | 色综合久久久久久久 | 99久久99久久精品国产片 | 色99视频| 久久精品www人人爽人人 | 91在线精品秘密一区二区 | 国产专区在线播放 | 四虎最新域名 | 国产一区久久久 | 菠萝菠萝在线精品视频 | 国产69久久精品成人看 | 久久99免费观看 | 丁香一区二区 | 免费视频三区 | 在线观看中文字幕亚洲 | 99视频在线免费观看 | 国产一级在线免费观看 | 97激情影院 | 九九热在线观看视频 | 人人玩人人爽 | 精品久久久国产 | 99精品黄色片免费大全 | 激情综合色图 | 特级毛片网 | 成人a在线观看高清电影 | 一区二区成人国产精品 | 97综合在线 | 在线成人免费 | 午夜精品一区二区三区在线 | 香蕉视频在线免费 | 毛片网在线观看 | 在线观看免费福利 | 亚洲天堂网视频 | 91网在线看 | 97国产视频 | 国产黄色片网站 | 色中射| 日韩三级视频在线观看 | 永久免费毛片 | 黄色一级在线视频 | 精品女同一区二区三区在线观看 | 国产色一区 | 激情久久久久久久久久久久久久久久 | 亚洲在线视频免费观看 | 欧美亚洲专区 | 国产一区二区视频在线 | 999成人精品 | 日本高清免费中文字幕 | 中文字幕在线看视频 | 色片网站在线观看 | 欧美 日韩 性 | 久久99久国产精品黄毛片入口 | 欧美综合色在线图区 | 午夜三级福利 | 欧美视频99| 五月婷婷黄色 | 中文字幕乱码在线播放 | 国产精品久久久一区二区三区网站 | 91视频在线自拍 | 8x成人在线 | 一区二区中文字幕在线观看 | 天天干天天想 | 日韩电影精品 | 99久久这里有精品 | 国产中文伊人 | 一区二区在线影院 | 免费h在线观看 | 成人一区二区三区在线 | 狠狠久久伊人 | 精品999在线观看 | 91精选| 狠狠干夜夜操 | 99视频国产在线 | 亚洲成人影音 | 欧美人人爱 | www.91av在线| 久久国产精品一区二区三区 | 亚洲精品视频免费在线观看 | 久草网视频在线观看 | 狠狠狠狠狠狠操 | 一级黄色片在线播放 | 2019国产精品| 六月丁香六月婷婷 | 久久99精品国产一区二区三区 | 色综合天天天天做夜夜夜夜做 | 蜜臀久久99静品久久久久久 | 九九九九热精品免费视频点播观看 | 国产区免费 | 国产精品高清在线 | 日韩免费不卡av | 五月婷婷,六月丁香 | 91麻豆精品国产自产在线 | 成人在线超碰 | 亚洲精品国产精品国自产观看 | av福利免费 | 国产只有精品 | 久久福利 | 在线视频国产区 | 日日夜夜天天综合 | 久久久免费少妇 | 色婷婷久久久综合中文字幕 | 开心激情婷婷 | 天堂黄色片 | 国产精品99久久免费观看 | 亚洲在线精品视频 | av网站播放 | av在线播放一区二区三区 | 黄色91在线观看 | 国产福利av在线 | 欧美网址在线观看 | 精品久久久久国产免费第一页 | 国产在线国偷精品产拍免费yy | www色com| 久久综合婷婷综合 | 91精品网站在线观看 | 国产 一区二区三区 在线 | 福利电影一区二区 | 手机成人av在线 | 国产在线一区二区 | 国产一区二区在线免费观看 | 亚洲综合成人婷婷小说 | www.天天干| 久久看视频 | 久久精品视频5 | 人人狠狠| 91中文字幕网 | 中文字幕在线一区二区三区 | 一区二区三区四区五区在线 | 成人精品999| 91专区在线观看 | 日韩精品一区二区三区在线播放 | 五月婷婷激情六月 | 五月婷婷亚洲 | 国产精品情侣视频 | 蜜桃av观看| 中文字幕 国产精品 | 伊人天天狠天天添日日拍 | 日本黄色大片免费看 | 最新av网址大全 | 国产成人精品一区二区三区在线观看 | 视频国产一区二区三区 | 久久一区二区三区国产精品 | 精品国产电影一区二区 | 日韩综合一区二区三区 | 又黄又爽的免费高潮视频 | 91精品国产电影 | 午夜精品福利一区二区三区蜜桃 | 91在线日本| 国产香蕉97碰碰碰视频在线观看 | 国产福利精品视频 | 国产成人精品久久久久 | 91在线看黄| 国产伦精品一区二区三区高清 | 欧美激情综合色 | 久久99精品国产 | 久久国产精品免费视频 | 激情小说久久 | 国产精品高 | 国产成人综 | 国产真实在线 | 成人影片在线免费观看 | 三级黄免费看 | 久久视频免费观看 | aav在线| 亚洲精品免费在线 | 欧美久久久一区二区三区 | 久久久久国产一区二区三区四区 | a亚洲视频 | 亚洲国产一二三 | 免费日韩 精品中文字幕视频在线 | 成人久久电影 | 波多野结衣资源 | 中文字幕色在线视频 | 久久免费视频网站 | 久久久 精品| 天天爱天天舔 | 国产精品v欧美精品v日韩 | 一区二区 不卡 | 在线观看av国产 | 国产亚洲精品中文字幕 | 成人黄色资源 | 国产日韩精品一区二区在线观看播放 | av软件在线观看 | 免费视频99 | 中国一级特黄毛片大片久久 | 亚洲国产精品电影 | 久久久久久国产精品免费 | 中文字幕第一页在线vr | 永久免费的av电影 | 精品久久久久久久久久岛国gif | 国产精品人成电影在线观看 | 亚洲视频 在线观看 | 亚洲黄色区 | 伊人久久五月天 | 国产人成精品一区二区三 | 91成人在线视频 | 又黄又爽免费视频 | 丁香九月激情 | 九九热免费精品视频 | 精品一二区 | 国产在线精品一区二区 | 国产剧在线观看片 | 久保带人 | 国产精品门事件 | www色| 91网址在线观看 | 91精品色| 久久久亚洲精华液 | 人人搞人人搞 | 国产va饥渴难耐女保洁员在线观看 | www.com黄色 | 日韩欧美高清一区二区 | 六月丁香婷婷在线 | 国产小视频免费在线网址 | 天天综合网国产 | 久久免费视频网站 | 欧美狠狠色 | 女人18毛片a级毛片一区二区 | 天堂网在线视频 | 91精品久久久久久久久 | 嫩模bbw搡bbbb搡bbbb | 国产中文字幕在线 | 六月色丁香 | 国产精品久久久久久电影 | 首页av在线 | 91精品视频免费看 | 99久久精品视频免费 | 午夜精品福利一区二区三区蜜桃 | 久久久人| 国产女人40精品一区毛片视频 | 成人国产精品一区 | 国产日产精品一区二区三区四区 | 高清日韩一区二区 | 日韩在线播放欧美字幕 | 91传媒视频在线观看 | www.99av| 在线视频国产区 | 五月婷婷丁香六月 | 免费看黄在线看 | 美女亚洲精品 | 国产免费观看高清完整版 | 色婷婷88av视频一二三区 | 夜夜操狠狠干 | 婷婷丁香激情网 | 久久精品艹 |