`

struts1多模块的问题

 
阅读更多

struts1中有3种方法可以实现模块间跳转。

 

1. 使用Struts内建的SwitchAction

SwitchAction类是Struts内建的最有用的Action类之一,是专门为实现页面调转而设计的。在SwitchAction类内部,自动实现了消息资源和模块前缀的转换等操作。直接使用SwitchAction类只需要在Struts配置文件中声明即可,声明使用SwitchAction类的配置片段如下。

<action-mappings>

    <action

path="/toModule"

type="org.apache.struts.actions.SwitchAction"/>

</action-mappings>

其中path="/toModule"指明了该Action类的访问路径。如果要从当前模块跳转到另一模块moduleB,则该链接的形式为:

http://localhost:8080/xxx/toModule.do?prefix=/moduleB&page=/index.do

如果要调转到的模块是默认模块,默认模块的模块前缀是空串,链接的形式为:

http://localhost:8080/xxx/toModule.do?prefix=&page=/index.do

2. 使用转发

可以在全局或局部转发中显式地将转发配置为跨模块的转发。配置全局转发为跨模块转发的示例代码如下:

<global-forwards>

    <forward

name="toModuleB"

contextRelative="true

path="/moduleB/index.do"

redirect="true"/>

……

</global-forwards>

其中contextRelative属性设为true时表示当前path属性以/开头时,给出的是相对于当前上下文的URL

 

也可以把局部转发配置为跨模块转发

<action-mappings>

   <action ... >

       <forward name="success" contextRelative="true" path="/moduleB/index.do" redirect="true"/>

   </action>

   ……

</action-mappings>

 

3. 使用<html:link>标记

<html:link>Struts自定义标记,对超链接的行为进行了定制和封装。利用<html:link>标记可以直接将超链接声明为跨模块的跳转,使用方法为:

<html:link module="/moduleB" path="/index.do"/>

 

 

 

使用传统的html访问资源

 

<a href="/moduleB/Index.do">跳转</a>

 

使用struts1的标签库时需要注意的问题:

 

模块中的JSP页面如果使用了<html:form>标记来获得formbean中的数据,一定要注意,这种JSP页面不能直接作为直接的链接让用户点击,而是应该在该模块的action中,使用非重定向forward转入,否则该页面中的<html:form>会导致错误。

 

另外,jsp页面中,<html:form>标记的action属性要直接设置为该模块中对应的actionpath属性,不需要加上模块的前缀。鉴于这些原因,一般都会把模块中的JSP页面放入/WEB-INF目录中的某个文件夹,比如/WEB-INF/jsps目录,由于/WEB-INF目录不能直接被用户访问,这样,就会阻止用户无意中访问了对应的JSP文件而造成的错误。

原因如下:

html:form标签是怎样对action属性处理的:

/**
* Return the form action converted into a server-relative URL.
*/
public static String getActionMappingURL(String action, PageContext pageContext) {

HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
StringBuffer value = new StringBuffer(request.getContextPath());
ModuleConfig config =
(ModuleConfig) pageContext.getRequest().getAttribute(Globals.MODULE_KEY);
if (config != null) {
value.append(config.getPrefix());
}
.....................

return (value.toString());
}
 
此处的Globals.MODULE_KEY是ActionServlet处理request请求时,根据servletContext取得的prefix放进去的ModuleConfig。
所以,如果prefix为""的话(即struts默认的模块),只能从当前默认的ModuleConfig中查询action的路径

 

 

 

分享到:
评论

相关推荐

    struts1多模块多配置文件

    ### Struts1多模块多配置文件的开发流程详解 #### 一、引言 在大型项目的开发过程中,为了更好地组织代码结构,提高系统的可维护性和扩展性,通常会采用多模块的设计模式。对于使用Struts1框架进行开发的项目而言,...

    struts2 模块包含

    1. **Action配置**:在Struts2的配置文件(如struts.xml)中,每个Action元素代表一个模块。Action元素包含了与该模块相关的配置信息,如类名、结果页面、拦截器等。 2. **Interceptor拦截器**:拦截器是Struts2...

    struts多模块配制

    1. **模块化设计**:模块化是软件工程中的最佳实践,通过将大项目分解为多个小模块,可以更好地组织代码,便于团队协作,每个模块负责特定的业务逻辑,便于维护和测试。 2. **Struts配置文件**:每个模块通常有自己...

    struts多模块.pdf

    ### Struts多模块开发概述与实践 #### 一、引言 在当今的软件开发领域,多模块开发和软件扩展性已成为评估一个框架优劣的关键指标。尤其对于框架型软件而言,其是否支持多模块开发、是否具备良好的扩展性及与其他...

    Struts多模块[定义].pdf

    1. **多模块Struts应用配置**:每个模块需要一个独立的配置文件,文件名通常以`struts-config-模块名.xml`的形式表示。默认模块的配置文件通常是`struts-config.xml`,其他模块的配置文件则根据模块名进行命名。每个...

    Java进阶Struts多模块的技巧.rar

    对于模块1,所有的请求都将以`/module1/*`开头,对应的配置文件是`module1-struts.xml`。 在struts.xml中,我们可以定义全局的配置,比如拦截器栈、常量设置等。而对于模块特定的配置,例如Action类、Result类型和...

    Struts更多文章模块

    在本篇文章模块中,我们将深入探讨Struts框架在处理"更多文章"功能时的关键技术和实现方式。 一、Struts框架基础 1.1 Struts概述:Struts是由Apache软件基金会维护的,它的核心是ActionServlet,负责处理HTTP请求,...

    基于struts的登陆模块源码

    基于struts的登陆模块源码 基于struts的登陆模块源码 基于struts的登陆模块源码 基于struts的登陆模块源码

    Struts Login 登陆模块

    1. **Action类**:在Struts中,Action类是业务逻辑的入口点,处理用户请求并调用相应的服务层方法。登录模块通常会有一个LoginAction类,负责接收来自视图层的表单数据,进行身份验证,并根据结果转发到不同的页面。...

    struts1和struts2区别

    - **Struts1**:要求Action类继承自一个抽象基类,这限制了代码的灵活性,因为基于抽象类编程不利于多态性。 - **Struts2**:Action类可以实现Action接口或者直接使用ActionSupport基类,也可以是任何具有`execute...

    struts1_详解

    #### 五、Struts1 连接池与多模块操作 **5.1 数据库连接池** Struts1可以集成C3P0等连接池,但文档中提到的问题“数据库连接池缺DBCP三个包”指的是缺少Apache DBCP连接池的相关包,需要添加至项目中才能正常使用...

    struts多模块

    本文将详细介绍如何在Struts框架下实现多模块配置。 在Struts框架中,多模块的实现主要依赖于Action和配置文件的划分。每个模块可以视为一个独立的功能单元,拥有自己的Action类和对应的配置文件。下面我们将深入...

    struts2 与 struts1的区别

    - **Struts1** 只支持在模块级别定义Request Processors,这意味着模块内的所有Action都共享相同的生命周期。 - **Struts2** 则引入了拦截器栈(Interceptor Stacks)的概念,允许针对每个Action定义不同的执行路径...

    转:struts1与struts2的区别

    - **Struts1**: 支持为每个模块单独配置Request Processors(即生命周期管理器),但模块内的所有Action必须共享相同的生命周期。 - **Struts2**: 通过配置拦截器堆栈(Interceptor Stacks)来为每个Action定制不同...

    Struts2和Struts1的区别,详细点,主要说说Struts2

    - **Struts1**支持为每个模块提供单独的配置文件,但不同模块间的Action实例共享,这可能带来线程安全问题。 - **Struts2**支持通过拦截器栈(Interceptor Stacks)来为每个Action实例提供定制化的功能,这种方式...

    ssh项目(自定义struts1)

    然而,根据提供的信息,这里提到的是一个基于Struts1的项目,而不是Struts2。Struts1是Apache软件基金会的一个开源项目,它提供了一种用于构建MVC(Model-View-Controller)架构的应用程序的框架。 1. **Struts1**:...

    struts2和struts1 API及使用指南 chm

    Struts2则吸取了Struts1的经验教训,引入了拦截器(Interceptor)机制,使得业务逻辑的处理更加模块化和可扩展。Struts2的配置更加简洁,支持注解,使得开发者可以更快速地进行开发。此外,Struts2与Spring框架的...

    struts1 jar包

    4. `struts-tiles.jar`:提供了一种组织和重用页面布局的方式,使得页面设计更加模块化。 5. `struts-nested.jar`:支持嵌套表单和标签,使得在复杂视图中操作更方便。 6. `struts-el.jar`:支持Expression ...

    struts的模块话开发

    以下是对Struts模块化开发的详细说明。 在Struts框架中,模块通常指的是ActionServlet配置中的 `&lt;package&gt;` 元素。每个`&lt;package&gt;`都可以看作是一个独立的处理单元,包含了特定业务逻辑的Action类、配置文件以及...

    struts登陆上传模块

    总的来说,“Struts登陆上传模块”涉及到的主要知识点有:Struts2 Action设计,登录验证机制,文件上传处理,Struts2配置,以及可能的测试策略。理解并熟练运用这些知识,能够帮助开发者构建出稳定、安全的Web应用。

Global site tag (gtag.js) - Google Analytics