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

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

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

    隨筆-21  評論-29  文章-0  trackbacks-0
     

    StrutsMVC組件
            組件包括:ActionServlet 、Action Classes 、Action Mapping(此處包括ActionForward)、ActionForm Bean。
    Struts中的MVC

            1
    、模型(Model):本質上來說在StrutsModel是一個商業邏輯類,開發者實現商業邏輯。
            2
    、視圖(View):View是由與控制器Servlet配合工作的一整套JSP定制標簽庫構成,利用他們可以快速建立應用系統的界面。
            3
    、控制器(Controller):前端控制器是一個Servlet。它將客戶端請求轉發到相應的后端控制器ActionForm類。
    ActionServlet(中心控制器)
    ——參看APIDOC
          
    定義:繼承自javax.servlet.http.HttpServlet類,是中心控制器(總控制器)。它提供一個中心位置來處理全部的終端請求。
          
    作用:接受請求、填充數據、派發請求、響應用戶  
        配置:在web配置文件web.xml中聲明。

    <servlet>
           
    <servlet-name>action</servlet-name>
           
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
           
    <init-param>
               
    <param-name>config</param-name>
               
    <param-value>/WEB-INF/struts-config.xml</param-value>
           
    </init-param>
           
    <load-on-startup>0</load-on-startup>
        
    </servlet>

        
    <servlet-mapping>
           
    <servlet-name>action</servlet-name>  
           
    <url-pattern>*.do</url-pattern>
        
    </servlet-mapping>

    Action 
      

    APIDOC:An Action is an adapter between the contents of an incoming HTTP request and the corresponding business logic that should be executed to process this request. The controller (RequestProcessor) will select an appropriate Action for each request, create an instance (if necessary), and call the execute method.
      問題:Action是什么時候初始化的?服務啟動的時候,還是接收到用戶第一次請求的時候?
    AddStudentAction中加入以下代碼(加入其構造方法)

    public AddStudentAction(){
            System.out.println(
    "in AddStudentAction constructor");
        }

    重新部署后觀察頁面和控制器


    以上證明:Action發出該Action請求,不是在讀取配置時初始化的!
    再打開另外一個瀏覽器,新建一個會話,發現該語句只打印一次,即證明Action只初始化一次!

    APIDOC:Actions must be programmed in a thread-safe manner, because the controller will share the same instance for multiple simultaneous requests. This means you should design with the following items in mind:  

    • Instance and static variables MUST NOT be used to store information related to the state of a particular request. They MAY be used to share global resources across requests for the same action.
    • Access to other resources (JavaBeans, session variables, etc.) MUST be synchronized if those resources require protection. (Generally, however, resource classes should be designed to provide their own protection where necessary.

    注意:Action的線程安全性,不能多個請求共享一個Action實例。
    怎樣實現Action的安全性編程?
       注意不要用實例變量或者類變量共享只是針對某個請求的數據
       注意資源操作的同步性。
    應用:可以統計一個Action訪問次數。(設計一個實例變量count 其在調用時加1)
    新建一個CountAction類,其繼承自Action類


    在struts-config.xml中注冊  即加入如下代碼
    <action path="/countAction" type="cn.itcast.CountAction"></action>
    編輯CountAction代碼 如下

    package cn.itcast;

    import java.io.PrintWriter;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;

    public class CountAction extends Action {
        
        
    private Integer count = 0 ;
        
    public ActionForward execute(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response)
                
    throws Exception {
            
            
    synchronized (count){
            count
    ++ ;
            }

            PrintWriter out 
    = response.getWriter();
            out.println(
    "count="+count);        
            
    return null ;
        }


    }

    重新部署應用 http://localhost:8080/strutstest//countAction.do 實現了計數功能





    有n個請求就會執行n個對應的execute方法,但這n個execute方法同時操作count變量,要注意線程安全!

    posted on 2009-05-02 22:14 特立獨行 閱讀(261) 評論(0)  編輯  收藏 所屬分類: Struts框架
    主站蜘蛛池模板: 日本高清免费中文字幕不卡| 中文字幕视频在线免费观看| 99无码人妻一区二区三区免费| 亚洲国产精品无码久久久秋霞2| A毛片毛片看免费| 国产亚洲精久久久久久无码AV| 一级做性色a爰片久久毛片免费| 亚洲一区日韩高清中文字幕亚洲 | 亚洲精品美女久久久久99| 美女被艹免费视频| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 国产精品成人免费观看| 亚洲欧洲日产国码一级毛片| xxxxxx日本处大片免费看| 亚洲无av在线中文字幕| 久久精品成人免费看| 亚洲日韩乱码中文无码蜜桃臀| 永久免费av无码网站韩国毛片| 亚洲欧美黑人猛交群| 亚洲国产高清在线一区二区三区| 国产黄片不卡免费| 亚洲欧洲国产日韩精品| 性做久久久久久免费观看| 午夜亚洲乱码伦小说区69堂| 亚洲真人无码永久在线| 久久99国产乱子伦精品免费| 亚洲综合成人婷婷五月网址| 亚洲国产成人久久综合区| 日韩免费的视频在线观看香蕉| 亚洲综合色区中文字幕| 亚洲女同成人AⅤ人片在线观看| 免费看黄的成人APP| 色老板亚洲视频免在线观| 免费一级毛片在线观看| 曰批全过程免费视频在线观看无码 | 又粗又大又黑又长的免费视频| 国产成人 亚洲欧洲| 亚洲av日韩av无码| 午夜毛片不卡高清免费| 你好老叔电影观看免费| 国产亚洲中文日本不卡二区 |