`
Wallian_hua
  • 浏览: 29008 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Struts多模块&DispatchAction

阅读更多

 

  1. 一、      配置web.xml 文档    
  2. 添加模块moduleOne、moduleTwo    
  3. <!-- mainModule -->    
  4.     <init-param>    
  5.       <param-name>config</param-name>    
  6.       <param-value>/WEB-INF/struts-config.xml</param-value>    
  7.     </init-param>    
  8.         
  9. <!-- moduleOne -->    
  10.     <init-param>    
  11.       <param-name>config/moduleOne</param-name>    
  12.       <param-value>/WEB-INF/moduleOne/struts-moduleOne.xml</param-value>    
  13.    </init-param>    
  14.         
  15. <!-- moduleTwo -->    
  16.    <init-param>    
  17.     <param-name>config/moduleTwo</param-name>        
  18.     <param-value>/WEB-INF/moduleTwo/struts-moduleTwo.xml</param-value>    
  19.    </init-param>    
  20. 注:<param-name>格式必须这样写,<param-value>是指在WEB-INF目录下新建moduleOne目录再创建struts-moduleOne.xml,struts-moduleOne.xml格式与struts-config.xml相同。在此同时在WebRoot目录下新建moduleOne和moduleTwo的文件夹,用于区分模块和存放页面文件    
  21.   
  22. 二、      配置struts-config.xml    
  23. <struts-config>    
  24.         <data-sources />    
  25.         <form-beans type="org.apache.struts.webapp.CustomFormBean" />    
  26.         <global-exceptions />    
  27.         <global-forwards    
  28.             type="org.apache.struts.webapp.CustomActionForward" />    
  29.         <action-mappings    
  30.            type="org.apache.struts.webapp.CustomActionMapping">    
  31.            <action path="/main" forward="/index.jsp" />    
  32.         </action-mappings>    
  33.         <message-resources parameter="com.accp.struts.ApplicationResources" />    
  34. </struts-config>注意: type 这三个类是从何而来的呢??答:自定义的    
  35. 所以在配置 struts-config.xml之前我们应创建它们,当然每个类都必须extenx 相应的父类,如下:    
  36. CustomFormBean extenx FormBeanConfig    
  37. CustomActionForward extenx ActionForward    
  38. CustomActionMapping extenx ActionMapping    
  39. 这些类里面可以什么都不写,当然比较好点规范就是在里内添加一个属性,如下:    
  40. private String example =””;    
  41. 相应的get()set()    
  42.   
  43. 三、      配置子模块    
  44. 经过上面的配置基本已完成,那么我们现在来配置moduleOne子模块信息,添加action、actionFrom、jsp。    
  45. 注意:action 必须extends DispatchAction, jsp页面应放在WebRoot目录下moduleOne    
  46. struts-moduleOne.xml如下:    
  47. <struts-config>    
  48.         <data-sources />    
  49.         <form-beans>    
  50.            <form-bean name="moduleOneForm"    
  51.                type="com.accp.struts.form.ModuleOneForm">    
  52.            </form-bean>    
  53.         </form-beans>    
  54.         <global-exceptions />    
  55.         <global-forwards>    
  56.             <!-- 转发到moduleTwo module指定哪个模块,全局转发 -->    
  57.         <forward module="/moduleTwo" redirect="true" name="succeed" path="/displayUser.jsp"/>    
  58.         </global-forwards>    
  59.         <action-mappings>    
  60.         <!-- 主模块index.jsp link导航 -->    
  61.          <action path="/reg" forward="/userRegist.jsp"/>    
  62.          <action path="/regist" name="moduleOneForm" scope="session" parameter="user"    
  63.              type="com.accp.struts.action.ModuleOneAction">    
  64.           </action>    
  65.         </action-mappings>    
  66.         <message-resources parameter="com.accp.struts.ApplicationResources" />    
  67. </struts-config>    
  68.   
  69. index.jsp 如下:    
  70. <html:link module="/moduleOne" action="/reg.do">到moduleOne的用户注册</html:link>    
  71. 注意:module属性,是指定某个模块,对应的就在某个模块配置<action/>    
  72.   
  73. userRegist.jsp 如下:    
  74. <html:form action="/regist?user=addUser">    
  75.        name : <html:text property="name"/><br/>    
  76.        sex : <html:text property="sex"/><br/>    
  77.        age : <html:text property="age"/><br/><br/>    
  78.        <html:submit value="Submit"/><html:reset value="Reset"/>    
  79. </html:form>    
  80. 注意:user是moduleOne.xml <action parameter="user"……/>因为我们用到了DispatchAction,addUser是指action里的某个方法.    
  81.   
  82. ModuleOneAction.java如下:    
  83. public class ModuleOneAction extends DispatchAction {    
  84. public ActionForward addUser(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {    
  85.                ModuleOneForm moduleOneForm = (ModuleOneForm) form;    
  86.               System.out.println("name :"+ moduleOneForm.getName());    
  87.                System.out.println("age :" + moduleOneForm.getAge());    
  88.                System.out.println("sex :" + moduleOneForm.getSex());    
  89.                return mapping.findForward("succeed");}}    
  90.   
  91. displayUser.jsp    
  92. <body>    
  93.        name:${moduleOneForm.name}<br/>    
  94.        age:${moduleOneForm.age}<br/>    
  95.        sex:${moduleOneForm.sex}<br/>    
  96.        <html:link action="/main.do">回到主模块</html:link>    
  97. </body>    
  98. 注意:displayUser.jsp 位于moduleTwo目录,<html:link> 没指定module 所以默认从主模块的struts-config.xml寻找配对的<action>    
  99.   
  100. 四、发布测试…….实现主模块跳转到moduleOne子模块然后导航到另一moduleTwo子模块再导航到主模块    
  101. 阅读时请留意注意部分  

阅读时请留意注意部分

在网上看了很多这方面的资料.. 但是. 发现都是很肤浅的一个介绍.

所以在下刚刚做完的一个项目就是用一个多模块的所有跟大家一起分享一下..

大家配置好首先看看他的跳转关系.. 就会很明白他们是怎么一样工作的了

附件清晰版本

分享到:
评论
14 楼 hh001001 2008-02-23  
你说的东西他们原理思路都没弄清楚
这个怎么能算入门贴呢
迷糊
13 楼 zengyinbo 2007-10-10  
麻烦楼主也给我发一份源代码,多谢咯。
我的邮箱是:zengyinbo@yaoo.com.cn
12 楼 feigo 2007-09-29  
还在不?我的E-MAIL:feifigo@126.com,感谢!
11 楼 Wallian_hua 2007-09-29  
不对.. 应该是你email是什么. 我给源代码你看. 估计会清晰一点了.
10 楼 Wallian_hua 2007-09-29  
你加我把.发源代码给你看.. 汗....
9 楼 feigo 2007-09-28  
越改越乱了,还是不行.
    
8 楼 Wallian_hua 2007-09-27  
<a href="fund/fund_add.jsp" target="bottomFrame">添加基金产品</a>这句改成..
<html:link module="youmodule" page="/fund_add.do">增加基金</html:link><br><br>



你的子module配置如下

<struts-config>
    <action-mappings>
<action path="/fund_add" forward="/fund/fund_add.jsp"/>

    </acion-mappings>
</struts-config>



这样写应该没有问题了.
7 楼 feigo 2007-09-26  
楼主呀,我还是没有弄明白.  
主模块的页面都能正常工作,而子模块的页面都打不开.
页面是这样的:
  <div class="menutitle" onMouseOver="SwitchMenu('sub1')" onMouseOut="SwitchMenu('sub1')"><img src="img/1.gif" width="180"><span class="submenu" id="sub1"> - <a href="fund/fund_add.jsp" target="bottomFrame">添加基金产品</a><br>
    - <a href="fund/fund_find.jsp" target="bottomFrame">查询产品信息</a><br>
  </span> </div>
6 楼 Wallian_hua 2007-09-26  
feigo 写道
此贴总被认为是入门贴,可网上搜不到一个解决方法,为什么? 是否有人可以指点一二...


请认真看看我整理出来的..
这个已经不是一个入门了..
但是为什么我的帖子老是会被扣分呢.我就比较郁闷
5 楼 Wallian_hua 2007-09-26  
zdllionheart 写道
只有在config下配置的action才能使用
<html:form>标签

多模块配置
config/** 这些配置文件下的action 使用 <html:form>标签
就会出现 Cannot retrieve mapping for action 的异常..

跟踪了一下源代码,得出了这个结论..

不知道有没有人,能给出一个另外的解释?


其实这个很简单..
因为你在你的mian-config里面根本都没有配置这个action当然会说找不到这个action

那么你要想清楚你的思路.. 首先你要这么想..是要先进到主模块.在去子模块. 因为在你的子模块才有你
配置的东西.. 主模块的东西是写死的...

这位朋友整理下你的思路
4 楼 feigo 2007-09-24  
此贴总被认为是入门贴,可网上搜不到一个解决方法,为什么? 是否有人可以指点一二...
3 楼 feigo 2007-09-24  
问题还是没有解决,期待中...
2 楼 zdllionheart 2007-09-23  
只有在config下配置的action才能使用
<html:form>标签

多模块配置
config/** 这些配置文件下的action 使用 <html:form>标签
就会出现 Cannot retrieve mapping for action 的异常..

跟踪了一下源代码,得出了这个结论..

不知道有没有人,能给出一个另外的解释?
1 楼 feigo 2007-09-23  
按照楼主的方法,做了个DEMO,出了如下问题,还请指点.多谢!

web.xml部分配置如下:

<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/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>config/fund</param-name>
<param-value>/WEB-INF/struts-config/struts-config-fund.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>

struts-config-fund.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 >
<form-bean name="fundForm" type="com.fundSystem.fund.form.FundForm" />

</form-beans>

<global-exceptions />
<global-forwards >
<forward name="success" path="/success.jsp" />
<forward name="error" path="/error.jsp" />

</global-forwards>

<action-mappings >
<action
path="/insertFund"
attribute="fundForm"
name="fundForm"
input="/fund_add.jsp"
scope="request"
type="org.springframework.web.struts.DelegatingActionProxy" >
<forward name="success" path="/success.jsp" contextRelative="true"/>
</action>

</action-mappings>
<message-resources parameter="message_zh_cn" null="false"/>
</struts-config>

jsp页面如下:

<html:form action="/insertFund method="post">
<table width="564" height="82" border="1" align="center" cellpadding="0" cellspacing="0" bgcolor="#F2F2F2" bordercolor="#E6E6E6">
<tr>
<td width="203" height="28">产品编号:</td>
<td width="204"><html:text property="fund_no"></html:text>
*</td>
</tr>
<tr>
<td width="203" height="28">产品名称:</td>
<td width="204"><html:text property="fund_name"></html:text>
*</td>
</tr>
<tr>
<td height="26">产品价格(RMB):</td>
<td><html:text property="price"></html:text>
*</td>
</tr>
<tr>
<td height="26"> 产品描述:</td>
<td><html:textarea property="description"></html:textarea>
*</td>
</tr>
</table>
<p align="center">
<input type="submit" name="Submit" value="添加">
 
<input type="reset" name="reset" value="重置">
</p>
</html:form>



message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Cannot retrieve mapping for action /insertFund
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.fund.fund_005fadd_jsp._jspService(fund_005fadd_jsp.java:87)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

相关推荐

    struts DispatchAction

    Struts DispatchAction是一个在Struts框架中非常重要的概念,它是一种控制器组件,用于处理来自用户的...然而,随着技术的发展,如Struts2的出现,开发者可以选择更现代和模块化的解决方案来代替传统的DispatchAction。

    利用struts标签,dispatchAction,实现增删改查

    在本教程中,我们将深入探讨如何利用Struts的标签库和DispatchAction来实现数据的增删改查操作,这对于初学者来说是一个非常实用的学习主题。 首先,`DispatchAction`是Struts中的一个特殊Action类,它允许我们根据...

    Struts 之 DispatchAction

    在Struts框架中,`DispatchAction`是一个关键组件,它扮演着控制器的角色,负责处理用户请求并调用相应的业务逻辑。在本篇文章中,我们将深入探讨`DispatchAction`的工作原理、优点以及如何在实际项目中使用。 `...

    struts1_详解

    - **多模块**:在一个项目中可以有多个独立的功能模块,每个模块都有自己的`struts-config.xml`配置文件。 - **模块间的通信**:通过共享数据源或使用Struts提供的机制进行跨模块的数据传递。 #### 六、总结 ...

    struts_02源代码

    2. **15_struts_dispatchaction_usermgr**: DispatchAction 是 Struts 提供的一个特殊Action,它可以将请求分发到多个方法,而不是只调用一个处理方法。Usermgr 可能是用户管理模块,展示如何使用 DispatchAction ...

    Struts+Spring+Hibernate之选课系统

    在Struts中,DynaActionForm和DispatchAction被用来处理动态表单和动作映射,以减少Action和ActionForm的复杂性。同时,Tile布局框架用于创建可重用的页面组件,提高开发效率。此外,自定义标签可以用来处理特定的...

    struts文档很好的

    `struts_dispatchaction_usermgr`可能是一个示例,展示了如何使用DispatchAction来处理多个子操作。DispatchAction允许在一个Action类中定义多个方法,每个方法对应不同的请求路径,提高了代码复用性。 6. **...

    struts 1的标签的用法详细

    处理子应用模块的工具类,提供获取子模块配置的方法。 #### 9. Globals 包含一些全局常量,如错误信息、消息资源等。 ### 三、视图组件 #### 1. ActionForm 承载用户输入的数据,与`Action`配合处理业务逻辑。`...

    struts教程struts教程

    Struts 2是Struts的升级版,引入了更多特性,如拦截器(Interceptor)、更加灵活的配置方式以及对其他框架如Spring、Hibernate的更好支持。 **10. Struts与Spring的整合** 通过整合Spring,可以利用Spring的依赖...

    Struts2详细实例教程

    相比于Struts1,Struts2在架构上更加清晰,组件更加模块化,支持更丰富的插件体系,以及更好的国际化支持。 #### 二、Struts1与Struts2的MVC架构对比 **1. Struts1的MVC实现** Struts1的核心组件包括: - **...

    Struts教程

    - **应用模块**:支持将应用划分为多个模块,便于管理和维护。 - **JSP保护**:通过将JSP页面放在`WEB-INF`目录下,可以防止外部直接访问,提高安全性。 - **PrebuiltAction类**:提供了一些常用的Action基类,如`...

    struts

    - **应用模块(Application Modules)**:将应用程序划分为多个模块,每个模块可以有自己的配置文件和资源,便于管理和维护。 - **JSP页面保护**:通过将JSP页面放置在`WEB-INF`目录下,防止直接访问,增加安全性。 ...

    struts实现文件上传

    - **解决Action冗余**:当一个模块中有多个操作时,使用单独的Action类会导致类的数量过多,不利于管理。DispatchAction可以帮助我们集中处理这些操作。 - **配置文件**:在struts-config.xml中,可以配置一个...

    学习struts很好的文档

    Struts支持在一个Web应用中配置多个模块,每个模块都可以有自己的配置文件,便于管理复杂的Web应用程序。 #### 四、Struts组件 ##### 1.ActionServlet类 Struts的核心组件,负责接收HTTP请求、解析请求、调用...

    Struts1 控制器组件和动态表单详解

    **DispatchAction类**: DispatchAction使得处理多个业务逻辑更加灵活。例如,我们可以创建一个删除已点菜品的方法: ```java public ActionForward doDelPrepareVegetables(ActionMapping arg0, ActionForm arg1, ...

    struts精典实例开发教程(源代码)

    在Struts框架中,核心组件包括Action、Form Bean、Action Mapping、Controller Servlet(DispatchAction)以及JSP视图。以下是这些组件的具体解释: 1. **Action**:Action是业务逻辑处理的中心,负责接收请求,...

    Struts、Spring、Hibernate、SSH框架总结

    DispatchAction是Struts提供的一种扩展机制,它允许我们在一个Action类中定义多个处理不同请求的方法,提高了代码的组织性和复用性。通过DispatchAction,我们可以减少Action Bean的数量,提升系统的可维护性。使用...

Global site tag (gtag.js) - Google Analytics