<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    無線&移動互聯網技術研發

    換位思考·····
    posts - 19, comments - 53, trackbacks - 0, articles - 283
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Struts2 要點筆記(三)

    Posted on 2010-05-16 03:09 Gavin.lee 閱讀(408) 評論(0)  編輯  收藏 所屬分類: SSH2 --Struts2
    十三、Struts2的處理流程

    request—>StrutsPrepareAndExecuteFilteràInterceptor(Struts2內置的一些攔截器或用戶自定義攔截器)àAction(用戶編寫的Action,類似Struts1中的Action)àResult(類似Struts1中的forward)àJsp/Htmlàresponse

    StrutsPrepareAndExccuterFilterStruts2框架的核心控制器,它負責攔截由<url-pattern>/*</url-pattern>指定的所有用戶請求,當用戶請求到達時,該Filter會過濾用戶的請求。默認情況下,如果用戶請求的路徑不帶后綴或者后綴以.action結尾,這時請求將被轉入Struts2框架處理,否則Struts2框架將過濾該請求的處理。當請求轉入Struts2框架處理時會經過一系列的攔截器,然后再轉到Action。Struts1不同,Struts2對用戶每一次請求都會創建一個Action,所以Struts2Action是線程安全的



    十四、
    Struts2指定多個配置文件

    將配置文件以模塊進行劃分,然后通過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>

        <include file="struts-trade.xml"></include>

    </struts>



    十五、
    Struts2動態方法調用(Struts2.1版本文檔中已經不推薦使用了)

    如果在action中存在多個方法時,我們可以使用!+方法方法名調用指定的方法,如下:

    public class HelloWorldAction{

        private String message;

        public String getMessage(){

           return message;

    }

    public String execute() throws Exception{

        this.message = “我是execute方法

        return “success”;

    }

    public String other() throw Exception{

        this.message = “我是other方法”;

    }

    }

    假設訪問上面的actionURL路徑為:/struts2/test/helloworld.action

    要訪問actionother方法,我們可以這樣調用:

    /struts2/test/helloworld!other.action

    如果不想使用動態方法調用,我們可以通過常量

    struts.enable.DynamicMethodInvocation關閉動態方法調用.

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

    Struts2使用通配符定義action(官方推薦)

    <package name=”employee”

    namespace=”/control/employee” extends=”struts-default”>

        <action name=”list_*”

    class=”cn.itcast.action.HellWorldAction method=”{1}”>

    <result name=”success”>

        /WEB-INF/page/message.jsp

    </result>

        </action>

    </package>

    注:

    a). *通配符可以添加多個: list_*_*_*

    b). method=”{1}” 表示取第一個*

    c). 通配符可以放置多個地方 class、result

     

    十六、Struts2 請求參數的接受

    以下兩種方法,當參數比較多的時候,用第一種方法,將會發現action中有很多settergetter方法,這樣不利于閱讀action,所以建議使用第二種。

    a). 采用基本類型接收請求參數(get/post)

    Action類中定義與請求參數同名的屬性,Struts2便能接受請求參數并賦值給同名屬性:

    如:請求路徑,http://localhost:8080/test/view.action?id=78

    public class ProductAction{

        private Integer id;

        //struts2通過反射技術調用與請求參數同名的屬性的setter方法來獲取請求參數值

        public void setId(Integer id) {

           this.id = id;

    }

    public Integer getId{

        return id;

    }

    }

    b). 采用符合類型接收請求參數

    如:請求路徑,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首先通過反射技術調用Product的默認構造器創建product對象然后在通過反射技術調用product中與請求參數同名的屬性的setter方法來獲取請求參數



    十七、
    Struts2有兩種類型轉換器

    局部類型轉換器/全部類型轉換器

    a). 自定義轉換類型

    package cn.itcast.type.converter;

    import java.text.ParseException;

    import java.text.SimpleDateFormat;

    import java.util.Date;

    import java.util.Map;

    import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

    publicclass DateTypeConverter extends DefaultTypeConverter {

        @Override

        public Object convertValue(Map<String, Object> context, Object value, Class toType) {

           SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");

           try {

               if(toType == Date.class){//當字符串向Date類型轉換時

                  String[] params = (String[]) value;// request.getParameterValues()

                  return dateFormat.parse(params[0]);

               }elseif(toType == String.class){//Date轉換成字符串時

                  Date date = (Date) value;

                  return dateFormat.format(date);

               }

           } catch (ParseException e) {}

           returnnull;

        }

    }

    完成具體的雙向轉化代碼后,需要將上面的類型注冊為局部類型轉換器:

    Action類所有的包下放置ActionClassName-conversion.properties文件,ActionClassNameAction的類名,后面的-conversion.properties是固定寫法,對于本例而言,文件的名稱應為HelloWroldAction-conversion.properties。

    properties文件中的內容為:

    birthday=cn.itcast.type.converter.DateTypeConverter

    b).自定義全局類型轉換器

    將上面的局部類型轉換器注冊為全局類型轉換器:

    WEB-INF/classes下放置xwork-conversion.properties文件。在properties文件中的內容為:

    待轉換的類型=類型轉換器的全類名

    java.util.Date=cn.itcast.conversion.DateConverter




    十八、訪問或添加
    request/session/application屬性

    import java.util.Arrays;

    import javax.servlet.ServletContext;

    import javax.servlet.http.HttpServletRequest;

    import org.apache.struts2.ServletActionContext;

    import com.opensymphony.xwork2.ActionContext;

    public class HelloWorldAction {

        public String execute(){

           ActionContext ctx = ActionContext.getContext();

           ctx.getApplication().put("app", "應用范圍");//ServletContext里放入app

           ctx.getSession().put("ses", "session范圍");//session里放入ses

           ctx.put("req", "request范圍");//request里放入req

           ctx.put("names", Arrays.asList("老張", "老黎", "老方"));

           return "message";

        }

        public String rsa() throws Exception{

           HttpServletRequest request = ServletActionContext.getRequest();

           ServletContext servletContext = ServletActionContext.getServletContext();

           request.setAttribute("req", "請求范圍屬性");

           request.getSession().setAttribute("ses", "會話范圍屬性");

           servletContext.setAttribute("app", "應用范圍屬性");

           //HttpServletResponse response = ServletActionContext.getResponse();

           return "message";

        }

    }

    備注:ognl表達式其實完全可以通過JSTL、EL結合來代替ognl

    主站蜘蛛池模板: 国产成人无码综合亚洲日韩| 亚洲国产成人精品无码区在线网站| 久久精品一区二区免费看| 亚洲啪啪免费视频| 亚洲成人国产精品| 99久久免费中文字幕精品| 亚洲国产精品成人AV在线 | 成人午夜免费福利视频| 香蕉视频亚洲一级| 亚洲沟沟美女亚洲沟沟| gogo全球高清大胆亚洲| 37pao成人国产永久免费视频| 国产亚洲综合久久| 亚洲高清中文字幕综合网| 四虎精品亚洲一区二区三区| 69av免费观看| 国产无限免费观看黄网站| 2020国产精品亚洲综合网| 国产亚洲综合网曝门系列| 四虎影在线永久免费四虎地址8848aa| 日韩精品久久久久久免费| 免费人成再在线观看网站| 亚洲午夜久久久精品电影院| 亚洲色精品88色婷婷七月丁香| 免费被黄网站在观看| 91在线手机精品免费观看| 一区二区三区免费视频播放器| 亚洲综合在线一区二区三区| 老汉色老汉首页a亚洲| 亚洲综合色在线观看亚洲| 免费无码又爽又刺激高潮| 亚洲国产精品免费在线观看| 精品免费久久久久国产一区 | 国产精品免费久久| 亚洲成AV人片高潮喷水| 亚洲一区免费视频| 亚洲精品在线不卡| 97se亚洲综合在线| 无码欧精品亚洲日韩一区| 久久久久国产亚洲AV麻豆| 亚洲精品国产精品乱码不卞|