今天在做struts2实现下载功能时,在执行execute()调用的业务逻辑方法时会执行两次,对数据库的操作也插入了相同的信息。之前也做过类似的功能,但没有与数据库进行交互,也没有记录过下载次数,所以问题一直潜伏着,没有被发现。出现这个问题后,找了一下网上的解决方案,以下来自网络:
这个原因是浏览器引起的,你换成IE浏览器或FireFox浏览器做测试,就不会有这个问题。
不过其实我上面说的那个下载次数统计的设计方法是不合理的,我们理应在用户下载取消后不对其进行任何的下载次数统计而确认下载后,要当
用户正确下载完后才对其下载次数+1。
另一种解决方法:
Struts2 的 Action 被 无故 执行2次 或 执行多次
你请求了一次,日志却出现了2次,而且是2次相同的...
一个Action被执行了2次!(甚至有多次的情况)
出现这种情况的人 都是用 SSS!SSSS.action 来执行的
也就是说一个 Action类中,有N个方法被当成Action来用...
具体就是 你的方法名 用了 getXXX 为方法名
也就是说,如果你的Action是一个方法,而且以叹号的方式请求,方法还以get开头
如:getUserById() 、getACL() 等...
那么...你就会出现上面的错误...
我们的解决方案与上面不同,贴代码:
String fullPathString = FileUtils.combinDirectoryAndFile(dirString, fileName); InputStream fis = null; OutputStream toClient = null; try { fis = new BufferedInputStream(new FileInputStream(fullPathString)); }catch (FileNotFoundException ex) { ex.printStackTrace(); } finally{ try { if(fis!=null) { fis.close(); } if(toClient != null) { toClient.flush(); toClient.close(); } } catch (Exception e) { e.printStackTrace(); } } //以下为更新次数操作
相关推荐
本文将详细介绍如何在Struts2中解决这个问题,以及相关的技术概念。 首先,我们要理解Struts2中的拦截器(Interceptor)。拦截器是Struts2的核心组件之一,它们基于AOP(面向切面编程)思想,允许开发者在Action...
综上所述,Struts2框架提供了token机制以及灵活的跳转方式配置来解决表单重复提交的问题。开发者在使用时需要注意配置token相关标签和拦截器,并通过设置正确的结果视图跳转类型来防止因刷新页面导致的重复提交。...
- **Struts2的起源**:Struts2最初由WebWork和Struts1的核心开发者联合创建,其目的是为了弥补这两个框架的不足之处。 **1.2 开发环境配置** - **IDE选择**:Eclipse 3.2 + MyEclipse 5.5。 - **Servlet Container*...
#### 一、Struts2框架执行流程与核心组件 **题目背景:** 在Struts2框架中,FilterDispatcher是核心组件之一,它负责处理用户请求,并调用相应的Action进行业务逻辑处理。相较于Struts1和WebWork,Struts2的设计...
Struts2曾经因这个问题引发过严重的安全漏洞,攻击者可以通过构造特定的请求参数,导致任意文件被读取或执行。因此,对上传文件的存储路径和命名规则也需要严格控制,避免使用动态拼接的路径。 在工具方面,有一些...
通过这样的设计,初学者可以了解到Struts2的基本工作原理,以及如何利用拦截器解决实际问题,如防止重复提交。同时,这个项目也为实践提供了基础,让学习者能够动手实现一个完整的登录功能,并在此过程中深入理解...
在Lupin的分析中,他通过一个简单的示例展示了如何利用这个过程进行两次OGNL执行:第一次执行`%{name}`,得到2*3;第二次执行`%{2*3}`,得到结果6,将6作为value。这揭示了攻击者可能如何绕过沙盒限制,执行恶意代码...
Struts2提供了一种机制,即tokenSession,来解决这个问题。 首先,我们要理解什么是重复提交。在Web环境中,由于网络延迟或用户误操作,可能会导致同一个表单数据被多次提交,这就是重复提交。这种现象可能导致数据...
深入理解Struts2的源码,有助于我们更好地利用这个框架,解决实际开发中的问题,提升效率。在《Struts2权威指南》的第四章中,我们将探讨Struts2的4.1版本源码,以揭示其内部的工作原理和核心机制。 1. **...
Struts2和Hibernate是两种非常重要的Java开源框架,它们在Web开发中有着广泛的应用。Struts2是一个MVC(Model-View-Controller)框架,它主要用于处理用户请求并控制应用程序的流程,而Hibernate则是一个对象关系...
本节主要关注Struts在处理两个关键问题上的高级应用:防止重复提交和文件上传组件的使用。 **一、解决重复提交** 在Web应用程序中,重复提交是一个常见的问题,可能导致数据不一致或服务过载。Struts通过几种策略...
Struts2JQGrid是一个基于Java的Web开发框架,它结合了Struts2和JQGrid两个强大的工具,用于创建动态、交互式的网格数据展示和管理界面。在本项目中,Struts2作为MVC(Model-View-Controller)框架负责处理业务逻辑和...
4. **分页原理**:分页是为了解决大量数据一次性加载导致性能下降和用户体验不佳的问题。通常包括两个参数:当前页码和每页记录数。在SSH框架中,我们可以在Action中计算总页数,然后通过Hibernate的Criteria或HQL...
总的来说,这个基于Struts2和hsqldb的员工管理系统展现了强大的功能和灵活性,为企业提供了一套实用且易扩展的员工管理解决方案。通过合理的权限分配、丰富的功能模块以及与Excel的紧密集成,它能有效地提升企业管理...
本项目是关于“Ajax+Struts”实现分页的一个实例,旨在利用这两种技术的优势,提供一个高效、动态且用户友好的分页解决方案。 首先,让我们来理解一下核心概念: 1. **Ajax(Asynchronous JavaScript and XML)**...
在本篇文章中,我们将探讨几个关键的Struts应用技巧,包括如何利用Token解决重复提交问题、copyProperties的用法、文件上传的实现以及更多其他相关内容。 1. **利用Token解决重复提交** 在Web应用程序中,用户可能...
Struts2是一种基于MVC(Model-View-Controller)架构的开源Web应用框架,它以WebWork框架的设计理念为核心,同时融合了Struts1的优点,旨在提供一个更加灵活、高效且易于使用的Web开发解决方案。自其诞生以来,...
AOP通过代理模式实现,Spring提供了基于代理的AOP和基于ASM库的字节码增强两种实现方式。 Spring作为一个容器,负责管理所有Bean(应用程序对象)的生命周期和依赖关系。Spring容器根据XML配置文件或者Java配置类...