由于最近做的一个OA项目要用到多模块,所以特意找了资料来参考,不过很多讲的不是很详细,为了让像我一样菜的初学者能明白这个多模块配置,于是写了本文.
Struts的官方网站上其实有示例,只要下载1.2.6以上的开发包.
其实1.1也支持多配置文件,不过实现困难,我也没有试.
注意:我这里用的是Struts 1.2.
下面开始吧:
先说明一下,工程名为Module,分三个子模块,分别是module1,module2,module3,为了简单起见每一个模块下面只放了一个含有链接到其它模块的JSP文件(index.jsp),.目录结构如下:
以下是各个文件的代码:
Module\WebRoot\index.jsp:
<%@ page language="java" pageEncoding="GB2312"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-nested" prefix="nested"%>
<logic:redirect forward="welcome"/>
没什么内容,就是直接重定向到welcome,在这里Struts会查找WebRoot\WEB-INF\struts-config.xml下的<global-forwards>元素里,看看是否有<forward name="welcome" path="/Welcome.do" />这样名字的转向.
Module/WebRoot/WEB-INF/struts-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources />
<form-beans />
<global-exceptions />
<global-forwards>
<forward name="welcome" path="/Welcome.do" />
</global-forwards>
<action-mappings>
<action path="/Welcome" forward="/Welcome.jsp" />
<action path="/toModule" type="org.apache.struts.actions.SwitchAction" />
</action-mappings>
<message-resources parameter="com.utopian.struts.ApplicationResources" />
</struts-config>
因为有<forward name="welcome" path="/Welcome.do" />,所以它就会转向到/Welcome.do,然后Struts又会去查找到Web.xml里关于.do的处理:
Module\WebRoot\WEB-INF\web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Module Test</display-name>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<!-- module configurations -->
<init-param>
<param-name>config/module1</param-name>
<param-value>/WEB-INF/module1/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>config/module2</param-name>
<param-value>/WEB-INF/module2/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>config/module3</param-name>
<param-value>/WEB-INF/module3/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- The Usual Welcome File List -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
注意这里, <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern>,根据这个,Struts会找到action.然后去struts-config.xml查找所匹配的值,因为有<action path="/Welcome" forward="/Welcome.jsp" />,/Weclcome.do就会直接转到/Welcome.jsp.
Module\WebRoot\Welcome.jsp:
这个文件就是一些转向:
<ul>
<li><html:link module="/module1" action="/module1">这是第一个子模块module1的链接</html:link></li>
<li><html:link module="/module2" action="/module2">这是第二个子模块module2的链接</html:link></li>
<li><html:link module="/module3" action="/module3">这是第三个子模块module3的链接</html:link></li>
</ul>
在Struts 1.2里,如果在link标签里用了module属性,就表示是模块间转发,所以就会先到web.xml去里查找关于模块的定义,比如说这个 <param-name>config/module1</param-name><param-value>/WEB-INF/module1/struts-config.xml</param-value>,config是表示默认的模块,而config/则表示子模块,这个文件夹实际上不存在.接来的情况类似前面说的查找转向的过程.
还有什么不清楚的地方,请联系我,我会尽我所能帮助你!
下面有完整的项目下载:
Struts 1.2多模块开发简单示例
posted on 2006-04-01 11:59
Welcome to utopia! 阅读(1456)
评论(4) 编辑 收藏 所属分类:
J2EE框架