Ⅳ
/*
循环struts
配置文件(用","
分开的多个struts
配置文件)并解析,
parseModuleConfigFile
执行之后可以
从struts-config.xml
等配置文件中得到
Ⅱ
中
actionConfigs/actionConfigList
、exceptions
、formBeans
、forwards
、messageResources
、plugIns
等的配置,并把得到的所有值封装到对象
ModuleConfig
对象(config)
中 */
List urls = splitAndResolvePaths(paths);
URL url;
for (Iterator i = urls.iterator(); i.hasNext();) {
url = (URL) i.next();
digester.push(config);
this.parseModuleConfigFile
(digester, url);
}
Ⅴ
//
把config
存储到servletContext
中
,属性名为Globals.MODULE_KEY
(
"
org.apache.struts.action.MODULE
"
)
getServletContext().setAttribute(Globals.MODULE_KEY
+ config.getPrefix(), config);
⑥ 用户资源文件的初始化
initModuleMessageResources(moduleConfig);
在上面第⑤
步的Ⅱ
中我们已经创建了ModuleConfig
对象
并在Ⅲ
和Ⅵ
中从struts-config.xml
等配置文件中得到
得到一些配置且封装到ModuleConfig
对象
中,所以在下面可以直接使用initModuleMessageResources(moduleConfig);
initModuleMessageResources(moduleConfig);
所做的工作:
⑴
/*
从moduleConfig
中读取所有的资源文件(包括
① 内部资源文件
和
⑤
中Ⅵ
利用Digester
读取的struts
配置文件指定的用户资源文件) */
MessageResourcesConfig[] mrcs = config.findMessageResourcesConfigs();
注:
此时moduleConfig
中默认只含有① 内部资源文件
ActionResources.properties
⑵
//
把resources
(包括
① 内部资源文件
和
⑥ 用户资源文件
)存储到servletContext
中
//
属性名为mrcs[i].getKey() + config.getPrefix()
for (int i = 0; i < mrcs.length; i++) {
if ((mrcs[i].getFactory() == null)
|| (mrcs[i].getParameter() == null)) {
continue;
}
if (log.isDebugEnabled()) {
log.debug("Initializing module path '" + config.getPrefix()
+ "' message resources from '" + mrcs[i].getParameter()
+ "'");
}
String factory = mrcs[i].getFactory();
MessageResourcesFactory.setFactoryClass(factory);
MessageResourcesFactory factoryObject =
MessageResourcesFactory.createFactory();
factoryObject.setConfig(mrcs[i]);
MessageResources resources =
factoryObject.createResources(mrcs[i].getParameter());
resources.setReturnNull(mrcs[i].getNull());
resources.setEscape(mrcs[i].isEscape());
getServletContext().setAttribute(mrcs[i].getKey()
+ config.getPrefix(), resources);
}
⑦ 用户插件的初始化
initModulePlugIns(moduleConfig);
在上面第⑤
步的Ⅱ
中我们已经创建了ModuleConfig
对象
并在Ⅲ
和Ⅵ
中从struts-config.xml
等配置文件中得到
得到一些配置且封装到ModuleConfig
对象
中,所以在下面可以直接使用initModulePlugIns(ModuleConfig config);
initModulePlugIns(moduleConfig);
所做的工作:
⑴
//
从moduleConfig
中读取所有的插件文件
PlugInConfig[] plugInConfigs = config.findPlugInConfigs();
PlugIn[] plugIns = new PlugIn[plugInConfigs.length];
⑵
//
把所有plugIns
存储到servletContext
中
//
属性名为Globals.PLUG_INS_KEY + config.getPrefix()
.......
getServletContext().setAttribute(Globals.PLUG_INS_KEY
+ config.getPrefix(), plugIns);
.......
⑧ 把struts
配置文件中的其他配置
存储到servletContext
中
,包括
initModuleFormBeans(moduleConfig);
initModuleForwards(moduleConfig);
initModuleExceptionConfigs(moduleConfig);
initModuleActions(moduleConfig);
⑨ 调用
moduleConfig.freeze();
固定组件配置
/*
使ModuleConfig
中的
actionConfigs/actionConfigList
、exceptions
、formBeans
、forwards
、messageResources
、plugIns
等的配置等变得不可改变 */
moduleConfig.freeze();
⑩ 解析以"config/"
开头的其他struts
配置文件
//
遍历web.xml
中servletConfig
配置的
initParameterNames
//
如发现以"
config/
"
开始的parameter
,则根据此值初始化其它的ModuleConfig
Enumeration names = getServletConfig().getInitParameterNames();
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
if (!name.startsWith(configPrefix)) {
continue;
}
String prefix = name.substring(configPrefixLength);
moduleConfig =
initModuleConfig(prefix,
getServletConfig().getInitParameter(name));
initModuleMessageResources(moduleConfig);
initModulePlugIns(moduleConfig);
initModuleFormBeans(moduleConfig);
initModuleForwards(moduleConfig);
initModuleExceptionConfigs(moduleConfig);
initModuleActions(moduleConfig);
moduleConfig.freeze();
}
<servlet>
<servlet-name
>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<!--
得到"config"
参数-->
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>config/admin
</param-name> <!--
得到"config/admin"
参数-->
<param-value>/WEB-INF/struts-config-admin.xml</param-value>
</init-param>
.......
</servlet>
在⑩ 解析以"config/"
开头的其他struts
配置文件
之后ActionServlet
的init()
方法还需要做
⑴
//
初始化其他模块的前缀
this.initModulePrefixes(this.getServletContext());
initModulePrefixes(this.getServletContext());
所做的工作:
/*
把其他模块prefixes
存储到servletContext
中,属性名为
Globals.MODULE_PREFIXES_KEY
(
"
org.apache.struts.globals.MODULE_PREFIXES
"
)
*/
context.setAttribute(Globals.MODULE_PREFIXES_KEY, prefixes);
⑵
//
设置configDigester = null
,释放内存
this.destroyConfigDigester();
至此struts
的核心类ActionServlet
的init()
方法完成servlet
的初始化工作
相关推荐
可以对struts进行深入的学习.个人觉得是个很不错的文档,因积分的问题不得不出卖自己的珍藏之物
struts1学习资料:里面包含struts源码工程 ActionServlet DispatchAction Action LookUpDispatchAction的用法 还包含html logic bean tiles标签的详细使用方法和validate验证框架的具体案例
如下图2所示: <br/> 控制:通过图2大家可以看到有一个XML文件Struts-config.xml,与之相关联的是Controller,在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。ActionServlet是一...
The file struts-config.xml instructs ActionServlet on how to use the extended classes. There are several advantages to this approach: • The entire logical flow of the application is in a ...
网上书店(使用技术为JSP+Servlet+IBatis,完成前台功能) 网上银行(使用技术为Struts+Hibernate。 JSP页面采用Tiles框架布局,表单验证没有采用Validator框架验证。 JDK:1.4以上 数据库:SQL Server2000 开发工具...
行动和ActionServlet的控制器实现 ,视图层的JSP文件组成。中央控制器控制,接收到一个请求,这个请求重定向到相应的 模块控制器执行动作。随后,该模块控制器处理请求并返回结果到中央控制器使用一个 JavaBean对象...
第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用...
以及最早学习到的java web中的javax.servlet.Filter的概念, 都是一种链式的处理流程,这一个环节处理完成,然后处理另一个环节,这样就可以在一个处理本身的之前和之后做一些事情了。 比如说,struts2中Action在...
非常适合java学习的一个项目,我们的刘春阳老师创造性的把所有的java相关的技术都结合在这一个Training项目中,深入浅出的传授给我们的知识,倾心大奉献了:里面包含了jsp,servlet,struts,spring,hibernate,Ext,js,css,...
JSP(TagLib)——>ActionForm——>Action ——> Event——>EJBAction——>EJB ——>DAO——>Database JSP(TagLib) (forward) <——Action <——EventResponse<—— ??Turbine:??主要应用方面:WEB层。??主要应用...
该案例既提供了ide无关的、基于ant管理的项目源码,也提供了基于netbeans ide的项目源码,最大限度地满足读者的需求。 作者简介: 李刚,从事10年的Java EE应用开发。曾任LITEON公司的J2EE技术主管,负责该公司的...