`

struts1 消息缓存机制

 
阅读更多

问题:

使用saveError(HttpSession,ActionMessages messages);保存了错误信息。

第一次返回时显示了错误信息,第二次发送请求时错误信息却没了,感到奇怪,深入了解便发现了struts1.x对

缓存信息处理机制的奥妙。

code: save error message

      protected void saveErrors(HttpSession session, ActionMessages errors) {

        // Remove the error attribute if none are required

        if ((errors == null) || errors.isEmpty()) {

            session.removeAttribute(Globals.ERROR_KEY);

 

            return;

        }

 

        // Save the errors we need

        session.setAttribute(Globals.ERROR_KEY, errors);//session范围

    }

 

ActionServlet 中对每次请求的处理:

    */

 1.   public void doPost(HttpServletRequest request, HttpServletResponse response)

        throws IOException, ServletException {

        process(request, response);

    }

 2.

 protected void process(HttpServletRequest request,

        HttpServletResponse response)

        throws IOException, ServletException {

        ModuleUtils.getInstance().selectModule(request, getServletContext());

 

        ModuleConfig config = getModuleConfig(request);

 

        RequestProcessor processor = getProcessorForModule(config);

 

        if (processor == null) {

            processor = getRequestProcessor(config);

        }

 

        processor.process(request, response);

    }

3.

     public void process(HttpServletRequest request, HttpServletResponse response)

        throws IOException, ServletException {

        // Wrap multipart requests with a special wrapper

        request = processMultipart(request);

 

        // Identify the path component we will use to select a mapping

        String path = processPath(request, response);

 

        if (path == null) {

            return;

        }

 

        if (log.isDebugEnabled()) {

            log.debug("Processing a '" + request.getMethod() + "' for path '"

                + path + "'");

        }

 

        // Select a Locale for the current user if requested

        processLocale(request, response);

 

        // Set the content type and no-caching headers if requested

        processContent(request, response);

        processNoCache(request, response);

 

        // General purpose preprocessing hook

        if (!processPreprocess(request, response)) {

            return;

        }

 

        this.processCachedMessages(request, response);//缓存信息处理机制

4.

  protected void processCachedMessages(HttpServletRequest request,

        HttpServletResponse response) {

        HttpSession session = request.getSession(false);

 

        if (session == null) {

            return;

        }

 

        // Remove messages as needed

        ActionMessages messages =

            (ActionMessages) session.getAttribute(Globals.MESSAGE_KEY);

 

        if (messages != null) {

            if (messages.isAccessed()) {//是否移除普通消息

                session.removeAttribute(Globals.MESSAGE_KEY);

            }

        }

 

        // Remove error messages as needed

        messages = (ActionMessages) session.getAttribute(Globals.ERROR_KEY);

 

        if (messages != null) {

            if (messages.isAccessed()) {

                session.removeAttribute(Globals.ERROR_KEY);

            }

        }

    }

 

由此我得到了结论。

 

这个问题刚好解决了目前困扰我的一个问题:

   1.附件上传功能: 

        当用户新增一条业务数据时,此时没有业务id,同时这个功能里要增加附件,附件作为单独部分处理,

但是此时没有业务id,不好对把附件id与业务id关联只得把附件id用session缓存起来,此时问题来了,

当新增业务数据时,上传附件,但却没有增加业务数据去进行了,其它的业务操作,当用户第二次进入该功能点

时,因为session缓存,此时该条数据依然存在,给用户造成了困扰。

  而用struts1的缓存处理机制很好的解决了我的问题:

  code:

 

 if (messages.isAccessed()) {//是否移除普通消息

                session.removeAttribute(Globals.MESSAGE_KEY);

            }

分享到:
评论

相关推荐

    struts1 API 开发文档

    10. **Plug-in机制**:Struts1支持插件,可以扩展框架功能,例如国际化、缓存管理等。 通过阅读和理解Struts1 API开发文档,开发者可以更好地掌握这个框架,从而更高效地构建Java Web应用。文档中包含了大量的示例...

    saif(struts1 interceptor)

    6. **性能优化**:虽然Struts1本身不支持拦截器,但通过"saif(struts1 interceptor)"插件,开发者可以实现缓存管理、性能统计等优化措施,提升应用程序的性能。 7. **与Struts2的对比**:虽然Struts1的拦截器机制受...

    Struts1源码解析

    5. 插件初始化,Struts1支持插件机制,增强了框架的可扩展性。`freeze()`方法使配置冻结,确保配置稳定。 接着,当客户端发出请求,ActionServlet通过`web.xml`中的配置拦截请求。在`HttpServlet`的`service()`方法...

    struts1+spring

    9. **性能优化**:在实际项目中,还需要考虑性能优化,如缓存机制、数据库连接池的配置、Struts1 的拦截器配置等。 10. **测试**:结合 Spring 的 Test 模块和 Mock 对象,可以方便地对 Struts1 和 Spring 组件进行...

    struts的jar+二级缓存的jar

    导入这些jar包后,开发者可以利用Struts2的拦截器(Interceptor)机制实现缓存策略,通过自定义拦截器存储和检索缓存数据。同时,配置Struts2的XML配置文件(struts.xml或struts-default.xml)来指定哪些Action应该...

    Struts2的工作机制原理分析及实例整理.pdf

    - **性能优化** - 采用了高效的缓存机制,减少重复加载资源带来的性能损耗。 综上所述,Struts2是一款功能强大且高度可定制化的Java Web开发框架,通过学习其工作机制和关键组件,开发者能够更好地利用Struts2的...

    struts1的api

    7. **Plug-in机制**:Struts1支持插件扩展,开发者可以创建自己的插件来增强框架的功能,比如国际化、缓存管理和数据校验。 8. **Validation框架**:Struts1提供了内置的验证框架,可以在ActionForm级别进行数据...

    struts1多国语言的实现

    - 为提高性能,可以考虑使用缓存机制来存储已加载的语言资源。 通过以上步骤,我们就能够在Struts1应用中实现多国语言支持,提供更好的用户体验。在实际项目中,可能还需要考虑到更多细节,如资源文件的版本管理、...

    Struts 1是全世界第一个发布的MVC框架,它由Craig McClanahan在2001年发布,该框架一经推出,就得到了世界上Java Web开发者的拥护,经过长达6年时间的锤炼,Struts 1框架更加成熟、稳定,性能也有了很好的保证。因此,到目前为止,Struts 1依然是世界上使用最广泛的MVC框架。

    在性能方面,Struts 1通过使用缓存和优化的请求处理机制,确保了良好的运行效率。尽管随着时间的推移,出现了许多其他MVC框架,如Spring MVC和Struts 2,但Struts 1因其简单易用和广泛的社区支持,仍然在许多现有...

    Struts1.x-Hibernate,曾删改查

    Hibernate提供了Session接口来处理数据库的CRUD(创建、读取、更新、删除)操作,以及事务管理和缓存机制。使用Hibernate,开发者可以避免编写大量的JDBC代码,提高了开发效率。 **Struts1.x与Hibernate整合:** 在...

    struts1+spring1+hibernater3写的新闻管理系统后台

    7. **错误和异常处理**:Struts1提供了全局的错误处理机制,能够统一处理异常并展示友好的错误页面。 综上所述,这个新闻管理系统后台利用SSH框架的集成,实现了高效、灵活且易于维护的后端功能。开发者可以通过...

    Struts1+Spring+hibernate

    Hibernate支持多种数据库,提供了缓存机制、事务管理和查询语言HQL,使得数据库操作更加便捷和高效。 SSH1的整合使用,通常涉及到以下步骤: 1. **配置Struts1**:设置struts-config.xml文件,定义ActionMapping、...

    struts1总结

    9. **Plug-in插件**:Struts1支持插件机制,可以方便地扩展框架功能,如国际化、缓存等。 10. ** strutstags标签库**:提供了丰富的JSP标签,简化了页面的编写,例如`<s:form>`、`<s:textfield>`等,这些标签与...

    基本的spring+hibernate+struts1架构

    Hibernate的缓存机制(如第一级缓存和第二级缓存)提高了性能,降低了数据库的负载。 Struts1则是MVC设计模式的实现,负责处理HTTP请求并分发到相应的控制器、模型和视图。在Struts1中,Action类作为控制器接收请求...

    struts1,hiberante权限管理系统

    通过实体类和映射文件,开发者可以方便地进行CRUD(创建、读取、更新、删除)操作,同时,Hibernate的缓存机制和事务管理也能提高系统性能和数据一致性。 Spring框架作为核心的依赖注入(DI)和面向切面编程(AOP)...

    struts1和struts2的国际化

    - **缓存机制**:为了提高性能,可以考虑使用缓存来存储已加载的资源包。 总的来说,Struts1和Struts2都提供了完善的国际化支持,但Struts2在灵活性和易用性上有所提升。理解并熟练掌握这两个框架的国际化机制,有...

    struts1和struts2比较

    - **Struts2**:Action实例通常会缓存起来复用,提高了性能。 5. **扩展性**: - **Struts1**:扩展性和定制化能力相对较弱。 - **Struts2**:通过插件机制和灵活的配置,支持高度的定制化和扩展性。 #### 结论...

    struts1.rarstruts1.rarstruts1.rarstruts1.rarstruts1.rarstruts1.rarstruts1.rarstruts1.rarstruts1.rarstruts1.rarstruts1.rar

    6. **Plug-ins**:Struts1支持插件机制,可以扩展其功能,例如国际化、验证、缓存等。 7. **生命周期**:一个典型的Struts1请求生命周期包括请求到达、DispatcherServlet拦截、ActionMapping查找、Action执行、结果...

    dtree树 struts1+hibernate+dtree

    然而,由于Struts2的出现,Struts1逐渐被淘汰,因为Struts2在很多方面有所改进,如更强大的插件支持、更灵活的拦截器机制等。尽管如此,理解Struts1的原理对于理解其他MVC框架,尤其是Struts2,仍然很有帮助。 然后...

    基于JSP+Struts+缓存的公司管理系统

    同时,他们还引入了缓存机制,以优化数据访问速度,减少数据库的负载,从而提升整体系统性能。 【JSP】:JavaServer Pages(JSP)是Java平台上的一种动态网页技术,它允许开发者在HTML代码中嵌入Java代码,实现...

Global site tag (gtag.js) - Google Analytics