每本Struts的书都会说到多模块的Struts应用,不知道做项目的时候是否实用?
解决方案 »
- 急 急 急 急 有一个非常重要的问题,希望各位路过的大神帮下忙······
- JFileChooser fileChooser = new JFileChooser();这句出现空指针异常
- 如何将String转换成自定义数据类型
- hibernate 映射 实体 原理 ,那位大哥解释一下。不胜感激!
- swing 知识运用求解
- 请教一个php+mssql的问题
- 各位大哥,小弟又有难了,乞求大哥们拔刀相助,关于BS和CS◎◎◎◎◎◎◎◎◎◎◎◎◎(100分求解)
- 一个字节数组使用以后怎么清空,然后再使用呢?在线等待
- java中什么函数可以替代vb中的Char()函数,急!?
- 如何查询得到系统数据源的列表?
- 窗口的跳转问题!
- 会用truezip 工具包的 MMMMMMMMMMM
[email protected]
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>config/xxx</param-name>
<param-value>/WEB-INF/xxx.xml</param-value>
</init-param>
这样写叫多模块,而
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml,/WEB-INF/xxx.xml</param-value>
</init-param>
就不是多模块了,如果有人建议你改成这样,千万别信,呵呵。为什么这么说,因为多模块的根本作用是让servlet容器(比如TOMCAT)给你的多个模块每个模块一个ServletContext,也就是说相当于你的程序是多个同时在运行。而第二种写法其实还是只有一个config,也就是说只有servlet容器只给了一个ServletContext给你的应用程序。说的明白点,你有几个Struts config,就相当于有几个模块同时运行,而这样,方面不同的用户快速访问不同的模块。
-------------------------------
因为多模块的根本作用是让servlet容器(比如TOMCAT)给你的多个模块每个模块一个ServletContext,也就是说相当于你的程序是多个同时在运行。而第二种写法其实还是只有一个config,也就是说只有servlet容器只给了一个ServletContext给你的应用程序。说的明白点,你有几个Struts config,就相当于有几个模块同时运行,而这样,方面不同的用户快速访问不同的模块。
----------------------------------
兄弟,我说错了,杀了我吧。
纠正如下,ServletContext是只有一个的,但会创建多个ApplicationConfig对象。每个ApplicationConfig负责处理对应的模块,而且默认的配置文件对应的ApplicationConfig对象是最现被创建的,并不是我之前说的所有config对象同时被创建,
对不起啊,本人刚接触JAVA,接触J2EE刚1个多月,说错了,请大家与原谅。
现在把Sturt初始化过程说一下,是书上的原话,大家可以参考《jakarta struts编程》,Struts创始人推荐的书。
----------------------------------------
Sturts初始化过程取决于在web.xml文件中配置的初始化参数,servlet容器在首次启动或servlet的第一次请求到达时加载Struts ActionServlet。在这两种情况下,要保证init()方法被调用,并且必须在servlet处理任何请求之前完成。当init()被调用时,Struts框架包执行所有必要的初始化工作。,其步骤如下:1.初始化框架包的内部消息绑定。这些消息用来把信息,警告,和出错消息输出到日志文件。org.apache.struts.action.ActionResources绑定用来获得内部消息。
2.从web.xml文件加载控制ActionServlet类不同行为的初始化参数。这些参数包括config、debug、detail、convertNull。
3.从web.xml文件加载、初始化servlet名称和servlet映射信息。这些值将在提交HTML表单时,用于框架包输出正确的URL地址。在初始化过程中,框架包所使用的DTD会被注册。在下一步中DTD将用来验证配置文件。
4.加载、初始化默认应用程序的Struts配置数据,这些数据是配置初始化参数指定的。默认的Struts配置文件被解析,一个ApplicationConfig对象被创建并存储在ServletContext中。默认应用程序的ApplicationConfig对象和一个org.apche.struts.action.APPLICATION的值被存储在ServletContext中。
5.根据每个消息资源元素中指定的键属性,每个在默认应用程序的Struts配置文件中指定的消息源都将被加载、初始化并存储在ServletContext的适当位置。如果没有键被指定,消息源将存储在键值org.apche.struts.action.MESSAGE中。仅有一个消息源能当作默认值存储因为键值必须是唯一的。
6.在Struts配置文件中声明的每个数据源被加载和初始化。如果没有指定datasource元素,这一步将直接跳过。
7.加载并初始化在Struts配置文件中指定的每个插件。每个指定的插件都将调用init()方法。
8.一旦默认的应用程序正确的初始化,servlet init()方法将确定是否有应用程序模块被指定,如果有则对每一个模块重复第4歩到第7歩的步骤。
我正在深入学习Struts,不是学怎么用,而是学习它的内部机制,有共同兴趣的朋友可访问我的博客:http://www.blog.163.com/xiaoqulai/
大家一起探讨。我每天都会更新,希望大家给出意见。