如何实现返回上一页并自动刷新

Java编写WEB程序时,页面应该只是表示的部分,不应该含有任何Java脚本代码,所以主要考虑使用JS来实现这一功能。我们经常会碰到返回上一页,但是需要刷新页面上与状态相关的信息,从而避免重复操作,错误信息的弊端。先说两种方法:

 

1. 设置页面为不缓存,访问上一次页面就需要重新去服务器获取。(我没有试过)。

 

HTML

    

JAVA

if (request.getProtocol().compareTo("HTTP/1.0") == 0){ response.setHeader("Pragma","no-cache"); }else if (request.getProtocol().compareTo("HTTP/1.1") == 0){ response.setHeader("Cache-Control","no-cache"); }

PHP

header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache");

ASP

Response.Buffer = True Response.ExpiresAbsolute = Now() - 1 Response.Expires = 0 Response.CacheControl = "no-cache" Response.AddHeader "Pragma", "No-Cache"

 

2. 页面自动重载,在页面第一次运行时执行一次重载。

 

此方法稍微有点复杂,HTTP是没有状态的,请求一次页面后下次请求没有什么必然的关系,当然用Seesion可以,这样子给服务器很大的压力,还有一种获取状态的方法就是Cookie。在第一次打开一个页面时,让Cookie存一个值表示这是第一次,然后重载页面后,检测Cookie值是否是第一次,若是则置为非第一次状态。一个简单的实现如下。

var strcookie = document.cookie; var arrcookie = strcookie.spit("=") var statuscookie = arrcookie[1]; if(statuscookie == "" || statuscookie == "0"){ //retset flag document.cookie="statuscookie=1"; }else{ window.location.reload(); document.cookie="statuscookie=0"; }

 

如果仅仅是返回上页,不需要刷新,JS可以有很多种写法:

window.history.go(-1) window.history.back() window.history.back(-1)

如果需要刷新,可以有两种写法:

第一种,返回后重新请求该页面

window.history.go(-1); window.history.go(0) //winoow.loaction=window.location

第二种借助HTTP头信息

window.location.href=document.referrer

通过HTTP的头部中的HTTP_REFERER记录的链接来源地址实现跳转,源地址就是指这个页面从什么页面链接过来的页面。HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。这样子很容易获得访问来源。JSP,ASP,PHP都提供了访问次信息的方法,如果在页面中包含这些脚本语言,也可以使用,我还是不会使用它们的。

 

这跟浏览器的刷新机制有关,浏览器是通过Last-Modified和Expires来处理缓存的,有兴趣的可以参考http://blog.sina.com.cn/s/blog_6868b78d0100kgwp.html

 

 

 

你可能感兴趣的:(JavaScript)