筆記之_java整理struts

weixinAPI微信對接
Struts標籤庫
Xml的地址:http://blog.csdn.net/xiazdong/article/details/7293177
Struts注入優先考慮modelDirven中找,其次纔是setter方法
Value注入值,ref注入對象
Jsp實時編譯的,freemarker是預編譯的
EL表達式只能取session、application、request的值
將String[]轉換爲List<String>
    Arrays.<String>alist(數組對象)
Struts中上傳文件大小不得大於2mb
Struts中xml有繼承的概念
攔截器方法在action執行前或以後執行,動態代理的原理,ref引用對象
Struts中沒有404錯誤,通常爲struts的異常模板,除非轉發頁面時沒有找到頁面
實現struts中action的方法:
    1.繼承actionsupport
    2.實現action接口,重寫String excute()方法
Struts2執行順序:
    Struts-default---struts-plugin--struts.xml
使用Struts 2 開發程序的基本步驟
加載Struts2 類庫
配置web.xml文件
開發視圖層頁面
開發控制層Action
配置struts.xml文件
部署、運行項目
struts2 動做配置
<package  name=」惟一的包」 namespace=」/」  extends=」struts-default」>
     定義動做
<action  name=」虛擬地址」  class=」交給哪一個類來處理」 method=」哪一個方法」>
           <result name=」哪一個方法返回的字符串」
type=」轉發dispatcher,重定向urlredirect,重定向action (redirectAction)」
>  
                  哪一個頁面顯示
</result>
</action>
</package>

1、實現struts中的action有幾種方法?
1)、  繼承ActionSupport
2)、  實現Action 接口  -->重寫 String execute()








2、動態調用
        做用:減小action數量
        使用:actionName!methodName.action
        禁用:將屬性struts.enable.DynamicMethodInvocation設置爲false
若是使用動態調用就不能使用通配符
public class UserAction implements Action{//user!login.action,調用UserAction的login()方法
        ……
        public String login(){…..}
public String register(){…..}
}
<action name="user" class="com.xxxx.web.UserAction" >
        <result name="login">/page/manage.jsp</result>
        …………
</action>
3、設定默認action,用來顯示用戶輸入錯誤action地址
        配置默認Action
            沒有Action匹配請求時,默認Action將被執行
            經過<default-action-ref…../>元素配置默認action
<struts>
    <default-action-ref  name=」defaultAction」/>
    <package  name=」defaultextends=」struts-default」>
        <action  name=」defaultAction」>
<result>error.jsp</result>
</action>
            </package >
<struts>

4、配置全局的結果集
    全局結果
        實現同一個包中多個action共享一個結果
<struts>
    <default-action-ref  name=」defaultAction」/>
    <package  name=」defaultextends=」struts-default」>
        <global-results>
<result  name=」 error」>/error.jsp</result>
<result  name=」login」  type=」redirect」>/login.jsp</result>
</global-results>
…..省了action的配置
            </package >
<struts>




5、struts2原型圖
用戶請求-->ActionMapper(Action映射)-->FilterDispatcher(轉發)-->ActionProxy(Action代理)
-->讀取配置文件-->比對struts.xml中配置 -->ActionInvocation(Action核心調度器)
-->通過層層的(Interceptor)過濾-->執行Action中的method方法-->方法執行完後返回Result結果-->根據返回結果讀取頁面(Template)-->再一次通過層層(Interceptor)過濾-響應給用戶
 


6、攔截器和攔截器棧
  攔截器,只能有一個功能
    <interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>
  
  攔截器棧,  是由一個或者多個攔截器組成的一個集合  
  <interceptor-stack name="basicStack">
                <interceptor-ref name="exception"/>
                <interceptor-ref name="servletConfig"/>          
                <interceptor-ref name="deprecation"/>
  </interceptor-stack>

7、自定義攔截器
1)、繼承 AbstractInterceptor
2)、重寫  intercept 方法
         Invocation.invoke();  執行你定義的action中的方法
3)、在struts.xml中去配置

    <!-- 配製全局的包,讓其它packet繼承這個包 -->
    <package name="commonPackage" namespace="/" extends="json-default"
        abstract="true">
        <!-- 定義攔截器 -->
        <interceptors>
            <interceptor name="timeSpeend"
                class="com.wisezone.interceptor.TimeSpeedInterceptor"></interceptor>
            <!-- 定義攔截器棧,重寫系統strtus-default.xml中默認的 -->
            <interceptor-stack name="myDefaultStack">
                <!-- 系統默認的 -->
                <interceptor-ref name="defaultStack"></interceptor-ref>
                <!-- 我本身的 -->
                <interceptor-ref name="timeSpeend"></interceptor-ref>
            </interceptor-stack>        </interceptors>
        <!-- 更新全局的攔截器 -->
        <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>    
    </package>

<!--約定大於配置 -->
<packagename="FlinkTypePackage" namespace="/admin" extends="commonPackage">
</package>

8、文件上傳命名規則 
private File upload;                     
private String uploadContentType;
private String uploadFileName;

頁面:<input  type=」file」  name=」upload」/>
9、自定義類型轉換
public class DateConverter extends DefaultTypeConverter
ArrayConverter
ListConverter
DateConverter
NumberConverter
StringConverter



10、strtus2值棧
 

要訪問ValueStack就必需要與struts中的標籤一塊兒用,它不能單獨使用
User  (userName,password)  -->存在值棧中   private User  user;  //getter/setter方法
 <s:property   value=」user.userName」 />
<s:textfield name="user.userName" id="userName"></s:textfield>
<s:password name="user.password" id="password"></s:password >
 

日期標籤:
    語法:
        <s:date  format=」format」  nice =」true|false」  name=」name」  id=」id」>
            ……….
        </s:date>
        Formate屬性:指定格式進行日期格式化
    
Nice屬性:該屬性只有true和false兩個值用於指定是否輸出指定日期與當前時間的時差,默認爲false
        Name屬性:表示當前須要格式化的日期
        Id屬性:表示引用該元素的id值
11、struts2驗證規則
        void  validate方法名()   對某一個動做進行驗證
        void  validate()          全部的動做進行驗證  ( 不會重寫)
    public void saveInfo(){}
    public void validateSaveInfo(){
        if(StringUtil.isEmpty(this.flinkType.getTypeName)){
            super.addFiledError(「typeName」,」分類名稱不能爲空」);
}
}
12、國際化
 
13、保證新增和修改保存 惟一,不容許 重複提交
重複提交發生時機:
    1)、網絡慢的時候   
    2)、提交失敗了報錯, 按返回上一步,再一次提交
    
    token 令牌機制
<package name="filePackage" namespace="/admin" extends="commonPackage">
        <!-- 定義一個通配查詢動做 admin/admin_angular1.action -->
        <action name="file_upload" class="fileUploadTestAction" method="upload">
            <!-- 重複提交,開始token機制 -->
            <interceptor-ref name="myDefaultStack"></interceptor-ref>
            <interceptor-ref name="token"></interceptor-ref>
            <result name="success">/admin/flinktype/file.jsp</result>
            <result name="invalid.token">/admin/重複提交.jsp</result>
        </action>
    </package>
14、struts2類型轉換器
struts2  TypeConvertor 博客園

15、freemarker 模板 框架
                模板     
頁面:純html  ${name}    中間:Freemarker:velocity    後臺:name=」張三」
16、Freemarker的使用方法
第一步:把freemarker的jar包添加到工程中
第二步:freemarker的運行不依賴web容器,能夠在java工程中運行。建立一個測試方法進行測試。
第三步:建立一個Configration對象,該對象負責管理Freemarker的模板加載路徑,負責生成模板實例
第四步:告訴config對象模板文件存放的路徑。
第五步:設置config的默認字符集。通常是utf-8
第六步:從config對象中得到模板對象。須要制定一個模板文件的名字。
第七步:建立模板須要的數據集。能夠是一個map對象也能夠是一個pojo,把模板須要的數據都放入數據集。數據模型就是一個MAP集合
第八步:建立一個Writer對象,指定生成的文件保存的路徑及文件名。
第九步:調用模板對象的process方法生成靜態文件。須要兩個參數數據集和writer對象。
第十步:關閉writer對象。
17、
FreeMarker的模板文件並不比HTML頁面複雜多少,FreeMarker模板文件主要由以下4個部分組成:
1,文本:直接輸出的部分
2,註釋:<#-- ... -->格式部分,不會輸出
3,插值:即${...}或#{...}格式的部分,將使用數據模型中的部分替代輸出
4,FTL指令:FreeMarker指定,和HTML標記相似,名字前加#予以區分,不會輸出
18、freemarker通用插值:
FreeMarker的插值有以下兩種類型:1,通用插值${expr};2,數字格式化插值:#{expr}或#{expr;format}
1、通用插值
對於FreeMarker的通用插值,又能夠分爲如下4種狀況:
1. FreeMarker插值結果爲字符串值:直接輸出表達式結果
2. FreeMarker插值結果爲數字值:根據默認格式(由#setting指令設置)將表達式結果轉換成文本輸出.可使用內建的字符串函數格式化單個插值,以下面的例子:
<#settion number_format="currency"/>
<#assign answer=42/>
${answer}
${answer?string} <#-- the same as ${answer} -->
${answer?string.number}
${answer?string.currency}
${answer?string.percent}
${answer}
輸出結果是:
$42.00
$42.00
42
$42.00
4,200%
3. FreeMarker插值結果爲日期值:根據默認格式(由#setting指令設置)將表達式結果轉換成文本輸出.可使用內建的字符串函數格式化單個插值,以下面的例子:
${lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")}
${lastUpdated?string("EEE, MMM d, ''yy")}
${lastUpdated?string("EEEE, MMMM dd, yyyy, hh:mm:ss a '('zzz')'")}
輸出結果是:
2008-04-08 08:08:08 Pacific Daylight Time
Tue, Apr 8, '03
Tuesday, April 08, 2003, 08:08:08 PM (PDT)
4. FreeMarker插值結果爲布爾值:根據默認格式(由#setting指令設置)將表達式結果轉換成文本輸出.可使用內建的字符串函數格式化單個插值,以下面的例子:
<#assign foo=true/>
${foo?string("yes", "no")}
輸出結果是:
yes
2、數字格式化插值
關於FreeMarker數字格式化插值可採用#{expr;format}形式來格式化數字,其中format能夠是:
mX:小數部分最小X位
MX:小數部分最大X位
以下面的例子:
<#assign x=2.582/>
<#assign y=4/>
#{x; M2} <#-- 輸出2.58 -->
#{y; M2} <#-- 輸出4 -->
#{x; m2} <#-- 輸出2.6 -->
#{y; m2} <#-- 輸出4.0 -->
#{x; m1M2} <#-- 輸出2.58 -->
#{x; m1M2} <#-- 輸出4.0 -->
3、集合
集合以方括號包括,各集合元素之間以英文逗號","分隔,看以下的例子:
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x>
${x}
</#list>
輸出結果是:
星期一
星期二
星期三
星期四
星期五
星期六
星期天
4、If指令
這是一個典型的分支控制指令,該指令的做用徹底相似於Java語言中的if,if指令的語法格式以下:
<#if condition>...
<#elseif condition>...
<#elseif condition>...
<#else> ...
</#if>

例子以下:
<#assign age=23>
<#if (age>60)>老年人
<#elseif (age>40)>中年人
<#elseif (age>20)>青年人
<#else> 少年人
</#if>
輸出結果是:青年人
4.2 switch , case , default , break指令
這些指令顯然是分支指令,做用相似於Java的switch語句,switch指令的語法結構以下:
<#switch value>
<#case refValue>...<#break>
<#case refValue>...<#break>
<#default>...
</#switch>
5、字符串使用的內建函數:
html : 字符串中全部的特殊 HTML 字符都須要用實體引用來代替(好比 < 代替 &lt; )
cap_first :字符串的第一個字母變爲大寫形式
lower_case :字符串的小寫形式
upper_case :字符串的大寫形式
trim :去掉字符串首尾的空格
6、Struts2解析FreeMarker模板中變量的順序以下: 
1,FreeMarker模板內建的變量;
2,ValueStack中的變量;
3,ActionContext中的變量;
4,HttpServletRequest中的屬性;
5,HttpSession中的屬性;
6,ServletContext範圍的屬性. 







type 全部類型:(在struts2-core.jar/struts-default.xml中)
Type 類型值        做用說明    
chain            用來處理Action 鏈
dispatcher(默認值)    用來轉向頁面,一般處理JSP
redirect        重定向到一個URL
redirectAction        重定向到一個 Action
plainText        顯示源文件內容,如文件源碼
freemarker        處理 FreeMarker 模板
httpheader        控制特殊 http 行爲的結果類型
stream            向瀏覽器發送 InputSream 對象,
一般用來處理文件下載,還可用於返回 AJAX 數據
velocity        處理 Velocity 模板
xslt               處理 XML/XLST 模板
Struts在值棧:
<action name="paymentmanagement/*_*" class="{1}Action" method="{2}">
               <interceptor-ref name="modelDriven">
                    <param name="refreshModelBeforeResult">true</param>
             </interceptor-ref> 
             <interceptor-ref name="defaultStack"></interceptor-ref> 
           <result name="{2}" type="freemarker">/WEB-INF/admin/paymentmanagement/{1}_{2}.html</result> 
       </action>
相關文章
相關標籤/搜索