`
yufenfei
  • 浏览: 801101 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

RequestProcessor及其在struts-config.xml中的配置

阅读更多

RequestProcessor及其在struts-config.xml中的配置

<controller processorClass="cn.ourbooks.common.MyRequestProcessor" />

通常来讲,好象不常用到。

但如果想从源头抓头对Web层的控制,就非得做一个RequestProcessor的过滤器。

 

在这里说一个最明显示的例子:

在使用Struts的过程中,对Session Timeout或者客户是否登录的判断往往是放到一个Action基类(继承于StrutsAction)中处理(反正以前我们的系统就是这样的),放到Action基类里的意图很明显是不需要在jsp或每个小处理的Action中处理这种共性的事务。

但是在测试过程中发现,StrutsFormvalidate在验证出错后,不会走Action而是直接mapping到错误页面了。这样,我们的Session Timeout的判断机制就不管用了。

这种情况下有时会给客户一个很不友好的感觉。客户输入了很多数据,提示有错(这时有可能已经Session Timeout,但系统没有觉查),改完了,再提交,如果验证通过,此时有可能会告诉客户,您没有登录或是Session Timeout。对于客户来讲大有捶胸顿足的气愤,要提示Session Timeout早提示,偏偏三番五次改正确了,却又提示Session Timeout

 

此时怎么办呢?

Struts在诸类框架中的老大地位,决定了其非常强的扩展功能。

我们可以配置自己的RequestProcessor,比如MyRequestProcessor

重置其中的processValidate方法,在调用父类的processValidate方法之前进行Session Timeout的验证,如果验证不过,就可以转移到公共Session Timeout的页面了,否则,就可以调用父类的processValidate方法。

写完MyRequestProcessor类后,还需要在struts-config.xml中配置一下,格式如下:

<controller processorClass="cn.ourbooks.common.MyRequestProcessor" />

这样,在调用ActionFormvalidate方法之前就进行了Session Timeout的验证,使系统对Session Timeout作到有效的把握。

 

以上只是例一,再谈个例二,例二是个补救的例子。

StrutsRequestProcessor中会维护一个action Map,里面放着用过的Action,在一个请求来了之后,先判断这个请求的actionaction Map中是否存在,如果不存在就创建一个,并加到action Map中,如果已经存在,就不创建新的了,取出来用就是了。

默认情况下,TomcatAP Searver)中也只是维护着一个Action Servlet,这一连串下来,有一个很关键的问题,我们需要注意,就是在Action中不能声明属性,如果声明了,这个属性是所有请求共享的。举例说明就是,假如在Action中声明了属性,并定义其默认值为123,第一个访问者(请求)将这个属性的值改为了abc,那么第二个访问者(请求)取得这个属性的值时,将得到abc,而不是123

哈哈,如果有个很糟糕的情况,你的系统已经做的很大了,而且在Action中也定了好多属性,怎么办呢?难道改造所有的Action,那代价太大了。

好了,还是RequestProcessor,我们可以在其子类MyRequestProcessor(也就是上例我们自己做的那个)中,重置processActionCreate方法,大家可以查一下Struts关于RequestProcessor类的源码,找到processActionCreate方法,原封不动拷到MyRequestProcessor中,注释下面几行:

            instance = (Action) actions.get(className);

            if (instance != null) {

                if (log.isTraceEnabled()) {

                    log.trace("  Returning existing Action instance");

                }

                return (instance);

            }

就实现了每个请求,都创建一个新的Action实例。这样,即使在Action中声明了属性,在多请求的情况下,也互不影响(虽然效率上可能低点,但是总比项目快结束了,再返工的好)。

 

分享到:
评论

相关推荐

    struts-config.xml文件的配置

    - Struts Controller组件的配置主要涉及ActionServlet的初始化参数,这些参数通常在Web应用的web.xml文件中设置,而不是struts-config.xml。不过,`&lt;controller&gt;`元素可以用来配置与控制器相关的属性,如拦截器...

    Struts_config.xml详解

    Struts框架的核心配置文件`struts-config.xml`是整个应用的关键组成部分之一,它定义了应用程序中各个组件(如Action、FormBean等)的行为与交互方式。本文将详细介绍`struits-config.xml`中的关键配置项,并解释其...

    Struts-API.rar_API_struts api

    4. **ActionMapping**:在struts-config.xml中定义,它将URL映射到特定的Action,同时可以包含关于Action的其他信息,如表单Bean、-forward等。 5. **RequestProcessor**:负责初始化ActionServlet,处理请求并调用...

    struts-1.2.7-lib.tar.gz

    学习和掌握Struts 1.2.7,开发者需要了解MVC模式、Action、Form Beans、配置文件(struts-config.xml)、国际化、异常处理、以及如何使用JSP标签库和Tiles进行视图设计。同时,理解其与Spring、Hibernate等其他框架...

    struts-1.2.9-src.rar

    在struts-config.xml中配置。 5. **Tiles框架集成**:Struts 1.2.9 支持Tiles框架,允许开发者创建可重用的页面布局(Tiles),提高了视图的复用性和可维护性。 6. **国际化与本地化**:Struts支持多语言环境,...

    struts-1.2.6.zip

    3. **配置文件**:Struts框架的核心配置文件是struts-config.xml,它定义了Action、ActionForm、ActionForward等元素,用于配置URL映射和业务逻辑流程。 4. **ActionForm**:ActionForm对象用来封装请求参数,它是...

    struts-api.zip

    2. **Struts配置文件**: 在Struts应用中,`struts-config.xml`是主要的配置文件,定义了Action映射、数据源、以及其他的配置信息。理解这个配置文件对于正确地配置和路由请求至关重要。 3. **RequestProcessor**: ...

    整合Spring与Struts的几种方法

    2. **使用DelegatingRequestProcessor替换RequestProcessor**:在`struts-config.xml`中,将Struts的RequestProcessor替换为Spring的`DelegatingRequestProcessor`,并在Spring配置文件中定义与Struts `&lt;action-...

    struts1-and-struts2.zip_between

    - **Struts1**:异常处理不够灵活,需要在struts-config.xml中配置全局异常处理。 - **Struts2**:利用拦截器处理异常,可以创建自定义的异常拦截器,使得异常处理更加模块化和可重用。 6. **页面导航** - **...

    Struts+Spring+Hibernate程序架设步骤.doc

    5. **配置相关文件**:在struts-config.xml中添加Struts-Spring插件,用于集成Spring。并定义Action,使用Spring的RequestProcessor。 6. **创建包**:按照MVC架构,创建model(实体类)、service(业务逻辑)、dao...

    Struts快速学习指南

    在Struts框架中,struts-config.xml是关键配置文件,它定义了Action、ActionForm、ActionMapping和其他相关组件的配置信息。例如: ```xml &lt;action path="/login" type="com.example.LoginAction"&gt; ...

    struts-apistruts-apistruts-api

    在学习和使用Struts API时,开发者需要掌握如何配置Struts-config.xml,创建Action和ActionForm,以及如何利用ActionServlet和ActionMapping进行请求处理。此外,对于高级功能,如Tiles的使用、拦截器的编写,也需要...

    Spring整合Struts

    配置ContextLoaderPlugin非常简单,只需在struts-config.xml文件的插件部分添加以下XML代码: ```xml &lt;plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"/&gt; ``` 为了自定义配置文件的位置...

    struts1.3.8开发包

    开发者需要在项目中引入这三个JAR文件,然后根据需求配置struts-config.xml和tiles-defs.xml文件。在JSP页面上使用Struts标签库,编写Action类来处理业务逻辑,ActionForm用于接收和验证用户输入。在服务器端,...

    Struts的jar包

    同时,还需要根据项目需求配置struts-config.xml或struts.xml(在Struts2中),定义动作映射、结果转发和拦截器等。 此外,Struts框架也强调了插件化和模块化,使得开发者可以通过添加额外的插件来扩展其功能,如...

    struts-1.2.9-all-src

    4. **ActionMapping**:描述了Action与请求URL之间的映射关系,它在struts-config.xml配置文件中定义。 5. **RequestProcessor**:处理请求的处理器,每个请求都会经过RequestProcessor的过滤和处理。 6. **Tiles*...

    struts1.2 使用流程

    在`struts-config.xml`中,控制器部分(`&lt;controller&gt;`标签)用来配置RequestProcessor类。例如: ```xml &lt;controller processorClass="strutsregprj.MyRequestProcessor"/&gt; ``` 这段配置告诉Struts框架使用`...

    Struts帮助文档.rar

    当ActionServlet接收到请求后,会根据配置文件(struts-config.xml)中的映射信息调用相应的Action。 3. **ActionForm**:用于收集用户在表单中输入的数据,它继承自org.apache.struts.action.ActionForm。当用户...

    struts1整合spring 通过代理RequestProcessor实现

    2. **Struts1配置**:接着,需要在Struts的配置文件(struts-config.xml)中,将默认的RequestProcessor替换为我们定义的Spring代理RequestProcessor。这样,当Struts接收到HTTP请求时,就会调用我们自定义的代理...

Global site tag (gtag.js) - Google Analytics