天天看點

struts2知識點總結doc文檔

Struts2  屬于業務邏輯層架構  底層封裝的是Servlet

                  Servlet用于接收請求和處理響應的一套邏輯過程

                   隻能用于web項目  web project 

架構學習特點:

側重整體流程步驟,再熟悉細節

架構隻要會用就行,至于底層無須了解或适當了解就行

每個架構某個功能子產品都需要一定的jar包支援 ,再使用中隻需調用響應jar包中響應類的相應方法

Api文檔來查找

架構各個類之間的設計方式  其實就是設計模式的内容

設計模式就相當與戰略戰術設計方式 三十六計

架構比如就是陣法

Struts2架構 和struts不同  ,很大的差別

Struts2實在struts和webwork在基礎上發展起來的

下載下傳struts2的驅動包 在官網

·https://struts.apache.org/

  • struts-2.5.16-all.zip (65MB) [PGP] [MD5]   下載下傳這個

下載下傳好之後解壓 lib目錄底下所有的jar包  太多

Apps目錄底下是所有的例子

    取某個例子解壓下 取裡面的lib所有的驅動包 大概13個左右

搭建架構:

1. 建立web project ,導入jar包

直接複制粘貼到wen-inf下的lib目錄裡面

2. 在web.xml裡面配置struts2的核心過濾器

    <filter>

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

        <filter-class>

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

</filter-class>

    </filter>

    <filter-mapping>

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

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

    </filter-mapping>

/*  表示過濾所有 ,表示所有的邏輯都經過struts2過濾器,進入到struts2架構裡面

3.  建立業務邏輯層的業務類

Struts2裡面的基本單元就是Action,Action就是對servlet的封裝

 建立方式:

a. 實作Action接口

 publicclass HelloAction implements Action{

  @Override

  public String execute() throws Exception {

     return"success";

  }

}

b.  繼承ActionSupport類

   publicclass HelloActionextends ActionSupport{

 @Override

    public String execute() throws Exception {

          return"success";

    }

}

    實作接口和繼承都能建立Action,但是ActionSupport裡面可以實作校驗的功能

因為ActionSupport同時實作了Action, Validateable

  Action裡面預設的執行方式是execute()方法

4. 配置Action  在struts.xml檔案裡面配置

注意: struts.xml一班寫在src根目錄底下 ,命名最好寫成struts.xml

建立struts.xml時候必須引入dtd檔案 ,否則不會自動提示

<struts>

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

        <action name="hello"class="com.mypack.struts.HelloAction">

            <result name="success">index.jsp</result>

        </action>

    </package>

</struts>

    Package标簽:表示action所屬的包,可以有多個package,但是每個package name值時唯一的

    Namespace代表浏覽器通路該包底下的action路徑問題

        Namespace=”/”  http://localhost:8080/項目名/hello

        Namespace=”aaa”  http://localhost:8080/項目名/aaa/hello

Extends 表示繼承某個配置檔案跟java繼承概念差不多,一般值都寫成 struts-default

Action配置:

    Name表示的是該action的name值,表示通路該action時的資訊,不能重複

    Class表示對應的包名+類名  對應的action類

    Method:方法名  表示執行某類底下的某個方法不配表示執行預設方法 execute()

    Result:name值表示該action方法執行最終的傳回值,如果是該傳回值,進入到相應的頁面或者邏輯

            Type屬性值:

dispatcher: 請求轉發沒有配置預設值為dispatcher,請求轉發到另外頁面

redirect:  重定向  重定向到另外的一個頁面

redirectAction:重定向到另外一個Action

通過浏覽器url來通路該action  通過該Action配置的name值來通路:

http://ip位址:端口号/項目名 /action标簽的name屬性值

常用配置:

  Struts接口裡面内置常量:

  Action接口中定義了一些常量屬性:           

public static final String ERROR "error"
public static final String INPUT "input"
public static final String LOGIN "login"
public static final String NONE "none"
public static final String SUCCESS "success"

    當某個action傳回值是上面常量值時,就可以互相替代

        Return“success”  可以寫成 return SUCCESS;

Return  “input”     可以寫成 return INPUT;

    Struts.xml裡面配置的常量資訊

        <constant name=" "   value="">

在struts2中,配置檔案需要配置不少常量,其中常用的如下:

<constant name="struts.i18n.encoding" value="UTF-8"/>

struts.i18n.encoding:這個常量會作用于setCharacterEncoding方法和freemarker,velocity(這兩種為模闆技術)的輸出,POST方式送出的資料,可以交由這個常量去設定它的編碼格式。

<constant name="struts.configuration.xml.reload" value="true"/>

struts.configuration.xml.reload:當struts的配置檔案修改後,系統是否自動重新加載該檔案,預設值為false,開發階段最好打開,開發完後再關閉。

<constant name="struts.serve.static.browserCache" value="false"/>

truts.serve.static.browserCache:設定浏覽器是否緩存,預設值為true,開發階段最好關閉。

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

struts.devMode:列印出更詳細的錯誤資訊,用于排錯,主要用于開發模式,做好了再關閉,在copysturts-blank中的stuts.xml中,裡面有這常量。

<constant name="struts.ui.theme" value="simple"/>

struts.ui.theme:标簽所使用的額外的自定義樣式,不太實用,最好設定成simple,且一般都不用到struts 2的标簽庫。

<constant name="struts.objectFactory" value="spring"/>

struts.objectFactory:與spring繼承時,指定由spring負責action對象的建立,在繼承spring時,會用到這個常量.

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

struts.enable.DynamicMethodInvocation:該屬性設定struts2是否支援動态方法調用,該屬性的預設值是true,如果需要關閉動态方法調用,則可設定該屬性為false,

注意:DMI的調用方式Struts2的文檔不建議使用,且下載下傳的struts2-2-X.jar中,它的sturts-blank中sturts.xml有這常量,并設其值為false。

<constant name="struts.multipart.maxSize" value="20971520"/>

struts.multipart.maxSize:設定上傳檔案的總大小限制,老楊說過它上傳無法傳太大的,可能是這裡沒設定。

注意:用HTML方式來上傳是無法上傳太大的檔案,很不穩定,可以說失敗率超高。解決方法是用socket編個插件用于上傳,而不能直接依賴。

<constant name="struts.action.extension" value="do,lz"/>

struts.action.extension:修改字尾名,預設是action,可以修改。若值有多個,可用逗号隔開,這對于常量的值都通用。

<constant name="struts.custom.i18n.resources" value="baseName"/>

struts.custom.i18n.resources:用于配置國際化全局XML資源檔案,須在指明該全局資源檔案的基礎名。

<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>

struts.ognl.allowStaticMethodAccess:如其名,用于設定OGNL是否允許靜态方法通路,預設為false。

方法調用:

     publicclass HelloActionextends ActionSupport{

     @Override

     public String execute() throws Exception {

              return"success";

     }  

     public String login(){

         returnSUCCESS;

     }

}

Struts.xml

<struts>

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

         <action name="hello"class="com.mypack.struts.HelloAction">

              <result name="success">index.jsp</result>

         </action>

         <action name="hello2"class="com.mypack.struts.HelloAction">

              <result name="success">index.jsp</result>

         </action>

         <action name="hello3"class="com.mypack.struts.HelloAction" method="login">

              <result name="success">index.jsp</result>

         </action>

     </package>   

</struts>

1. 沒有配置method屬性, 直接通路action,表示執行的是預設的方法execute()

http://localhost:8080/項目名/hello

執行的是execute()方法

2. 沒有配置method屬性,通路某個方法    action!方法名

http://localhost:8080/項目名/hello2!login

執行的是login方法

3. 配置method屬性,通路action就是通路配置的method方法

http://localhost:8080/項目名/hello3

執行的是login方法

4. 通配符 

publicclass HelloAction extends ActionSupport{

      public String addStu(){

           returnSUCCESS;

      }

      public String delStu(){

            returnSUCCESS;

      }

}

<struts>

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

           <!--

           <action name="add"class="com.mypack.struts.HelloAction" method="addStu">

                 <result name="success">index.jsp</result>

           </action>       

           <action name="del"class="com.mypack.struts.HelloAction" method="delStu">

                 <result name="success">index.jsp</result>

           </action> 

           -->

           <!--通配符  下面這種效果就等效于上面效果  -->         

           <action name="{1}" class="com.mypack.struts.HelloAction" method="{1}Stu">

                 <result name="success">index.jsp</result>

           </action>       

      </package>

</struts>

<struts>

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

           <!--

           <action name="addStu" class="com.mypack.struts.StuAction" method="addStu">

                 <result name="success">index.jsp</result>

           </action>       

           <action name="delStu"class="com.mypack.struts.StuAction" method="delStu">

                 <result name="success">index.jsp</result>

           </action> 

           <action name="addTea"class="com.mypack.struts.TeaAction" method="addTea">

                 <result name="success">index.jsp</result>

           </action>       

           <action name="delTea"class="com.mypack.struts.TeaAction" method="delTea">

                 <result name="success">index.jsp</result>

           </action>

           -->

           <!--通配符下面這種效果就等效于上面效果-->     

           <action name="{1}{2}"class="com.mypack.strut.{2}Action" method="{1}{2}">

                 <result name="success">index.jsp</result>

           </action>       

      </package>

</struts>

Struts2校驗:

1. Validate()方法

2. ValidateXXX()方法

publicclass HelloAction extends ActionSupport{

      public String login(){

           returnSUCCESS;

      }

      publicvoid validate(){

           System.out.println("校驗的邏輯");

      }

            publicvoid validateLogin() {

           //手動背景校驗  隻校驗login方法

      }

}

<action name="login" class="com.mypack.struts.HelloAction"method="login">

              <result name="success">index.jsp</result>

              <!-- 校驗的name值為input-->

              <result name="input">login.jsp</result>

     </action>

前台頁面如果要看到錯誤資訊:

 頁面引入Struts标簽 login.jsp

<form action="login">          
使用者名:                <input type="text" id="username" name="user.username"/><s:fielderror fieldName="user.username"></s:fielderror><br>      
<input type="submit" value="login" />      

3. 校驗架構

Struts2内置了校驗架構,通過對應關系起作用

a.       校驗規則配置檔案與Action類必須在同一檔案夾下

b.校驗規則配置檔案檔案名必須是

Action類名-validation.xml

Action類名-别名-validation.xml

c. 别名對應的是Action配置中name屬性的值 ,也就是隻校驗一個action中的某個方法。

<!DOCTYPE validators PUBLIC       
        "-//OpenSymphony Group//XWork Validator 1.0.2//EN"       
<validators>      
</field>      
</validators>      
驗證規則:      

required:必填校驗器

requiredstring:必填字元串校驗器

int:整數校驗器

double:雙精度浮點數校驗器

date:日期校驗器

expression:表達式校驗器

fieldexpression:字段表達式校驗器

email:電子郵件校驗器

url:網址校驗器

visitor:Visitor校驗器

conversion:轉換校驗器

stringlength:字元串長度校驗器

regex:正規表達式校驗器

例子:

</validators>      
</validators>      
</validators>      
</validators>       
</validators>      
</validators>      
</validators>      

Struts标簽:

 1. jsp引入struts2标簽庫

<%@ tagliburi="/struts-tags" prefix="s" %>

2. 使用

3. 表單标簽

4. 表單标簽的通用屬性

屬性名 主題 資料類型 說明
title simple String 設定表單元素的title屬性
disabled simple String 設定表單元素是否可用
label xhtml String 設定表單元素的label屬性
labelPosition xhtml String 設定label元素的顯示位置,可選值 : top 和 left(預設)
name simple String 設定表單元素的name屬性,與Action中的屬性名對應
value simple String 設定表單元素的值
cssClass simple String 設定表單元素的class
cssStyle simple String 設定表單元素的style屬性
required xhtml Boolean 設定表單元素為必填項
requiredpositon xhtml String 設定必填标記(預設為*)相對于label元素的位置,可選值:left 和right(預設)
tabindex simple String 設定表單元素的tabindex屬性

5.  

6. <form>标簽的常用屬性及描述

屬性名 是否必填 類型 說明
action String 指定送出時對應的action,不需要action字尾
enctype String HTML表單enctype屬性
method String HTML表單method屬性
namespace String 所送出action的命名空間

7.  

8. <s:submit>标簽的常用屬性

屬性名 是否必填 類型 說明
action String 指定送出時對應的action
method String 指定action中調用的方法

9.  

10.<s:password>标簽的常用屬性說明

屬性名 說明
Name 用于指定密碼輸入框的名稱
Size 用于指定密碼輸入框的顯示寬度,以字元數為機關
MaxLength 用于限定密碼輸入框的最大輸入字元串個數
showPassword 是否顯示初始值,即使顯示也仍為密文顯示,用掩碼代替

11. 

12.<s:radio>标簽的屬性及說明

屬性名 是否必填 類型 說明
List Cellection、Map、Enmumeration、Iterator,array 用于生成單選框中的集合
listKey String 指定集合對象中的哪個屬性作為選項的value
listValue String 指定集合對象中的哪個屬性作為選項的内容

13. 

14.<s:checkboxlist>标簽的常用屬性及說明

屬性名 是否必填 類型 說明
name String 指定該元素的name
list Cellection、Map、Enmumeration、Iterator,array 用于生成多選框的集合
listKey String 生成checkbox的value屬性
listValue String 生成checkbox後面顯示的文字

15. 

16.select标簽的常用屬性及說明

屬性名 是否必填 類型 說明
list Cellection、Map、Enmumeration、Iterator,array 用于生成下拉框的集合
listKey String 生成選項的value屬性
listValue Strmg 生成選項的顯示文字
headerKey String 在所有的選項前再加額外的一個選項作為其标題的value值
headerValue String 顯示在頁面中header選項的内容
Multiple Boolean 指定是否多選,預設為 false
emptyOption Boolean 是否在标題和真實的選項之間加一個空選項
size Int 下拉框的高度,即最多可以同時顯示多少個選項

Ognl表達式取值:

    通過<s:debug>标簽來觀察取值是否使用#

    正常點開debug标簽會有上下兩部分 ,上面部分為 屬性和對應的值;下面部分是鍵值對類型 ,map集合

    如果取屬性值 直接取 不用加#     <s:property value=”屬性”/>

    如果取下面鍵值對值,需在前面加# <s:property value=”#鍵”/>

Struts2裡面的傳值取值:

    前端頁面和背景邏輯的資料會自動對接,無須自己手動處理

    要求:

        通過屬性來對接的,是以屬性必須有對應的getter,setter方法

        1前端

            name=”username”  name=”password”;

        背景Action

            Stringusername;

            Stringpassword;

        必須對應起來,并且getter,setter方法

        2前端

            name=”user.username”  name=”user.password”;

        實體類

        classUser{

            Stringusername;

            Stringpassword;

            //getter.setter方法

        }

        Action:

            屬性: User user;

            //getter,setter方法

3 前端

            name=”username”  name=”password”;

        實體類

        classUser{

            Stringusername;

            Stringpassword;

            //getter.setter方法

        }

        ClassUserAction extends ActionSupport implements ModelDriven<User>{

            //屬性:

 User user;

            //getter,setter方法

            publicUser getModel(){

                returnuser;

}

        }

攔截器:

    自定義過濾器:

     1 自定義一個實作Interceptor接口(或者繼承自AbstractInterceptor)的類。

public class CheckLoginInterceptorextends AbstractInterceptor {

   public String intercept(ActionInvocation actionInvocation) throwsException {

        if (滿足條件) {

            return actionInvocation.invoke();//放行

        }

            return login.jsp;//不滿足,傳回登入頁面

          }

}

2 在strutx.xml中注冊上一步中定義的攔截器。

      注冊攔截器

<interceptors>

            <interceptor name="loginInter"class="com.jpleasure.teamware.util.CheckLoginInterceptor"/>

</interceptors>

3 哪個Action需要被攔截直接配置就行了

<action name="login"class="xx.xx.xx.UserAction" method=”login”>

              <result name="success">index.jsp</result>

           <interceptor-refname=" loginInter "/>

  </action>

國際化:

    參考百度,直接搜

上傳和下載下傳:

Ajax:

    異步處理: jquery裡面調用ajax 背景使用struts2來實作

    其實跟servlet一樣,隻不過背景用action實作

Jquery easyUI:

    封裝好的前端架構 

    參考官網,官方文檔

http://www.jeasyui.net/