亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Struts2開發(fā) 基本配置與類型轉(zhuǎn)換

 更新時間:2013年04月11日 16:53:37   作者:  
本篇文章,小編將為大家介紹關(guān)于Struts2開發(fā) 基本配置與類型轉(zhuǎn)換,有需要的朋友可以參考一下

一、Action配置中的各項默認(rèn)值

<package name="csdn" namespace="/test" extends="struts-default">
        <action name="helloworld" class="cn.csdn.action.HelloWorldAction" method="execute" >
 <result name="success">/WEB-INF/page/hello.jsp</result>
        </action>
  </package>
1>如果沒有為action指定class,默認(rèn)是ActionSupport。
2>如果沒有為action指定method,默認(rèn)執(zhí)行action中的execute() 方法。
3>如果沒有指定result的name屬性,默認(rèn)值為success。


二、Action中result的各種轉(zhuǎn)發(fā)類型

<action name="helloworld" class="cn.csdn.action.HelloWorldAction">
 <result name="success">/WEB-INF/page/hello.jsp</result>
</action>
result配置類似于struts1中的forward,但struts2中提供了多種結(jié)果類型,常用的類型有: dispatcher(默認(rèn)值)、 redirect 、 redirectAction 、 plainText。

下面是redirectAction 結(jié)果類型的例子,如果重定向的action中同一個包下:
<result type="redirectAction">helloworld</result>
如果重定向的action在別的命名空間下:
<result type="redirectAction">
 <param name="actionName">helloworld</param>
 <param name="namespace">/test</param>
</result>
plaintext:顯示原始文件內(nèi)容,例如:當(dāng)我們需要原樣顯示jsp文件源代碼 的時候,我們可以使用此類型。
<result name="source" type="plainText ">
 <param name="location">/xxx.jsp</param>
 <param name="charSet">UTF-8</param><!-- 指定讀取文件的編碼 -->
</result>
在result中還可以使用${屬性名}表達(dá)式訪問action中的屬性,表達(dá)式里的屬性名對應(yīng)action中的屬性。如下:
<result type="redirect">view.jsp?id=${id}</result>
 

三、多個Action共享一個視圖--全局result配置

當(dāng)多個action中都使用到了相同視圖,這時我們應(yīng)該把result定義為全局視圖。struts1中提供了全局forward,struts2中也提供了相似功能:
<package ....>
 <global-results>
  <result name="message">/message.jsp</result>
 </global-results>
</package>

四、為Action的屬性注入值

Struts2為Action中的屬性提供了依賴注入功能,在struts2的配置文件中,我們可以很方便地為Action中的屬性注入值。注意:屬性必須提供setter方法。
public class HelloWorldAction{
 private String savePath;

 public String getSavePath() {
  return savePath;
 }
 public void setSavePath(String savePath) {
  this.savePath = savePath;
 }
       ......
}

<package name="csdn" namespace="/test" extends="struts-default">
 <action name="helloworld" class="cn.csdn.action.HelloWorldAction" >
  <param name="savePath">/images</param>
  <result name="success">/WEB-INF/page/hello.jsp</result>
 </action>
</package>
上面通過<param>節(jié)點為action的savePath屬性注入“/images”


五、指定需要Struts 2處理的請求后綴

前面我們都是默認(rèn)使用.action后綴訪問Action。其實默認(rèn)后綴是可以通過常量”struts.action.extension“進(jìn)行修改的,例如:我們可以配置Struts 2只處理以.do為后綴的請求路徑:

<?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.action.extension" value="do"/>
</struts>

如果用戶需要指定多個請求后綴,則多個后綴之間以英文逗號(,)隔開。如:
 <constant name="struts.action.extension" value="do,go"/>


六、細(xì)說常量定義

常量可以在struts.xml或struts.properties中配置,建議在struts.xml中配置,兩種配置方式如下:
在struts.xml文件中配置常量
<struts>
    <constant name="struts.action.extension" value="do"/>
</struts>

在struts.properties中配置常量
struts.action.extension=do

因為常量可以在下面多個配置文件中進(jìn)行定義,所以我們需要了解struts2加載常量的搜索順序:
struts-default.xml
struts-plugin.xml
struts.xml
struts.properties
web.xml
如果在多個文件中配置了同一個常量,則后一個文件中配置的常量值會覆蓋前面文件中配置的常量值.


七、常用的常量介紹

<!-- 指定默認(rèn)編碼集,作用于HttpServletRequest的setCharacterEncoding方法 和freemarker 、velocity的輸出 -->
    <constant name="struts.i18n.encoding" value="UTF-8"/>
    <!-- 該屬性指定需要Struts 2處理的請求后綴,該屬性的默認(rèn)值是action,即所有匹配*.action的請求都由Struts2處理。
    如果用戶需要指定多個請求后綴,則多個后綴之間以英文逗號(,)隔開。 -->
    <constant name="struts.action.extension" value="do"/>
    <!-- 設(shè)置瀏覽器是否緩存靜態(tài)內(nèi)容,默認(rèn)值為true(生產(chǎn)環(huán)境下使用),開發(fā)階段最好關(guān)閉 -->
    <constant name="struts.serve.static.browserCache" value="false"/>
    <!-- 當(dāng)struts的配置文件修改后,系統(tǒng)是否自動重新加載該文件,默認(rèn)值為false(生產(chǎn)環(huán)境下使用),開發(fā)階段最好打開 -->
    <constant name="struts.configuration.xml.reload" value="true"/>
    <!-- 開發(fā)模式下使用,這樣可以打印出更詳細(xì)的錯誤信息 -->
    <constant name="struts.devMode" value="true" />
     <!-- 默認(rèn)的視圖主題 -->
    <constant name="struts.ui.theme" value="simple" />
    <!– 與spring集成時,指定由spring負(fù)責(zé)action對象的創(chuàng)建 -->
    <constant name="struts.objectFactory" value="spring" />
 <!–該屬性設(shè)置Struts 2是否支持動態(tài)方法調(diào)用,該屬性的默認(rèn)值是true。如果需要關(guān)閉動態(tài)方法調(diào)用,則可設(shè)置該屬性為false。 -->
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
 <!--上傳文件的大小限制-->
<constant name="struts.multipart.maxSize" value=“10701096"/>

八、為應(yīng)用指定多個struts配置文件

在大部分應(yīng)用里,隨著應(yīng)用規(guī)模的增加,系統(tǒng)中Action的數(shù)量也會大量增加,導(dǎo)致struts.xml配置文件變得非常臃腫。為了避免struts.xml文件過于龐大、臃腫,提高struts.xml文件的可讀性,我們可以將一個struts.xml配置文件分解成多個配置文件,然后在struts.xml文件中包含其他配置文件。下面的struts.xml通過<include>元素指定多個配置文件:

<?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>
 <include file="struts-user.xml"/>
 <include file="struts-order.xml"/>
</struts>

通過這種方式,我們就可以將Struts 2的Action按模塊添加在多個配置文件中。


九、動態(tài)方法調(diào)用

如果Action中存在多個方法時,我們可以使用!+方法名調(diào)用指定方法。如下:
public class HelloWorldAction{
 private String message;
 ....
 public String execute() throws Exception{
  this.message = "我的第一個struts2應(yīng)用";
  return "success";
 }

 public String other() throws Exception{
  this.message = "第二個方法";
  return "success";
 }
}
假設(shè)訪問上面action的URL路徑為: /struts/test/helloworld.action
要訪問action的other() 方法,我們可以這樣調(diào)用:
/struts/test/helloworld!other.action
如果不想使用動態(tài)方法調(diào)用,我們可以通過常量struts.enable.DynamicMethodInvocation關(guān)閉動態(tài)方法調(diào)用。
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>


十、使用通配符定義action

<package name=“csdn” namespace="/test" extends="struts-default">
 <action name="helloworld_*" class="cn.csdn.action.HelloWorldAction" method="{1}">
  <result name="success">/WEB-INF/page/hello.jsp</result>
 </action>
</package>
public class HelloWorldAction{
 private String message;
 ....
 public String execute() throws Exception{
  this.message = "我的第一個struts2應(yīng)用";
  return "success";
 }

 public String other() throws Exception{
  this.message = "第二個方法";
  return "success";
 }
}

要訪問other()方法,可以通過這樣的URL訪問:/test/helloworld_other.action

十一、接收請求參數(shù)

采用基本類型接收請求參數(shù)(get/post)
在Action類中定義與請求參數(shù)同名的屬性,struts2便能自動接收請求參數(shù)并賦予給同名屬性。
請求路徑: http://localhost:8080/test/view.action?id=78
public class ProductAction {
      private Integer id;
      public void setId(Integer id) {//struts2通過反射技術(shù)調(diào)用與請求參數(shù)同名的屬性的setter方法來獲取請求參數(shù)值
             this.id = id;
      }
      public Integer getId() {return id;}
  }
采用復(fù)合類型接收請求參數(shù)
請求路徑: http://localhost:8080/test/view.action?product.id=78
 public class ProductAction {
   private Product product;
   public void setProduct(Product product) {  this.product = product;  }
   public Product getProduct() {return product;}
}
Struts2首先通過反射技術(shù)調(diào)用Product的默認(rèn)構(gòu)造器創(chuàng)建product對象,然后再通過反射技術(shù)調(diào)用product中與請求參數(shù)同名的屬性的setter方法來獲取請求參數(shù)值。


十二、類型轉(zhuǎn)換的意義

對于一個智能的MVC框架而言,不可避免的需要實現(xiàn)類型轉(zhuǎn)換.因為B/S(瀏覽器/服務(wù)器)結(jié)構(gòu)應(yīng)用的請求參數(shù)是通過瀏覽器發(fā)送到服務(wù)器的,這些參數(shù)不可能有豐富的數(shù)據(jù)類型,因此必須在服務(wù)器端完成數(shù)據(jù)類型的轉(zhuǎn)換

MVC框架是一個表現(xiàn)層解決方案,理應(yīng)提供類型轉(zhuǎn)換的支持,Struts2提供了功能非常強大的類型轉(zhuǎn)換支持.


十三、表現(xiàn)層數(shù)據(jù)的處理

對于web應(yīng)用而言,表現(xiàn)層主要用于與用戶交互,包括收集用戶輸入數(shù)據(jù),向用戶呈現(xiàn)服務(wù)器的狀態(tài)。因此表現(xiàn)層的數(shù)據(jù)的流向主要有兩個方向:輸入數(shù)據(jù)和輸出數(shù)據(jù)。


對于輸入數(shù)據(jù):則需要完成由字符串?dāng)?shù)據(jù)向多種類型數(shù)據(jù)的轉(zhuǎn)化。程序通常無法自動完成,需要在代碼中手動轉(zhuǎn)化


對于輸出數(shù)據(jù):不管是java或是jsp都支持多種數(shù)據(jù)類型的直接輸出。


表現(xiàn)層另外一個數(shù)據(jù)處理是:數(shù)據(jù)校驗,分為客戶校驗和服務(wù)器端校驗.后邊會重點講解


十四、類型轉(zhuǎn)換

HTTP參數(shù)都是字符串類型。 保存的數(shù)據(jù)可能是字符串、數(shù)字、布爾、日期時間等或者JavaBean類型。 手工的類型轉(zhuǎn)換,比如將字符串轉(zhuǎn)換為日期,通過: 通過request.getParameter方法獲取字符串; 檢查是否為空; 通過DateFormat.parse方法將字符串轉(zhuǎn)換為Date對象


十五、Struts2類型轉(zhuǎn)換

Struts2內(nèi)置的類型轉(zhuǎn)換
String和boolean 完成字符串與布爾值之間的轉(zhuǎn)換
String和char  往常字符串與字符之間的轉(zhuǎn)換
String和int、Integer 完成字符串與整型之間的轉(zhuǎn)換
String和Long 完成字符串與長整型值之間的轉(zhuǎn)換
String和double、Double 完成字符串與雙精度浮點值的轉(zhuǎn)換
String和Float 完成字符串和單精度浮點之間的轉(zhuǎn)換
String和Date 完成字符串和日期類型之間的轉(zhuǎn)換,日期格式使用格式用戶請求所在Locale的SHORT格式
String和數(shù)組 在默認(rèn)的情況,數(shù)組元素是字符串,如果用戶定義類型轉(zhuǎn)換器,也可以是其它復(fù)合數(shù)據(jù)類型
String和Map、List

十六、Struts類型轉(zhuǎn)換的API

Struts2的類型轉(zhuǎn)換器實際上是基于OGNL實現(xiàn)的,在OGNL項目中有一個ognl.TypeConverter接口,這個接口就是實現(xiàn)類型轉(zhuǎn)換器必須實現(xiàn)的接口。該接口定義如下:

public interface TypeConverter {
     public Object convertValue(Map arg0, Object arg1, Member arg2, String arg3,
          Object arg4, Class arg5) {
              return null;
}


實現(xiàn)類型轉(zhuǎn)換器必須實現(xiàn)上面的TypeConverter,不過上面的接口里的方法過于復(fù)雜,所以O(shè)GNL項目還提供了一個該接口實現(xiàn)類:ognl.DefaultTypeConverter,通過繼承該類實現(xiàn)自己類型轉(zhuǎn)換器.該類定義如下:


    public class DefaultTypeConverter extends Object implements TypeConverter{
             public Object convertValue(Map<String,Object> context, Object value, Class toType) {
              }
             ……//其他的方法
     }


ConvertValue方法的作用
該方法完成類型轉(zhuǎn)換,不過這種類型轉(zhuǎn)換是雙向的,當(dāng)需要把字符串轉(zhuǎn)化對象實例時,通過該方法實現(xiàn),當(dāng)把對象實例轉(zhuǎn)換成字符串時也通過該方法實現(xiàn)。這種轉(zhuǎn)換是通過toType參數(shù)類型是需要轉(zhuǎn)換的目標(biāo)類型。所以可以根據(jù)toType參數(shù)來判斷轉(zhuǎn)換方向。
ConvertValue方法參數(shù)和返回意義
第一個參數(shù):context是類型轉(zhuǎn)換環(huán)境的上下文
第二個參數(shù):value是需要轉(zhuǎn)換的參數(shù),根據(jù)轉(zhuǎn)換方向的不同value參數(shù)的值也是不一樣的。
第三個參數(shù):toType是轉(zhuǎn)換后的目標(biāo)類型
該方法的返回值是類型轉(zhuǎn)換后的值。該值的類型也會隨著轉(zhuǎn)換的方向的改變而改變。由此可見轉(zhuǎn)換的convertValue方法接受需要轉(zhuǎn)換的值,需要轉(zhuǎn)換的目標(biāo)類型為參數(shù),然后返回轉(zhuǎn)換后的目標(biāo)值
Value為什么是一個字符串?dāng)?shù)組?
對于DefaultTypeConverter轉(zhuǎn)換器而言,它必須考慮到最通用的情形,因此他把所有請求參數(shù)都視為字符串?dāng)?shù)組而不是字符串。相當(dāng)于getParameterValues()獲取的參數(shù)值

相關(guān)文章

  • SpringBoot項目中使用緩存Cache的正確方法分享

    SpringBoot項目中使用緩存Cache的正確方法分享

    緩存可以通過將經(jīng)常訪問的數(shù)據(jù)存儲在內(nèi)存中,減少底層數(shù)據(jù)源如數(shù)據(jù)庫的壓力,從而有效提高系統(tǒng)的性能和穩(wěn)定性。本文就來講講SpringBoot項目中使用緩存Cache的正確姿勢吧
    2023-04-04
  • SpringBoot整合ES解析搜索返回字段問題

    SpringBoot整合ES解析搜索返回字段問題

    這篇文章主要介紹了SpringBoot整合ES解析搜索返回字段問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • springmvc實現(xiàn)json交互-requestBody和responseBody

    springmvc實現(xiàn)json交互-requestBody和responseBody

    本文主要介紹了springmvc實現(xiàn)json交互-requestBody和responseBody的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • 詳談異步log4j2中的location信息打印問題

    詳談異步log4j2中的location信息打印問題

    這篇文章主要介紹了詳談異步log4j2中的location信息打印問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 關(guān)于Unsupported major.minor version 49.0的錯誤解決辦法

    關(guān)于Unsupported major.minor version 49.0的錯誤解決辦法

    這篇文章主要介紹了關(guān)于Unsupported major.minor version 49.0的錯誤解決辦法的相關(guān)資料,需要的朋友可以參考下
    2015-11-11
  • SpringBoot實現(xiàn)IP地址解析的示例代碼

    SpringBoot實現(xiàn)IP地址解析的示例代碼

    本篇帶大家實踐在springboot項目中獲取請求的ip與詳細(xì)地址,我們的很多網(wǎng)站app中都已經(jīng)新增了ip地址顯示,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • springcloud 熔斷器Hystrix的具體使用

    springcloud 熔斷器Hystrix的具體使用

    本篇文章主要介紹了springcloud 熔斷器Hystrix的具體使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • java實現(xiàn)日歷效果的示例代碼

    java實現(xiàn)日歷效果的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何使用java實現(xiàn)打印某年全部的日歷信息,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-12-12
  • 25行Java代碼將普通圖片轉(zhuǎn)換為字符畫圖片和文本的實現(xiàn)

    25行Java代碼將普通圖片轉(zhuǎn)換為字符畫圖片和文本的實現(xiàn)

    這篇文章主要介紹了25行Java代碼將普通圖片轉(zhuǎn)換為字符畫圖片和文本的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • SpringCloud啟動失敗問題匯總

    SpringCloud啟動失敗問題匯總

    這篇文章主要介紹了SpringCloud啟動失敗問題匯總,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評論