本文发表在 rolia.net 枫下论坛1. LOGIN,选座, 换座, 确认, 打印票据 5个模块 分别同时有2个影院 A,B的各自的模块配置文件.
例如: 选座模块下有A,B 2个模块配置文件: Struts-config-A.xml 和 Struts-config-B.xml. 第一个配置文件大概象:
<acton-mappings>
<action ...>
<forward name = "success" contextRelative = "true"
path ="/确认/confirm.jsp" redirect = "true"/>
...
</action-mappings>
因为A的选座模块局部转发到确认模块,所以path ="/确认/confirm.jsp" redirect = "true"/>
(注意这里,要想办法把A模块的标志加到confirm.jsp中.以便RequestProcessor能在在confirm.jsp的请求中鉴别出它属于A模块来加载A的相应配置文件,下面会讲到.)
第二个配置文件大概象:
<acton-mappings>
<action ...>
<forward name = "success" contextRelative = "true"
path ="/换座,/changeseat.jsp" redirect = "true"/>
...
</action-mappings>
因为B的选座模块局部转发到换座模块,所以path ="/换座,/changeseat.jsp" redirect = "true"/>
别的模块依此类推.
ActionServlet 只有一个, 只管转发请求, 不去动它, 但要重写各个模块的RequestProcessor 的 process() 用覆盖或Decorator 模式只扩展process()功能. 让它鉴别 ActionServlet转发的请求是来源于A的或来源于B的. 类似 request("A", chooseseat) 或 request("B", chooseseat),然后检索和加载相应的模块配置文件: Struts-config-A.xml 和 Struts-config-B.xml. 仍举例A, 当观众点了A选座模块的按钮, 要转到path ="/确认/confirm.jsp, 这时候在confirm.jsp中有A的标志, 当观众选好座位后点击confirm.jsp上的按钮.一个带有A标志的请求发到ActionServlet, 因为"确认"后是"打印票据",printticket.do,所以ActionServlet找到"打印票据"模块后,把请求转发给它的 RequestProcessor.因请求有A的标志,所以process("A" printticket) 能检索加载Struts-config-A.xml 而不是 Struts-config-B.xml.
依此类推,就把A与B区分开了,并且运行在同一个应用上.
我也只是想到这里, 能有些建议么?更多精彩文章及讨论,请光临枫下论坛 rolia.net