struct2

 

 

1.第一個Struts2入門案例
   1.找jar包
   Struts2-core
   xwork-core
   ognl
   javasist
   freemarker
   commons-lang
   commons-io
   commons-fileupload css

   2.在web.xml文件中植入配置,配置了核心過濾器(XXXXFilter)
      核心控制器
      核心過濾器的名稱:org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterjava

     Ctrl+Shift+T程序員

   3.在src下建立一個struts.xml文件
   <package name="default" namespace="/" extends="struts-default">
      <action name="xxAction邏輯名稱:URL請求書寫的名稱" class="類的物理地址">
        <result name="success">/index.jsp</result>
         <result name="login">/login.jsp</result>
      </action>
   </package>
   4.在action包中建立一個Action類
     實現了特定接口的一個類 Action接口
     public class LoginAction implements Action{
       public String execute(){
         return "success";
       }web

     }
     5.寫一個index.jsp頁面面試

2.實現登陸:認證自動裝配
 初級的自動裝配
    page:name  Action: name保持一致apache

 中級的自動配置
    page:user.namee  Action :user對象編程

  高級的自動配置
    page:name       Action:user(多實現了一個接口:ModelDriven)
                     前提條件:要手動new出user設計模式

3.保存用戶信息:ServletAPI如何使用?在Action中如何獲取到session對象
  解耦
    方式一:ActionContext.getContext().getSession()
    方式二:IOC注入
           實現了接口:SessionAware:  核心方法 setSession(Map<String,Object> map)
            Map<String,Object> map;
            造成get和set方法瀏覽器

            Action的execute方法中,使用map.put()
  耦合
     方式一:ServletActionContext.getRequest().getSession();安全


     方式二:IOC 注入
         實現一個接口:ServletRequestAware       setServletRequest(HttpServletRequest request)
        Action 中公開一個變量:HttpServletRequest request; get和set方法

        Action中的execute方法中就能夠 HttpSession=request.getSession();

4.數據校驗
5.Struts2經常使用標籤
-------------------2016年9月25日09:14:36
1.Struts2和MVC
 解析:MVC是一種模式,設計思想
     Struts2是這種模式的一種實現
     Spring MVC
2.WebWork和Struts2關係
 解析:Struts1   官方提供的框架
      WebWork  

3.Struts2標籤
 1.導入指令
  <%@ taglib uri="/struts-tags" prefix="s"%>

 2.使用
 <s:form>
   
 </s:form>

4.自動裝配autoaware
  1.login.jsp
    name="username"

  2.Action中的成員變量名稱和登陸界面中name屬性值一致

5.一個異常
Stacktraces (棧跟蹤)
java.lang.NullPointerException 空指針異常

    cn.happy.action.LoginAction.execute(LoginAction.java:12)

6.username password  ------->user
 

  jsp頁面
  <input name="user.username"/>
  <input name="user.password"/>

7.洋洋說
  洋洋說,這麼寫太噁心,能不能界面上仍是username,也能實現自動裝配呢?

   解析:ModelDriven (模型驅動)
    public abstract interface com.opensymphony.xwork2.ModelDriven {
      public abstract java.lang.Object getModel();
    }
  小tip:
  1.讓Action實現一個ModelDriven<UserInfo>
  2.user對象手動實例化
  3.UserInfo getModel(){
     return user;
  }

 8.Servlet API
 解析:API(Application Programming Interface) 應用程序編程接口
     就是和Servlet相關的一組接口和類

     Servlet API 文檔
     接口和類以及方法的說明,描述
     xxx.chm 
 9.我想在登陸成功後,拿到Session,給Session保存用戶名。

  1.如何在Action中獲取到session對象
  2.將用戶名放入session做用域

 10.獲取session的兩種方案
    方式一:耦合
   
HttpSession session2 = ServletActionContext.getRequest().getSession();
 
    方式二:解耦
 Map<String, Object> session = ActionContext.getContext().getSession();

   經過注入方案:IOC

有待考究:blogs一小篇
Map<String, Object> session = ServletActionContext.getContext().getSession();

  做業:1.有待考究:blogs一小篇
       2.全部案例造成blogs
       3.畫圖和獲取session四種方案
       4.下午:上機練習和課後題
      
 第三章 Struts2配置詳解
 2016-9-26 08:18:01
 1.Struts2標籤
 2.核心控制器 web.xml
 3.Action
  讓一個普通類變成Action
   方式一:實現 Action接口
      必須程序員手動的重寫execute()

   方式二:繼承 ActionSupport
       不用程序員手動重寫execute()
          由於在ActionSupport對execute()作了默認實現
        要想啓用驗證,必須實現該類,或者說該類的子類

 4.Result
   
5.Struts.xml
  <constant name="struts.devMode" value="true" />   改動不重啓服務
 i18n  (國際化)
 internationalization
 Internationalization
 
 6.如何搜索xml文件加載順序
   1.找到項目的web.xml找到核心過濾器
   2.找到init方法
      StrutsPrepareAndExecuteFilter類中

     public void init(FilterConfig filterConfig) throws ServletException {

            dispatcher = init.initDispatcher(config);   //呵呵   
            postInit(dispatcher, filterConfig);
      
    }
     InitOperations類

      public Dispatcher initDispatcher( HostConfig filterConfig ) {
        Dispatcher dispatcher = createDispatcher(filterConfig);
        dispatcher.init();  //呵呵
        return dispatcher;
    }

    Dispatcher類
      public void init() {
            init_FileManager();
            init_DefaultProperties(); // [1]
            init_TraditionalXmlConfigurations(); // [2]   嘻嘻
            init_LegacyStrutsProperties(); // [3]
            init_CustomConfigurationProviders(); // [5]
            init_FilterInitParameters() ; // [6]
            init_AliasStandardObjects() ; // [7]   
    }
     接下來去找
     private void init_TraditionalXmlConfigurations() {
        String configPaths = initParams.get("config");
        if (configPaths == null) {
            configPaths = DEFAULT_CONFIGURATION_PATHS;  //呵呵
        }
      
    }
    /**
     * Provide list of default configuration files.
     */
    private static final String
    DEFAULT_CONFIGURATION_PATHS = "struts-default.xml,struts-plugin.xml,struts.xml";

 

7.完整順序
default.properties文件 
struts-default.xml 
struts-plugin.xml 
struts.xml 
struts.properties 
web.xml


Action是數據中轉站?
解析: Action將登陸框中用戶名A 轉給 歡迎界面B
方式二:Model的數據給View
8.動態方法調用
DMI Dynamic Method Invoke
SUCCESS "succss"
LOGIN login
ERROR error
INPUT input
NONE none

普通的請求方式
<action method="list">
<action method="add">
<action method="edit">
<action method="del">

/***
* 圖書列表
*/
public String list() throws Exception {
System.out.println("DMIAction========list");
return "list";
}
/**
* 添加圖書
*/
public String add() throws Exception {
System.out.println("DMIAction========add");
return "add";
}
/**
* 修改圖書
*/
public String edit() throws Exception {
System.out.println("DMIAction========edit");
return "edit";
}

/**
* 刪除
*/

public String del() throws Exception {
System.out.println("DMIAction========del");
return "del";
}


啓用DMI,先抉條件
<!-- 開啓動態方法調用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

在瀏覽器端 action邏輯名稱!方法
不用,安全性低


9.通配符

Book
-----添加圖書
------修改圖書

User
---添加用戶
---修改用戶
10.ServletAPI
請求流程圖
*Struts2 UI標籤
*配置文件 中常量國際化的設置,推導出全部的常量在default.properties中進行查找
*配置文件 struts-default.xml strtus-plugin.xml struts.xml
*6個配置文件加載順序
*ActionSupport
*一個action出現CRUD,如何配置
*太浪費Action節點 DMI
*通配符 *_*
面試Struts2 必須面試第四章

第四章 Struts2深刻
2016年9月28日08:29:07
1.攔截器
2.文件上傳和下載 光文傑
3.數據校驗 汪靜
4.國際化 張振
5.類型轉換 張昇平
6.jq ui 黃榮
easy ui 景佩佩
7.自定義mvc 遲明洋
xml定義
dom4j
反射

 

1.攔截器
2.Struts執行流程
2.1 web.xml中 StrutsPrepareAndExecuteFilter類

2.2 找到doFilter方法
體現出一種設計模式
解釋了Struts2中 request 並非HttpServletRequest
request = prepare.wrap(包裝)Request(request);

***:ActionMapping mapping = prepare.findActionMapping(request, response, true);

findActionMapping方法:
public ActionMapping findActionMapping() {
//先看內存中有沒有映射結果!
ActionMapping mapping = (ActionMapping) request.getAttribute(STRUTS_ACTION_MAPPING_KEY);

//沒有,找到ActionMapper構建
if (mapping == null || forceLookup) {

mapping = dispatcher.getContainer().getInstance(ActionMapper.class).
}

return mapping;
}

2.3 上面代碼已經保證mapping不是null
if (mapping == null) {

} else {
//code execute
execute.executeAction(request, response, mapping);
}

executeAction方法原型以下:
public void executeAction() throws ServletException {
dispatcher.serviceAction(request, response, mapping);
}

*serviceAction原型
public void serviceAction(){

ActionProxy proxy = getContainer().getInstance(ActionProxyFactory.class).createActionProxy(
namespace, name, method, extraContext, true, false);

}

*:尋找ActionInvocation

if (mapping.getResult() != null) { Result result = mapping.getResult(); result.execute(proxy.getInvocation():返回值類型是ActionInvocation); } else { proxy.execute(); }

相關文章
相關標籤/搜索