`
kangshunyao
  • 浏览: 7292 次
  • 来自: 青岛
社区版块
存档分类
最新评论

javaweb框架struts1中ActionForm的生命周期

    博客分类:
  • java
阅读更多
今天查找一个问题:我在列表页面添加一个查询条件,然后查询符合条件的数据.查询结果正确.然后我进入其它菜单项操作,当我再次进入列表页面时,系统还是按刚才的查询条件查询的.只要不我修改或清空查询条件,查询条件一直存在.我用的struts1.
很奇怪.以前没遇到过.先是怀疑客户端错误:
1:是不是IE缓存?抓包页面确实是被重新请求了.请求的URL中也没有上次的查询条件.那就不是IE缓存的问题.
2:那是不是页面的COOKIE保存了数据呢?抓包里返回的页面直接就填写了这些查询条件.
这样,问题就排除了客户端设置错误的可能了.那问题肯定在服务器上,一定时服务器端什么地方保存了ActionForm!
于是我就debug服务器端代码追查,在传到我写的Action里的from就已经有查询条件了,于是再往上一级查,找到了拼装ActionForm的方法,在struts1的RequestProcessor类里,代码如下:

private static ActionForm lookupActionForm(HttpServletRequest request, String attribute, String scope)
    {
        // Look up any existing form bean instance
        if (log.isDebugEnabled()) {
            log.debug(
                    " Looking for ActionForm bean instance in scope '"
                    + scope
                    + "' under attribute key '"
                    + attribute
                    + "'");
        }
        ActionForm instance = null;
        HttpSession session = null;
        if ("request".equals(scope)) {
            instance = (ActionForm) request.getAttribute(attribute);
        } else {
            session = request.getSession();
            instance = (ActionForm) session.getAttribute(attribute);
        }
        return (instance);
    }
从if ("request".equals(mapping.getScope())) { request.setAttribute(mapping.getAttribute(), instance); }这句可以看出来,原来当scorp是request时,会把Form保存在request里,否则保存在session里.从这里知道是哪儿存的了,我的配置文件没有配置scope属性,默认值就是session,也就是在这里会把ActionForm存到session里.
下面再找是怎么取的:在RequestUtils.createActionForm(request, mapping, moduleConfig, servlet);方法里,会调用它本身的另一个方法:

private static ActionForm lookupActionForm(HttpServletRequest request, String attribute, String scope)
    {
        // Look up any existing form bean instance
        if (log.isDebugEnabled()) {
            log.debug(
                    " Looking for ActionForm bean instance in scope '"
                    + scope
                    + "' under attribute key '"
                    + attribute
                    + "'");
        }
        ActionForm instance = null;
        HttpSession session = null;
        if ("request".equals(scope)) {
            instance = (ActionForm) request.getAttribute(attribute);
        } else {
            session = request.getSession();
            instance = (ActionForm) session.getAttribute(attribute);
        }
        return (instance);
    }
这下明朗了吧?原来是scope搞的鬼.还是对struts研究不深,对scope属性作用不了解.
分享到:
评论

相关推荐

    java Struts 1.x 框架 Web 开发

    10. **生命周期管理**:Struts 1.x 使用Servlet容器管理Bean的生命周期,对于非持久性的数据,通常使用Request或Session范围的Bean。 然而,随着时间的推移,Struts 1.x 因为其局限性和安全问题,逐渐被Struts 2 和...

    javaweb主流框架整合开发struts+spring例子

    在JavaWeb开发中,Struts和Spring是两个非常重要的框架,它们在企业级应用中有着广泛的应用。Struts是MVC(Model-View-Controller)架构模式的一个实现,主要用于控制应用程序的流程,而Spring则是一个全面的轻量级...

    javaweb,struts,spring,ibatis,hibernate,ajax等API及帮助文档

    Spring的API包括了Bean工厂、ApplicationContext、AOP代理等,它们使得开发者能够轻松管理对象的生命周期,并进行灵活的依赖注入。Spring MVC则提供了DispatcherServlet、ModelAndView等类来处理HTTP请求和响应。 3...

    Struts+Hibernate+Spring(javaweb核心框架)

    Spring的IoC容器管理着应用对象的生命周期和依赖关系,而AOP则允许开发者定义横切关注点,如日志、事务管理等,以减少代码的重复和增强模块的独立性。Spring还提供了数据访问抽象,使得与数据库的交互更加简单,它...

    实战突击JavaWeb项目整合开发实例各种框架

    1. **Struts框架**:Struts框架是JavaWeb开发中的核心组件,它通过Action和ActionForm实现业务逻辑与视图的分离。ActionServlet负责接收请求,转发给相应的Action,然后Action再调用Service层处理业务逻辑,最后由...

    javaweb主流框架整合开发strutstest例子

    在Java Web应用程序开发中,Struts1框架帮助开发者构建可维护性、可扩展性和结构清晰的Web应用。 Struts1框架的核心组成部分包括: 1. **ActionServlet**:这是Struts框架的入口点,负责接收HTTP请求,解析请求...

    精通Struts:基于MVC的JavaWeb设计与开发

    1. **Struts工作原理**:介绍请求处理流程,从用户请求到响应的整个生命周期。 2. **Struts配置详解**:讲解struts-config.xml的各个元素和配置方法。 3. **Action和ActionForm**:阐述如何创建和使用这两个关键类。...

    javaweb-选课管理系统

    在选课系统中,Spring管理着所有bean的生命周期,包括DAO(数据访问对象)、Service以及Action等组件。它通过IoC容器管理对象的依赖关系,降低了组件间的耦合度。同时,Spring的事务管理确保了数据操作的原子性和...

    SSH-javaWeb开发基础模板

    1. Spring的IoC和AOP:理解如何通过配置文件控制对象的生命周期,以及如何使用AOP实现横切关注点。 2. Struts的MVC模式:了解Action类、ActionForm、Result和JSP视图之间的关系,以及如何处理请求和转发响应。 3. ...

    javaweb_part15

    Spring 是一个全面的企业级应用开发框架,它提供了一个轻量级的容器,用于管理对象的生命周期和依赖注入。Spring 的核心特性包括: - 依赖注入(Dependency Injection, DI):允许开发者通过配置文件或注解来管理...

    《J2EE框架技术+–+Struts&JSF》教学大纲

    1. **理解Struts框架**:熟悉Struts框架的基本概念、架构与工作原理,掌握其在MVC模式中的角色定位,特别是视图和控制器组件的运作机制。 2. **掌握Struts控制器与视图组件**:熟练运用Struts的控制器组件如Action...

    基于javaweb+jsp的图书管理系统(struts+hibernate+spring+ext)

    在这个系统中,Spring主要负责管理对象的生命周期和依赖关系,以及提供事务管理。例如,通过Spring的IoC容器,可以方便地注入Struts的Action和Hibernate的数据访问对象(DAO),确保它们的实例化和配置。此外,...

    javaweb网上订餐系统

    首先,Spring框架作为整个系统的“胶水”,负责管理对象的生命周期和依赖关系。通过Spring的IoC(Inversion of Control)容器,可以轻松地实现组件间的解耦,提高系统的可维护性和可扩展性。同时,Spring还提供了AOP...

    JavaWeb简易投票管理系统

    1. **Struts**:作为MVC(模型-视图-控制器)设计模式的实现,Struts在JavaWeb应用中负责处理HTTP请求,并将这些请求映射到相应的业务逻辑上。它通过Action和ActionForm类来处理用户输入,利用配置文件(struts-...

    javaee struts框架+servlet+jsp+dao+fatory做的房屋祖凌系统

    在这个“房屋租赁系统”中,开发人员选择了Struts作为主要的MVC(模型-视图-控制器)框架,Servlet作为服务器端的控制层组件,而JSP则用于展示用户界面。同时,数据持久化层采用了DAO(数据访问对象)设计模式,并...

    CattTelecom

    《CattTelecom:基于Struts的项目...通过对该项目的分析和代码阅读,开发者可以深入理解Struts的生命周期、请求处理流程,以及如何将Struts与其他技术如Hibernate、Spring等集成,进一步提升自己的JavaWeb开发技能。

    javaweb_part18

    SSH 是三个开源框架的缩写,分别是 Spring、Struts 和 Hibernate,它们在 JavaWeb 开发中起到了至关重要的作用。Spring 提供了全面的架构支持,Struts 负责 MVC(Model-View-Controller)设计模式的实现,而 ...

    入门学习struts——合同管理系统

    你需要理解如何使用SQL进行数据操作,并且熟悉如何在Struts1中与数据库交互,如使用DAO(Data Access Object)模式。 3. **Action和ActionForm**:Action是处理用户请求的中心,它接收请求,调用业务逻辑并返回结果...

    java web整合开发王者归来光盘代码-第七章 servlet章节 (JSP+Servlet+Struts+Hibernate+Spring)

    在Java Web开发中,"整合开发王者归来"通常指的是将几种主流的技术框架融合在一起,以构建高效、可维护的Web应用程序。在这个特定的案例中,我们关注的是第七章关于Servlet的内容,结合了JSP(JavaServer Pages)、...

    java 整合struts,spring,hibernate等demo

    1. **Struts配置**:展示如何在struts-config.xml或struts2的配置文件中定义Action和ActionMapping,以及ActionForm的使用。 2. **Spring配置**:包括bean的定义、依赖注入的配置,以及Spring MVC的配置,如...

Global site tag (gtag.js) - Google Analytics