2010-08-16 18 views
7

Şirketimin yazılımını başlatan bir JNLP dosyası oluşturan bir Java/Wicket sayfam var. Bu sınıf isteğe bağlı olarak bazı URL parametrelerini alır ve bunları JNLP'de argüman olarak gömecektir. Kullanıcı bu JNLP dosyasını başlattığında, istemci uygulaması bu parametrelere dayalı olarak bir fonksiyon gerçekleştirecektir. İstemci yazılımı makinede zaten çalışıyorsa, JNLP sayfasını açmak yerine bu parametreleri yeni bir sayfa başlatmak yerine çalışan istemciye uzak bir çağrıyla beslemeye çalışır.Java/Wicket - Tarayıcıları önbelleğe alma sayfalarından nasıl durdurulur?

Bu kısımda sorun yaşıyorum. IE, Firefox ve Chrome'da yeni bir istemci açabilirim, ancak aynı URL'ye tekrar basmak yerine bir JNLP dosyası döndürür. Tarayıcı önbelleğini temizlemenin tüm tarayıcılarda bu sorunu düzelttiğini tespit ettim. Ayrıca, JNLP sınıfındaki ayrılma noktalarına da isabet edemiyorum, ki bu durum benim önerimi güçlendiriyor ki, bu durum Wicket'le garip olan bir şeyden daha çok bir istek meselesi. Firefox 3.6 hala göründüğü gibi, bu görünmüyor

@Override 
protected void setHeaders(WebResponse response) { 
    getPageMap().remove(this); 
    HttpServletResponse httpServletResponse = response.getHttpServletResponse(); 
    if (httpServletResponse != null) { 
     httpServletResponse.setDateHeader("Expires", 0); 
     httpServletResponse.addHeader("Cache-Control", "no-cache,no-store,private,must-revalidate,max-stale=0,post-check=0,pre-check=0"); 
     httpServletResponse.addHeader("Keep-Alive", "timeout=3, max=993"); 
    } 
} 

çalışmak:

Ben org.apache.wicket.markup.html.WebPage uzanır sayfam sınıfında, aşağıdaki kodu koymak sonucu önbelleğe almak için IE 7 çalışacak, ancak sadece bağlantıyı denedikten sonra birkaç kez yaratıyorum. Web geliştirme ve Wicket hakkında pek bir şey bilmiyorum ve bu benim için yeni, bu yüzden basit bir şeyi kaçırmam mümkün.

TL; DR: İstemci tarayıcısını önbelleğe almamak için bir Wicket sayfası nasıl alabilirim?

+0

Sayfa işaretlemesine '' eklemeyi denediniz mi? – Gytis

cevap

5

Bazı Wicket dahililerinde kullanılan bir saldırı (örneğin, org.apache.wicket.markup.html.image.NonCachingImage kaynağına bakın), URL'ye rastgele parazit eklemek içindir.

Temel olarak, tarayıcının aradığı URL'leri oluşturuyorsanız, web uygulaması tarafından yok sayılan ve rasgele değişen ve tarayıcısını önbelleğini yok sayan bir parametre ekleyebilirsiniz.

+0

Bu, Joao Pinto'nun çözümü, Jetty 6 tarafından sunulmakta olan sayfalarla herhangi bir tarayıcıyla çalıştığı görülmediği için, bu kolay bir yol gibi görünüyor. –

2

aşağıdaki sayfayı kontrol edin: http://palisade.plynt.com/issues/2008Jul/cache-control-attributes/

Firefox "Cache-Control" başlığını onur.

+1

Bu sorunumu doğrudan çözmese de, bu bağlantı gerçekten harika ve tüm bu direktiflerin neler yaptığını açıklıyor.Ben gerçekten bir web adamı değilim, bu yüzden bu şeylerin çoğu benim için bir gizem. –

0

Wicket'i çok iyi bilmiyorum ama WebResponse.setLastModifiedTime(Time time) kullanmayı denediniz mi? Biliyorum ki FF, sunucunuzun 304 Not Modified veya normal yanıtla yanıt vereceği bir If-Modified-Since başlık gönderir.

Sunucunuzun, karar vermek için WebResponse numaralı telefondan lastModifiedTime numaralı telefonu kontrol etmesi doğaldır.

Bu yardımcı olmazsa Firefox için Firebug almanızı ve istek ve yanıtları incelemenizi öneririz.

0
response.setHeader("Expires", "0"); 
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0, private"); 
response.setHeader("Pragma", "no-cache"); 

IE, Firefox vb. Ile çalışır, kesinlikle çalışmadığı tek tarayıcı konqueror'dur.

0

Wicket 6.11.0: Uygulama.get(). GetResourceSettings(). SetDefaultCacheDuration (Duration.NONE);

0

Hiç window.location.replace kullanarak sayfaları yüklemeyi denediniz mi?

İlgili konular