» »

java servlet jpg browser refresh

java servlet jpg browser refresh

BRBR ::

1.imel sem.
<img src = 'en fixen path'

in če sem sliko tam zamenjal se je na klik na refresh prikazala nova slika

2. sedaj sliko naložim skozi servlet zato da dodam wattermark
<img src = '../servlets/WatermarkServlet'

in ne pomaga niti:
<img src = '../servlets/WatermarkServlet&rnd=ena random cifra'


Ne naredi osvežitve slike v browserju.

?
  • spremenil: BRBR ()

Spura ::

V response ko vracas sliko nastavi http header da ti ne cachea oz. expiration.
Pol pa zbris cache v browserju preden bos probal.

BRBR ::

Hmm, problem je zgleda na serverju. Zapomni si prejšnjo sliko v nekakšem cache, nimam pojma kam, in je ne izpusti ven.

1.Graphics2D je v kodi zato da na sliko narišem en randome string, ta se osveži vsakič ko na browserju kliknem osveži
(kodo za string sem odrezal ven, da je krajša) - torej refresh dela in ni problem v browser cache-u.

2.Delam v net beans, prvič zaženem, zgleda OK, Refresh - slika ista kajpak, random string se osvežuje, vse zgleda OK.

3.Na disku zamenjam sliko, recimo da se ji reče A.jpg (spodaj v kodi je to file), še vedno je 'A.jpg', ima pa drugo vsebino.

4.Refresh v browserju - randome string se osvežuje, slika pa je prejšnja verzija jpg-ja !?

5.Preverim na disku, itak ker delam lokalno, imam tam samo eno sliko (A.jpg), seveda novo verzijo.

6.V netbeans: 'finish debuger session'/'debug project' ... ne pomaga.

7.Restart netbeans - in se v brovserju prikaže prikaže nova slika

8.od tu dalje ponovno ista stvar od točke 2 dalje.

public void doGet(HttpServletRequest req, HttpServletResponse res)
    {

        try
        {
            javax.servlet.ServletContext sc = req.getSession().getServletContext();
            String path = sc.getRealPath("/");
            
            /*katera slika iz galerijeje trenutno aktivna znotraj seje*/
            HttpSession session = req.getSession(true);
            SessionGalery sessionGalery = (SessionGalery) session.getAttribute("sessionGalery");
            
            String filePath = path + "UploadedImages/" + sessionGalery.id_galery_obfuscated + ".jpg";
          
            File file = new File(filePath);
            if (!file.exists())
            {
                res.sendError(res.SC_NOT_FOUND);
                return;
            }

            ImageIcon photo = new ImageIcon(filePath);

            //Create an image
            BufferedImage bufferedImage = new BufferedImage(photo.getIconWidth(),
                    photo.getIconHeight(),
                    BufferedImage.TYPE_INT_RGB);
            
            Graphics2D g2d = (Graphics2D) bufferedImage.getGraphics();

            g2d.drawImage(photo.getImage(), 0, 0, null);

             //Free graphic resources
            g2d.dispose();

            //Set the mime type of the image
            res.setContentType("image/jpg");
            res.setHeader("Pragma", "no-cache");

            //Write the image as a jpg
            OutputStream out = res.getOutputStream();
            ImageIO.write(bufferedImage, "jpg", out);
            
            out.close();
            
       
        }
        catch (IOException ioe)
        {
        }
    }

Zgodovina sprememb…

  • spremenil: BRBR ()

BRBR ::

Problem je tule:
    ImageIcon photo = new ImageIcon(filePath);  


Lohka greš '100x' čez tole, menjaš datoteko na disku (na isti lokaciji in z enakim imenom, z drugo vsebino), pa bo 'photo' vedno imel podatke o prvem 'scanu'.
Dokler ne reštartaš netbensov.

Kakšen komentar ?

Zgodovina sprememb…

  • spremenil: BRBR ()

Spura ::

A ce pa z new File() beres datoteke imas isti problem? Morda ti app server chachea dostope do diska. Naceloma ce imas dostop do source kode od ImageIcon classa ni problem preverit kaj pocne.

Crtaj zgornje.
Zdele gledam in vidi da je to nek java swing shit in imas v konstruktorju tole: image = Toolkit.getDefaultToolkit().getImage(filename);
Ja tole je cist odvisno od Toolkita, lahko toolkit cachea prosto po presernu.

Zgodovina sprememb…

  • spremenil: Spura ()

Daliborg ::

Pozdravljeni ,

Sposojam si temo čeprav mogoče ni za isto zadevo.
ker nisem vešč v teh stvareh vas naprošam za obrazložitev in hkrati pomoč.

Namreč na intranetu imamo spisano stran v html-u in na njej laufa java script.
Na strani so tipke kjer lahko izberem vrsto dogodka in ga dodam s pritiskom druge tipke, ter s tem zabeležim tudi čas vnosa.

Moj problem je slednji, namreč ker imam stran odprto večino časa jo iz navade osvežim z tipko F5 (v internet explorer-ju). S tem se pa tudi vnese nov dogodek (isti ki sem ga nazadnje vnesel-le čas je tekoč) in čas vnosa, brez da bi pritiskal tipke s katerim bi moral te dogodke vnašati. Zanima me zakaj se to zgodi oz. kako se temu izogniti?
Sedaj pač ne osvežujem te strani ampak jo pač ponovno odpiram.Sem pa mnenja da je to stvar programiranja ali se motim?
Vnaprej se vam zahvaljujem za odgovore.
Format life:
Warning all life will be erased!
Do you want to continue?(y/n) Y_

Zgodovina sprememb…

  • spremenil: Daliborg ()

kr?en ::

Javascrip != Java

Pa samo html in javascript brez backenda, preko katerega se te dogotki shranijo v nek persistent storage, ti ne bo nic pomagal.

Daliborg ::

Se opravičujem ker nisem dobro pojasnil ter se izrazil, namreč izdelek ni moj.
Opisal sem kar sem opazil da se dogaja s to stranjo in je bistveno vprašanje to da mi ni jasno zakaj pošlje podatke o zadnjih ukazih če samo osvežim stran s tipko F5?
in hvala za popravek :)
Format life:
Warning all life will be erased!
Do you want to continue?(y/n) Y_

Daliborg ::

...tole sem dobil odgovor od njihovega IT:
"Dogodek se doda le v primeru, da ima uporabnik odprto aktivno okno "Dodajanje ročnih registracij". V primeru, da je okno samo odprto, uporabnik pa dela nekaj drugega se dogodek ne doda.

Onemogočiti tega žal ne moremo, potrebna bo previdnost pri uporabi."
Še vedno nevem zakaj pošlje podatke o zadnjem vnosu po osvežitvi strani z tipko F5. :/
Format life:
Warning all life will be erased!
Do you want to continue?(y/n) Y_

MrStein ::

Ker je GET request?
Kaj piše v URL-ju?
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!