edited by bruce bob
首先,分析乙個web應用程式,基本應該從web.xml開始入手。我們這裡構建了乙個最簡單的web應用程式。
struts-execute
org.apache.struts2.dispatcher.filterdispatcher
struts-execute/*
可以看到,這裡的配置非常簡單,就是將交由struts2處理的請求通過乙個filter過濾器交由struts2處理。
所以,我們就從filterdispatcher開始入手進行分析struts的行為。
我們知道,filter的啟動時會進行init()進行初始化。
這裡的初始化相對簡單,就是將filter的config物件傳遞進來。然後進行log的初始化。這裡不是分析的重點,跳過。下面是重點。在這個filter中有乙個dispatcher的屬性,該類是處理struts請求的核心類。而filterdispatcher只是他的乙個**而已。
try finallyelseelsecatch(exception e)else{
finaldocs.addall(loadconfigurationfiles(includefilename, child));
finaldocs.add(doc);
loadedfileurls.add(url.tostring());
到這裡,init方法就分析完了。
下面我們看一下register方法。方法裡主要是對bean和constant進行解析。
解析bean的時候,需要注意一下幾個引數:
string type =child.getattribute("type");
string name =child.getattribute("name");
string impl =child.getattribute("class");
string onlystatic =child.getattribute("static");
string scopestr =child.getattribute("scope");
"true".equals(child.getattribute("optional"));
class:這個屬性是個必填屬性,它指定了bean例項的實現類。
type:這個屬性是個可選屬性,它指定了bean例項實現的struts2的規範,該規範通常是通過某個介面或者在此前定義過的bean,因此該屬性值通常是個介面或者此前定義過的bean的name屬性值。如果需要將bean的例項作為strut2元件使用,則應該指定該屬性的值。
name:該屬性是個可選屬性,它指定的bean例項的名字,對於有相同type的多個bean。則它們的name屬性不能相同。
scope:該屬性是個可選屬性,它指定bean例項的作用域,該屬性的值只能是default、singleton、request、session或thread之一。
static:該屬性是個可選屬性,它指定bean是否使用靜態方法注入。通常而言,當指定了type屬性時,該屬性就不應該指定為true。
optional:該屬性是個可選屬性,它指定bean是否是乙個可選bean。
Struts2啟動錯誤
在程式設計序是總是出現一些馬虎的錯誤就像下面這個錯誤。寫出來就是為了給自己記個筆記。不算是技術文章。當然也希望對遇到同樣問題的朋友有所幫助。s2sh配置完成後啟動tamcat提示以下錯誤 解決方法 忘記匯入ognl包了 匯入ognl 2.6.11.jar就ok了。太大意了呵呵.通常情況下,大家可以匯...
struts2 流程分析
在struts2框架中的處理大概分為以下幾個步驟 1 客戶端初始化乙個指向servlet容器 例如tomcat 的請求 2 這個請求經過一系列的過濾器 filter 這些過濾器中有乙個叫做actioncontextcleanup的可選過濾器,這個過濾器對於struts2和其他框架的整合很有幫助,例如...
Struts2字尾 深入Struts2
一 將action字尾變成html字尾 xmlversion 1.0 encoding utf 8 doctype struts public apache software foundation dtd struts configuration 2.1 en struts include file...