Welcome to utopia!
专注于JAVA开发!!!
posts - 10,  comments - 9,  trackbacks - 0

由于最近做的一个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! 阅读(1448) 评论(4)  编辑  收藏 所属分类: J2EE框架

FeedBack:
# re: Struts 1.2多模块开发简单示例
2008-07-17 14:10 | 本拉登
你好:
我在使用struts多模块开发时,发现当在某个模块中请求一个jsp资源时,如果这个jsp中包含form,则会报错,说cannot retrieve action XXXX,如果请求.do就没有问题。不知道你遇到过没有。如果不能直接请求jsp,那我就感觉struts的跳转会相当麻烦。
谢谢  回复  更多评论
  
# re: Struts 1.2多模块开发简单示例
2008-07-17 14:11 | 本拉登
我的邮箱zzjjzzgggg@163.com
欢迎交流!  回复  更多评论
  
# re: Struts 1.2多模块开发简单示例
2008-11-05 11:26 | e_ville
@本拉登
Struts机制本来就是主张直接请求*.do,然后再跳转到对应的JSP页面去的,而不用直接去请求具体的JSP页面。
这样子的好处就是可以在对应的Action里写一些初始化的代码,或者做些其他操作,比如格式化时间等。  回复  更多评论
  
# re: Struts 1.2多模块开发简单示例
2011-03-03 09:34 | Johnxu
如果+上Spring怎么配  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 

<2008年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用链接

留言簿(3)

随笔分类

随笔档案

文章分类

文章档案

相册

utopian

搜索

  •  

最新评论

阅读排行榜

评论排行榜