struts2筆記(一)

IT民工_1334029567發表於2017-07-15

一、J2EE框架概述

view ->      controller ->                    model 
jsp  ->       servlet ->         javaBean->xxService->xxDao
(javaBean作為資料承載,service和dao作為業務處理)

二、struts引入

如果需要在url輸入網址,訪問後臺pojo類,可以使用servlet。
servlet:                                                     ->                                                  pojo:
class loginServlet extends HttpServlet{                                                 class loginAction{
          void doPost(request,response){                                                              void excute();
                     new loginAction().excute();                                                   }
}
}
如果不能使用servlet,只能使用過濾器,因為在java web專案中,能接收請求的只有servlet和filter。
filter:                                                          ->                                                 同上
class loginServlet implements Filter{
          void doFilter(request,response,chain){
                     new loginAction.excute();
                     chain.doFilter(request,response);
}
}

三、struts介紹

struts1:

1、建立web專案

2、為專案新增struts1各種包支援
 
     -->Struts config path:Struts核心配置檔案路徑
     -->ActionServlet name:請求處理的名稱
     -->URL pattern:action的對映路徑
     -->Base package for new classes:基本包名
     -->Default application resources:預設應用程式資原始檔
      點選'finish'後,開發工具會自動將struts相關的包匯入到專案中,並建立相關檔案。
3、新增Struts開發檔案
      src->New->Other->Myeclipse->Web Struts 1.x->Struts Form,Action&Jsp
 
         點選'finish',進入表單相關的引數配置
 
         -->Use case:用例,暫時用請求名login代替
         -->Superclass:父類,org.apache.struts.action.ActionForm
         -->Form properties:配置表單需要的元素,完成登陸至少配置兩個元素,'username'、'password'
         -->JSP:前端頁面
         點選'finish',進入action配置
 
           -->Superclass:父類,org.apache.struts.action.ActionForm
           -->Scope:作用域
           -->Input Source:輸入錯誤後跳轉的頁面         
           點選'finish'完成所有配置

struts2:

           struts運用攔截器的概念,結合各種過濾器來獲取url。與struts1區別是,struts1是單例項(所有請求共享一個例項),struts2是多例項(一個請求一個例項),還引入'堆疊'的概念,可以達到與servletAPI完全解耦的目的。
           1、建立一個web專案
           2、新增struts2包支援
 

四、配置檔案

4.1、六大配置檔案

        1、struts-default.xml    struts預設配置 在struts2-core-2.2.1 jar包中
        2、default.properties   預設常量配置  org.apache.struts2
        3、web.xml  專案的配置檔案
        4、struts.xml  struts  核心配置檔案
        5、struts.properties  自定義常量配置檔案
        6、struts-plugin.xml  外掛配置

4.2、核心配置檔案

        1、global-results元素      
              <package name = "user"  namespace ="/"  extends ="struts-default" >
                   <global-results>
                       <result name="error">/error.jsp</result>
                   </global-results>
              </package>
             可以配置多個action共享的結果集
         2、default-action-ref元素
              <package name = "user"  namespace ="/"  extends ="struts-default" >
                   <default-action-ref name="default"></default-action-ref>                
                       <global-results>
                           <result name="error">/error.jsp</result>
                       </global-results>
                       <action name ="default" class="com.defaultAction">
                           <result name = "success">/404.jsp</result>
                       </action>
              </package>
             通常用於防止url輸入錯誤,顯示404錯誤頁面,但該頁面往往對使用者很不友好,可以使用該配置統一控制404顯示頁面
        3、default-class-ref元素             
              <package name = "user"  namespace ="/"  extends ="struts-default" >
                   <default-action-ref name="default"></default-action-ref>
                        <default-class-ref class="defaultAction"></default-action-ref>
                             <action name ="default" >
                                  <result name = "success">/404.jsp</result>
                             </action>
              </package>
              action包忘記配置class時預設的action值
 
         4、注意:
                    (在struts-2.1.dtd裡,default-action-ref在default-class-ref前面,default-calss-ref在global-results前面,所以程式碼也一樣)

4.3、協作配置

       對一個專案而言,配置檔案會很多,此時可採用include標籤將各種配置檔案分開儲存(程式碼順序參照上幅圖片35行)
       

五、動態呼叫方法(通過url指定呼叫的方法)

5.1、動態配置

          在不使用action的method屬性情況下,通過URL"/XXX!方法名"(例如http://localhost:8080/struts201/user/aaa!login.action)制定呼叫後臺的login方法,要實現url動態呼叫方法,需將"default.properties"中的"struts.serve.static.browserCache=true"設定為true,因為在struts2.1以上的版本,其預設值為false
5.2、使用萬用字元
          <package name ="user"  namespace = "/user"  extends ="struts-default">
             <action name ="user_*"  calss ="com.loginAction"  method ="{1}">
                 <result name ="success">/login.jsp</result>
             </action>
          </package>
----------------------------------------
          <package name ="user"  namespace = "/user"  extends ="struts-default">
             <action name ="*_*"  calss ="com.{1}Action"  method ="{2}">
                 <result name ="success">/login.jsp</result>
             </action>
          </package>

          在action的name屬性中可以使用"*"去命名,那麼在其他屬性中需要使用"{0}"或者"{1}"或者"{2}"取出url路徑

六、接受請求引數

          struts2是MVC的控制器,在整個請求過程中,對引數的處理是struts2的職責所在,接受和處理引數分為屬性驅動,模型驅動,域驅動等

6.1屬性驅動

          直接在action的pojo類中宣告與表單一致的屬性,並生成匹配的get/set方法,struts2會自動將表單中的資料提交到action中,並直接給相應的屬性賦值
          struts.xml核心程式碼:
          <package name="user" namespace="/" extends="struts-default">
             <action name="login" class="com.action.loginAction" >
                 <result name="success">/weclome.jsp</result>
                 <result name="false">/index.jsp</result>
             </action>
          </package>
          action程式碼:
          package com.action;
          public class loginAction {
  private String username;
  private String password;
  private String error;


  public String getError() {
return error;
  }


  public void setError(String error) {
this.error = error;
  }


  public String getUsername() {
return username;
  }


  public void setUsername(String username) {
this.username = username;
  }


  public String getPassword() {
return password;
  }


  public void setPassword(String password) {
this.password = password;
  }


  public String execute() {
if (username.equals("admin") && password.equals("admin")) {
return "success";
} else {
this.error = "error";
return "false";
  }
   }
           }
           jsp核心程式碼:
          <body>
              <span style="color: red;">${error}</span>
              <form action="login.action" method="post">
                  username:<input type="text" name="username"><br>
                  possword:<input type="password" name="password"><br>
                 <input type="submit" value="submit"/>   
              </form>
          </body>

6.2模型驅動

      struts2中提供了一個叫模型驅動的攔截器,要使用此模型驅動填充引數,需action類實現ModelDriven介面
      jsp程式碼:
 
     action程式碼:
 

6.3域驅動

      通常情況下,表單元素往往對應一個實體,實體又往往單獨放在實體層中,那麼此時需要在action中放入實體物件作為請求引數,域驅動的方式就是把實體類中的物件作為action的屬性
      jsp程式碼:
  
      action程式碼:
 
      struts.xml程式碼:
 
      pojo程式碼:
 

七、知識點:

轉發:request.getRequestDispatcher(path).forward(request,response);
重定向:request.sendRedirect(path);
表單驗證的方法 分為三層:1、客戶端的javascript指令碼驗證(對資料的合法性驗證) 
                                                 2、控制器的伺服器驗證(對資料的合法性驗證) 
                                                 3、對資料的有效性驗證(連線資料庫驗證正確性)
配置檔案都優先順序:web.xml>struts.properties>struts.xml>default.properties
struts.xml的action配置:
<package name = "user"  namespace ="/user"  extends ="struts-default" >
     <action name ="aaa"  class = "com.action.loginAction"  method="login">
           <result name = "success">/login.jsp</result>
     </action>
</package>
jsp校驗:<span style="color: red;">${error}</span>



相關文章