国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
struts2 處理請(qǐng)求流程分析(結(jié)合源碼)1
struts2 源碼版本2.0.11.1
本文是綜合網(wǎng)上部分人的分析成果,然后再自己結(jié)合源碼進(jìn)行的,分析中如有錯(cuò)誤,請(qǐng)指正。
從struts2 中的web.xml的啟動(dòng)配置可以看出,首先分析的是FilterDispatcher 這個(gè)過(guò)濾器類。
1、過(guò)濾器的初始化方法 void init(FilterConfig filterConfig)
Java代碼 
//初始化方法
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
//獲得默認(rèn)的參數(shù),創(chuàng)建dispathcher 對(duì)象
dispatcher = createDispatcher(filterConfig);
dispatcher.init();
String param = filterConfig.getInitParameter("packages");
String packages = "org.apache.struts2.static template org.apache.struts2.interceptor.debugging";
if (param != null) {
packages = param + " " + packages;
}
this.pathPrefixes = parse(packages);
}
1.1、createDispatcher(filterConfig);方法,該方法的目的是創(chuàng)建Dispathcher 對(duì)象
Java代碼 
protected Dispatcher createDispatcher(FilterConfig filterConfig) {
//讀取相應(yīng)過(guò)濾器的web.xml 配置
Map<String,String> params = new HashMap<String,String>();
for (Enumeration e = filterConfig.getInitParameterNames(); e.hasMoreElements(); ) {
String name = (String) e.nextElement();
String value = filterConfig.getInitParameter(name);
params.put(name, value);
}
//可以看出Dispatcher 類包裝了ServletContext 和過(guò)濾器的web.xml 配置
return new Dispatcher(filterConfig.getServletContext(), params);
}
1.2、dispatcher.init();方法,該方法對(duì)dispatcher進(jìn)行了一系列的初始化工作,這個(gè)工作很重要也有點(diǎn)復(fù)雜,具體每個(gè)初始化的工作的流程怎樣,待有空閑的時(shí)候再繼續(xù)分析,網(wǎng)上也有人已經(jīng)分析過(guò)了,如果有興趣可參照:http://zddava.javaeye.com/blog/211795
Java代碼 
public void init() {
if (configurationManager == null) {
configurationManager = new ConfigurationManager(BeanSelectionProvider.DEFAULT_BEAN_NAME);
}
//讀取properties信息,默認(rèn)的default.properties
init_DefaultProperties(); // [1]
//讀取xml配置文件,默認(rèn)的struts-default.xml,struts-plugin.xml,struts.xml
init_TraditionalXmlConfigurations(); // [2]
//讀取用戶自定義的struts.properties
init_LegacyStrutsProperties(); // [3]
//讀取FilterDispatcher的配置中所定義的actionPackages屬性,傳說(shuō)中的Struts 2 零配置所謂的零配置
init_ZeroConfiguration(); // [4]
//自定義的configProviders
init_CustomConfigurationProviders(); // [5]
//該功能全面被注釋
init_MethodConfigurationProvider();
//載入FilterDispatcher傳進(jìn)來(lái)的initParams
init_FilterInitParameters() ; // [6]
//將配置文件中的bean與具體的類映射
init_AliasStandardObjects() ; // [7]
//構(gòu)建一個(gè)用于依賴注射的Container對(duì)象
//在這里面會(huì)循環(huán)調(diào)用上面七個(gè)ConfigurationProvider的register方法
//其中的重點(diǎn)就是DefaultConfiguration的#reload()方法
Container container = init_PreloadConfiguration();
init_CheckConfigurationReloading(container);
init_CheckWebLogicWorkaround(container);
}
1.3、String param = filterConfig.getInitParameter("packages"); 以下的代碼。這個(gè)步驟載入了packages標(biāo)簽下定義的靜態(tài)資源。 讀取web.xml中 的下面的配置路徑還有org.apache.struts2.static,template,org.apache.struts2.interceptor.debugging這三個(gè)包空間下邊的資源也會(huì)作為靜態(tài)資源載入。
Xml代碼 
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
<init-param>
<param-name>packages</param-name>
<param-value>cn.static.resource</param-value>
</init-param>
</filter>
1.4、this.pathPrefixes = parse(packages);這個(gè)步驟是對(duì)packages 進(jìn)行解析的。
Java代碼 
protected String[] parse(String packages) {
if (packages == null) {
return null;
}
List<String> pathPrefixes = new ArrayList<String>();
StringTokenizer st = new StringTokenizer(packages, ", \n\t");
while (st.hasMoreTokens()) {
String pathPrefix = st.nextToken().replace('.', '/');
if (!pathPrefix.endsWith("/")) {
pathPrefix += "/";
}
pathPrefixes.add(pathPrefix);
}
return pathPrefixes.toArray(new String[pathPrefixes.size()]);
}
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Struts2 權(quán)限驗(yàn)證
Filter 過(guò)濾器
Struts2的工作機(jī)制及分析
Struts的資源文件時(shí)如何初始化的--struts源碼學(xué)習(xí) - 輪上飛 - BlogJa...
Struts2教程
"struts中文問(wèn)題","struts國(guó)際化問(wèn)題"的終極解決方案
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服