Struts2 啟動分析

2021-06-06 08:32:26 字數 1622 閱讀 3778

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...