一个B/S系统,浏览器的刷新,后退会带来一些我们不希望看到的错误,我们不要这样,不要这样嘛~~
1. 刷新带来的重复提交
问题:例如,要增加一个用户,从addUser.jsp提交form到uerManagerAction,添加成功后返回到showUser.jsp,这时点击刷新,会又添加一次数据。
解决方法:使用Token
uerManagerAction.java
-
-
- saveToken(request);
- return mapping.findForward("addAdminPage");
struts-config.xml
- <forward name="addAdminPage" path="/WEB-INF/jsp/user/addAdmin.jsp"/>
在addUser.jsp中,会在
- <html:form action="/userManager">
下会自动加上
- <input type="hidden" name="Token" value="...."/>
这样一句,他的value是根据ID和系统时间自动生成的
uerManagerAction.java
-
- if(!isTokenValid(request)){
- request.setAttribute("msg","请不要重复提交!!!");
- saveToken(request);
- return mapping.findForward("addAdminPage");
- }else{
- resetToken(request);
- }
下面跟上自己的代码就行了。原理就不写了,网上很多........
2. 后退到不希望用户看到的页面
问题:1)用户注销后,点后退键又回到登录后页面
2)用户填写一个form,提交后,点后退键又到form页面,重复提交
解决方法:
对于问题1),首先登陆后给session里写入username等信息
uerManagerAction.java 登录action
- request.getSession().setAttribute("username", name);
- return mapping.findForward("welcome");
struts-config.xml
- <forward name="welcome" path="/WEB-INF/jsp/user/main.jsp" />
main.jsp
- <!---->
- "text/javascript">
- alert("请先登录");
- window.location.href="login.jsp";
-
- <!---->
uerManagerAction.java 注销action
-
-
- request.getSession().invalidate();
- return mapping.findForward("logout");
对于问题2)
后退带来的重复提交的问题,可以和刷新重复提交结合解决。
只要在填写form的页面禁用缓存,在加上使用Token,就可以比较好的解决
addUser.jsp
ok问题解决
分享到:
相关推荐
解决手机浏览器点击后退页面刷新问题,兼容苹果 safari浏览器和安卓浏览器。 js的window.onbeforeunload,onunload,window.addEventListener(‘pagehide‘, () => {}手机浏览器不生效
7.3 浏览器前进后退刷新
然而,在使用SPA时,一个常见的问题是如何处理浏览器的后退按钮。在传统的多页面应用(MPA)中,用户可以自由地在各个页面之间前进和后退。但在SPA中,由于只有一个页面,所以管理历史记录的方式略有不同。 首先,...
本篇将基于标题"判断浏览器刷新还是关闭"来深入探讨这个主题。 首先,我们需要理解浏览器的生命周期。一个网页从加载到关闭会经历几个关键阶段:加载(Load)、交互(Interaction)以及卸载(Unload)。在这些阶段...
js页面后退刷新前进
总的来说,解决手机浏览器后退按钮强制刷新页面的问题需要结合前端和后端的策略。在实践中,可能需要针对不同的浏览器进行适配和测试,以找到最合适的解决方案。同时,要注意平衡用户体验和性能需求,因为频繁的强制...
针对这个问题,我们可以采取多种策略来防止刷新后退时的重复提交。以下是针对"防止刷新后退重复提交"这一主题的详细知识点: 1. **令牌(Token)技术**: 服务器在处理表单提交前,生成一个唯一的令牌(Token),...
### 页面禁止各种浏览器后退 #### 背景与需求 在Web开发中,有时我们需要控制用户的行为,比如阻止用户通过浏览器的后退按钮返回到上一个页面。这通常发生在某些场景下,如表单提交确认、敏感操作确认等,以确保...
本文主要介绍了如何使用JavaScript技术在不刷新页面的情况下实现浏览器的前进后退功能,特别涵盖了HTML5的解决方案以及针对老旧浏览器的兼容性写法。在进行Web开发时,能够实现无刷新的页面浏览能够极大地提升用户...
本文将详细介绍如何使用Selenium Webdriver控制浏览器的大小、前进后退和刷新操作,以及探讨CSS高级语法的应用。 首先,让我们了解如何使用Selenium Webdriver来控制浏览器的窗口大小。在Python中,你可以通过调用`...
浏览器刷新事件可以通过监听`onbeforeunload`事件来间接实现,因为刷新页面本质上也是关闭了当前页面再重新打开。因此,刷新事件可以使用同样的处理逻辑。 ##### 3.3 监听浏览器前进/后退事件 监听浏览器前进或...
通过以上技术点的组合使用,我们可以有效地解决微信内置浏览器返回上一页时的强制刷新问题,提供更顺畅的浏览体验。这种解决方案对于那些依赖AJAX动态加载内容的单页面应用尤其重要,因为它确保了用户在页面间的导航...
为了解决这个问题,我们需要在执行Ajax请求时手动管理浏览器的历史记录。一种常见方法是使用HTML5的`pushState`方法,它允许我们在不实际导航的情况下向历史记录栈添加新的状态。结合`popstate`事件,我们可以监听...
在JavaScript编程中,有时我们需要禁用浏览器的默认后退功能,比如在用户完成登录、支付等操作后,防止用户意外点击后退按钮导致数据丢失或出现错误状态。本篇文章将详细解析如何通过JavaScript实现这一功能。 首先...
在Vue应用程序中,有时我们需要控制浏览器的前进后退(前进/后退按钮)操作,以满足特定的用户体验需求。在本文中,我们将深入探讨如何在Vue中禁用或管理这些功能,以及与`history`对象相关的一些核心概念。 首先,...
在这个项目中,“VB简单浏览器”是一个利用VB编写的迷你版网页浏览器,具备基本的浏览、前进、后退和刷新功能。这些功能在现代浏览器中是必不可少的,它们使得用户能够方便地浏览互联网资源。 首先,让我们深入了解...
- 用户仍然可以通过浏览器的前进按钮或刷新页面回到之前的状态。 - 对于某些用户来说,这可能会降低用户体验,因为禁用了他们习惯使用的导航方式。 ### 知识点五:替代方案 #### 5.1 使用`pushState`和`...
总的来说,解决Ajax请求后的浏览器刷新和历史导航问题,关键在于利用URL哈希和合适的插件来跟踪和恢复页面状态。通过合理使用`jquery.history.js`,开发者可以创建出既具有Ajax的流畅体验,又能正确处理历史导航的...
本教程将深入讲解如何使用WebView组件来实现刷新、后退和前进功能,以及如何在启动时展示应用LOGO并在三秒后自动跳转到MainActivity。 首先,我们来了解WebView的基本用法。在AndroidManifest.xml文件中,你需要...