Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Disegnare una X su un’immagine usando una Servlet

    Vorrei realizzare una servlet che crei una X su un’immagine. Se uso questo codice:
    codice:
    import javax.imageio.ImageIO;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    @WebServlet(name = "ImageServlet", urlPatterns="/image")
    public class ImageServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {BufferedImage bi = new BufferedImage(300,300, BufferedImage.TYPE_INT_ARGB);Graphics2D g2 = bi.createGraphics();
            g2.setPaint(Color.BLUE);g2.drawLine(10,10,bi.getWidth()-10,bi.getHeight()-10);
            g2.drawLine(10,bi.getHeight()-10,bi.getWidth()-10,10);g2.dispose();
            response.setContentType("image/png");
            ImageIO.write(bi,"PNG",response.getOutputStream());
        }
    }
    ottengo questo errore:
    HTTP Status 500 – Internal Server Error


    Type Exception Report
    Message Can't create cache file!
    Description The server encountered an unexpected condition that prevented it from fulfilling the request.
    Exception
    javax.imageio.IIOException: Can't create cache file!
    java.desktop/javax.imageio.ImageIO.createImageOutputStream(Imag eIO.java:423)
    java.desktop/javax.imageio.ImageIO.write(ImageIO.java:1589)
    ImageServlet.doGet(ImageServlet.java:30)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:634)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilt er(WsFilter.java:53)
    Root Cause
    java.nio.file.AccessDeniedException: C:\Program Files\Java\apache-tomcat-9.0.10\temp\imageio12188076398689945206.tmp
    java.base/sun.nio.fs.WindowsException.translateToIOException (WindowsException.java:89)
    java.base/sun.nio.fs.WindowsException.rethrowAsIOException(W indowsException.java:103)
    java.base/sun.nio.fs.WindowsException.rethrowAsIOException(W indowsException.java:108)
    java.base/sun.nio.fs.WindowsFileSystemProvider.newByteChanne l(WindowsFileSystemProvider.java:231)
    java.base/java.nio.file.Files.newByteChannel(Files.java:369)
    java.base/java.nio.file.Files.createFile(Files.java:640)
    java.base/java.nio.file.TempFileHelper.create(TempFileHelper .java:137)
    java.base/java.nio.file.TempFileHelper.createTempFile(TempFi leHelper.java:160)
    java.base/java.nio.file.Files.createTempFile(Files.java:905)
    java.desktop/javax.imageio.stream.FileCacheImageOutputStream.<i nit>(FileCacheImageOutputStream.java:88)
    java.desktop/com.sun.imageio.spi.OutputStreamImageOutputStreamS pi.createOutputStreamInstance(OutputStreamImageOut putStreamSpi.java:68)
    java.desktop/javax.imageio.ImageIO.createImageOutputStream(Imag eIO.java:419)
    java.desktop/javax.imageio.ImageIO.write(ImageIO.java:1589)
    ImageServlet.doGet(ImageServlet.java:30)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:634)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilt er(WsFilter.java:53)
    Note The full stack trace of the root cause is available in the server logs.

    Apache Tomcat/9.0.10
    Lo script dovrebbe essere corretto, non capisco perché su IntelliJ ottengo questo errore.
    Più pratica in futuro...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    non capisco perché su IntelliJ ottengo questo errore.
    L'errore "tecnico" è molto chiaro:

    java.nio.file.AccessDeniedException: C:\Program Files\Java\apache-tomcat-9.0.10\temp\imageio12188076398689945206.tmp

    Perché succede è un altro discorso, bisognerebbe indagare (sul tuo PC ).

    La questione è che la API ImageIO può sfruttare un meccanismo di caching su disco. Il perché lo usa è ben spiegato nel javadoc della classe ImageIO. E questo meccanismo è in parte configurabile: è (dis)abilitabile e la directory che usa per il caching è anche impostabile.


    P.S. comunque, verifica che esista davvero la "temp" del tomcat e non abbia permessi "strani" che possano impedire la scrittura di file (è più facile che manchi proprio la directory ... )
    Ultima modifica di andbin; 21-07-2018 a 19:25
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    La directory c'é.
    C:\Program Files\Java\apache-tomcat-9.0.10\temp
    quello che manca è imageio12188076398689945206.tmp
    Ho reinstallato Tomcat ma il problema persiste.
    Per installare il server basta decomprimere l'archivio in C:\Program Files\Java e inserire in IntelliJ il link alla directory? Giusto?
    C:\Program Files\Java\apache-tomcat-9.0.10
    Come posso verificare questi permessi strani?
    Il mio notebook è un normalissimo portatile con Windows 10!
    Più pratica in futuro...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Per installare il server basta decomprimere l'archivio in C:\Program Files\Java
    Aspetta ... non ci ho pensato prima! La C:\Program Files è notoriamente "privilegiata" (idem l'altra C:\Program Files (x86) che è per le applicazioni 32-bit).
    Un amministratore ci accede in scrittura, un utente "normale" no.

    Morale: mettere un Tomcat (che richiede cartelle di lavoro, di log, di file temporanei, ecc...) sotto le Program Files è una pessima idea.
    Ultima modifica di andbin; 21-07-2018 a 20:54
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    L'applicazione funziona se avvio IntelliJ come amministratore. Come posso dire a Windows di avviarmi sempre l'IDE come amministratore? Dove dovrei mettere la cartella di tomcat e la cartella del jdk?
    Ultima modifica di giannino1995; 21-07-2018 a 20:55
    Più pratica in futuro...

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    L'applicazione funziona se avvio IntelliJ come amministratore. Come posso dire a Windows di avviarmi sempre l'IDE come amministratore?
    Se il tuo è un utente "normale", lascia perdere questi tentativi. Sposta il Tomcat.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Se il tuo è un utente "normale", lascia perdere questi tentativi. Sposta il Tomcat.
    Se sposto in C funziona.
    grazie mille!

    come al solido hai una marcia in più... c'è poco da fare... sei un grande!
    Più pratica in futuro...

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Se sposto in C funziona.
    Generalmente è meglio non mettere nulla direttamente sotto C:\ (anche se ci sono software che lo fanno, purtroppo)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  9. #9
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Generalmente è meglio non mettere nulla direttamente sotto C:\ (anche se ci sono software che lo fanno, purtroppo)
    Accipicchia! Neppure sotto C! Dove dovrei metterlo?
    Più pratica in futuro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.