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属性要直接设置为该模块中对应的action的path属性,不需要加上模块的前缀。鉴于这些原因,一般都会把模块中的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框架进行开发的项目而言,...
1. **Action配置**:在Struts2的配置文件(如struts.xml)中,每个Action元素代表一个模块。Action元素包含了与该模块相关的配置信息,如类名、结果页面、拦截器等。 2. **Interceptor拦截器**:拦截器是Struts2...
1. **模块化设计**:模块化是软件工程中的最佳实践,通过将大项目分解为多个小模块,可以更好地组织代码,便于团队协作,每个模块负责特定的业务逻辑,便于维护和测试。 2. **Struts配置文件**:每个模块通常有自己...
### Struts多模块开发概述与实践 #### 一、引言 在当今的软件开发领域,多模块开发和软件扩展性已成为评估一个框架优劣的关键指标。尤其对于框架型软件而言,其是否支持多模块开发、是否具备良好的扩展性及与其他...
1. **多模块Struts应用配置**:每个模块需要一个独立的配置文件,文件名通常以`struts-config-模块名.xml`的形式表示。默认模块的配置文件通常是`struts-config.xml`,其他模块的配置文件则根据模块名进行命名。每个...
对于模块1,所有的请求都将以`/module1/*`开头,对应的配置文件是`module1-struts.xml`。 在struts.xml中,我们可以定义全局的配置,比如拦截器栈、常量设置等。而对于模块特定的配置,例如Action类、Result类型和...
在本篇文章模块中,我们将深入探讨Struts框架在处理"更多文章"功能时的关键技术和实现方式。 一、Struts框架基础 1.1 Struts概述:Struts是由Apache软件基金会维护的,它的核心是ActionServlet,负责处理HTTP请求,...
基于struts的登陆模块源码 基于struts的登陆模块源码 基于struts的登陆模块源码 基于struts的登陆模块源码
1. **Action类**:在Struts中,Action类是业务逻辑的入口点,处理用户请求并调用相应的服务层方法。登录模块通常会有一个LoginAction类,负责接收来自视图层的表单数据,进行身份验证,并根据结果转发到不同的页面。...
- **Struts1**:要求Action类继承自一个抽象基类,这限制了代码的灵活性,因为基于抽象类编程不利于多态性。 - **Struts2**:Action类可以实现Action接口或者直接使用ActionSupport基类,也可以是任何具有`execute...
#### 五、Struts1 连接池与多模块操作 **5.1 数据库连接池** Struts1可以集成C3P0等连接池,但文档中提到的问题“数据库连接池缺DBCP三个包”指的是缺少Apache DBCP连接池的相关包,需要添加至项目中才能正常使用...
本文将详细介绍如何在Struts框架下实现多模块配置。 在Struts框架中,多模块的实现主要依赖于Action和配置文件的划分。每个模块可以视为一个独立的功能单元,拥有自己的Action类和对应的配置文件。下面我们将深入...
- **Struts1** 只支持在模块级别定义Request Processors,这意味着模块内的所有Action都共享相同的生命周期。 - **Struts2** 则引入了拦截器栈(Interceptor Stacks)的概念,允许针对每个Action定义不同的执行路径...
- **Struts1**: 支持为每个模块单独配置Request Processors(即生命周期管理器),但模块内的所有Action必须共享相同的生命周期。 - **Struts2**: 通过配置拦截器堆栈(Interceptor Stacks)来为每个Action定制不同...
- **Struts1**支持为每个模块提供单独的配置文件,但不同模块间的Action实例共享,这可能带来线程安全问题。 - **Struts2**支持通过拦截器栈(Interceptor Stacks)来为每个Action实例提供定制化的功能,这种方式...
然而,根据提供的信息,这里提到的是一个基于Struts1的项目,而不是Struts2。Struts1是Apache软件基金会的一个开源项目,它提供了一种用于构建MVC(Model-View-Controller)架构的应用程序的框架。 1. **Struts1**:...
Struts2则吸取了Struts1的经验教训,引入了拦截器(Interceptor)机制,使得业务逻辑的处理更加模块化和可扩展。Struts2的配置更加简洁,支持注解,使得开发者可以更快速地进行开发。此外,Struts2与Spring框架的...
4. `struts-tiles.jar`:提供了一种组织和重用页面布局的方式,使得页面设计更加模块化。 5. `struts-nested.jar`:支持嵌套表单和标签,使得在复杂视图中操作更方便。 6. `struts-el.jar`:支持Expression ...
以下是对Struts模块化开发的详细说明。 在Struts框架中,模块通常指的是ActionServlet配置中的 `<package>` 元素。每个`<package>`都可以看作是一个独立的处理单元,包含了特定业务逻辑的Action类、配置文件以及...
总的来说,“Struts登陆上传模块”涉及到的主要知识点有:Struts2 Action设计,登录验证机制,文件上传处理,Struts2配置,以及可能的测试策略。理解并熟练运用这些知识,能够帮助开发者构建出稳定、安全的Web应用。