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

    java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest

    Ciao a tutti.
    Devo fare l'upload di una immagine, e sto usando le librerie di jakarta:
    commons-fileupload-1.2.1.jar
    commons-io-1.4.jar
    prendendo spunto da questo esempio:
    http://oscar982.wordpress.com/2008/0...n-jspservlets/
    Utilizzo NetBeans con Glassfish.
    Non credo di aver problemi con il codice... purtroppo però ottengo il seguente errore:
    codice:
    java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest
            at org.apache.commons.fileupload.servlet.ServletFileUpload.isMultipartContent(ServletFileUpload.java:68)
            at my.soloauto.uploadController.processRequest(uploadController.java:35)
            at my.soloauto.uploadController.doPost(uploadController.java:85)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
            at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:317)
    ... CONTINUA
    Dall'errore capisco che la classe ServletFileUpload, della libreria commons-fileupload, non trova la classe HttpServletRequest!!!
    Ma non riesco a spiegarmi come ciò sia possibile...
    Ho aggiunto le due librerie al mio progetto, sia al modulo web che al modulo ejb.

    Vi posto anche il codice che ho scritto:
    1) uploadController.java
    codice:
        @EJB
        private SoloAutoLocal SoloAutoBean;
    
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            int idAuto = (Integer)request.getSession().getAttribute("aId");
            
            boolean isMultipart = ServletFileUpload.isMultipartContent(request);
            if(isMultipart) {
                FileItemFactory factory = new DiskFileItemFactory();
                ServletFileUpload upload = new ServletFileUpload(factory);
                try {
                    List listaImmagini = upload.parseRequest(request);
                    SoloAutoBean.caricaFoto(idAuto, listaImmagini);
                }
                catch(FileUploadException fue) {
                    fue.getMessage();
                }
            }
    
            Auto auto = SoloAutoBean.getAuto(idAuto);
            request.setAttribute("auto", auto);
            RequestDispatcher dispatcher =
                    this.getServletContext().getRequestDispatcher("/modificaAuto.jsp");
            dispatcher.forward(request, response);
        }
    2) SoloAutoBean.java
    codice:
        public void caricaFoto(int idAuto, List listaImmagini) {
            try {
                Auto auto = em.find(Auto.class, idAuto);
                String nomeFile = auto.getMarca() + "_" + auto.getModello() + "_" +
                        auto.getAutoId() + ".JPEG";
                
                auto.setImmagine(nomeFile);
                em.flush();
                
                Iterator it = listaImmagini.iterator();
                while(it.hasNext()) {
                    FileItem immagine = (FileItem) it.next();
                    if(!immagine.isFormField()) {
                        File savedFile = new File(
                                "D:/Documenti/NetBeans Projects/SoloAuto/SoloAuto-war/build/web/Immagini/Auto/",
                                nomeFile);
                        immagine.write(savedFile);
                    }
                }
            }
            catch(Exception e) {
                throw new EJBException(e.getMessage());
            }
        }
    Spero qualcuno riesca a chiarirmi le idee!
    Grazie!

  2. #2
    Un'altra cosa, ho letto sull'help di NetBeans che le librerie devono trovarsi in una cartella WEB-INF/lib... Ho controllato tra le cartelle del mio progetto ma non c'è nessuna cartella lib, mentre di WEB-INF c'è ne stanno anche più di una. Comunque le due librerie che ho caricato si trovano in cartelle diverse da WEB-INF/lib... E' forse questo il problema???

  3. #3
    Sono andato sul sito dove ho scaricato le due librerie, ed ho trovato questa pagina relativa alle dipendenze della libreria commons-fileupload:
    http://commons.apache.org/fileupload/dependencies.html
    Tra queste dpendenze c'è anche: servlet-api-2.4
    Così ho cercato questa libreria su internet ma non ho trovato nessun sito da cui scaricarla... probabilmente è contenuta in J2EE.
    Comunque l'unica cosa che ho trovato è questa:
    http://saloon.javaranch.com/cgi-bin/...c&f=7&t=019761
    Dopodicché ho fatto una ricerca sul mio PC per vedere se esistesse una qualche libreria servlet-api. Ne ho trovate diverse; un paio su jboss altre su tomcat, ed una in particolare su glassfish_V3, un plugin caricato con netbeans ma mai utilizzato. Utilizzo infatti Glassfish v2!
    Dunque ho preso il jar, servlet-api-2.5.jar, che o trovato in glassfish_V3, e lo ho importato nel mio progetto.
    Il risultato è che non è cambiato nulla... il problema persiste, sempre lo stesso! Oramai non so più cosa fare!
    Forse sbaglio nell'importare le librerie?
    Ecco quello che faccio:
    Vado in tool-->Libraries, in una libreria dal nome FileUpload inserisco i due jar commons-fileupload e commons-io.
    Successivamente espando i nodi del mio progetto clicco col destro su Libraries--> Add Library, e carico quel FileUpload in cui ho inserito i jar.

  4. #4
    java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest
    at org.apache.commons.fileupload.servlet.ServletFileU pload.isMultipartContent(ServletFileUpload.java:68 )

    Vuol dire che nel file ServletFileUpload.java viene richiamato une classe(HttpServletRequest) che non è presente nel classpath.

    Tale classe fà parte di java ee, quindi in netbeans non devi importare nulla.
    Ovviamente se lavori con un progetto java se anzichè un progetto web, netbeans non ti mette a disposizione le librerie.. quindi controlla bene che il progetto creato sia un progetto web.

    In secondo luogo, dovresti provare a creare una servlet a prescindere dalle librerie di upload per verificare che qualcosa non si sia "rotto" all'interno di netbeans & co.

  5. #5
    boolean isMultipart = ServletFileUpload.isMultipartContent(request);
    l'istruzione usa un metodo deprecato, sarebbe più corretto usare FileUpload.isMultipartContent(new ServletRequestContext(request)). Lo stesso vale anche per l'istruzione

    List listaImmagini = upload.parseRequest(request);

  6. #6
    Per Santinizer:
    Ho provato ad usare la classe FileUpload al posto di ServletFileUpload, anche se sulle API non ho trovato che il metodo isMultipartContent fosse deprecato...
    ad ogni modo ora l'errore è diventato:
    codice:
    java.lang.NoClassDefFoundError: javax/servlet/ServletInputStream
            at my.soloauto.uploadController.processRequest(uploadController.java:36)
            at my.soloauto.uploadController.doPost(uploadController.java:74)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
    ... CONTINUA
    che non mi sembra molto diverso da prima! Non mi trova le librerie di java ee.

    Per peppem:
    Quando ho creato il mio progetto ho scelto un Enterprise Application con modulo EJB e modulo WEB... Quindi penso che le librerie di java ee siano messe a disposizione, altrimenti come fanno a funzionare le JSP e gli EJB che ho fatto??? Anche perchè lapplicazione parte... l'errore si verifica solo quando provo a fare l'upload!

    Il mio progetto è così composto:
    (triangolo) SoloAuto
    (bean) SoloAuto-ejb
    (globo) SoloAuto-war

    codice:
    In secondo luogo, dovresti provare a creare una servlet a prescindere dalle librerie di upload per verificare che qualcosa non si sia "rotto" all'interno di netbeans & co.
    se intendi di provare a fare l'upload senza usare le librerie:
    commons-fileupload e commons-io
    lo ho gia fatto in un altro progetto, e l'upload lo faceva senza problemi. Per fare ciò però ho utilizzato del codice preso da internet che non ho capito neanche come funziona. Il fatto che non ho capito come funziona mi ha spinto ad utilizzare queste due nuove librerie.

  7. #7
    Dando una veloce occhiata sul web sembrerebbe che il tuo problema è un problema di classpath.

    Su diversi forum si dice che le librerie di upload (common-upload e common-io) devono trovarsi in un classpath relativo all'applicazione (web-inf/......).

    Se hai messo le librerie, anche, o solo in un classpath "globale" es. su domains/domain1/lib/ o in generale sulle lib di glassfish o altro.. non dovrebbe funzionare nulla.

    Assicurati che nelle proprietà del progetto che usa le librerie ci sia il flag (accanto alla libreria) package attivato.

  8. #8

    Problemi con struts

    Sto provando a mettere in piedi un'applicazione semplice per effettuare l'upload di un file basandomi su struts. Premetto che sono un baby nell'ambiente.
    Prendendo d'esempio il seguente esempio:
    http://www.roseindia.net/struts/stru...dandsave.shtml

    da console una volta che carico il file dal form e clicco su upload file mi esce il seguente problema:

    GRAVE: Servlet.service() for servlet action threw exception
    java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUploadException
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Unk nown Source)
    at java.lang.Class.getConstructor0(Unknown Source)
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at org.apache.struts.util.RequestUtils.applicationIns tance(RequestUtils.java:167)
    at org.apache.struts.util.RequestUtils.applicationIns tance(RequestUtils.java:142)
    at org.apache.struts.util.RequestUtils.getMultipartHa ndler(RequestUtils.java:536)
    at org.apache.struts.util.RequestUtils.populate(Reque stUtils.java:394)
    at org.apache.struts.chain.commands.servlet.PopulateA ctionForm.populate(PopulateActionForm.java:50)
    at org.apache.struts.chain.commands.AbstractPopulateA ctionForm.execute(AbstractPopulateActionForm.java: 60)
    at org.apache.struts.chain.commands.ActionCommandBase .execute(ActionCommandBase.java:51)
    at org.apache.commons.chain.impl.ChainBase.execute(Ch ainBase.java:190)
    at org.apache.commons.chain.generic.LookupCommand.exe cute(LookupCommand.java:304)
    at org.apache.commons.chain.impl.ChainBase.execute(Ch ainBase.java:190)
    at org.apache.struts.chain.ComposableRequestProcessor .process(ComposableRequestProcessor.java:283)
    at org.apache.struts.action.ActionServlet.process(Act ionServlet.java:1913)
    at org.apache.struts.action.ActionServlet.doPost(Acti onServlet.java:462)
    at javax.servlet.http.HttpServlet.service(HttpServlet .java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet .java:803)
    at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:151)
    at org.apache.coyote.http11.Http11Processor.process(H ttp11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11 ConnectionHandler.processConnection(Http11BaseProt ocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.process Socket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThr ead.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlR unnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Unknown Source)

    Che devo fare?
    ho importato le librerie common-fileupload-1.1.1 e common-io-1.1 ma il risultato è rimasto lo stesso.
    Aiuto

  9. #9
    Risolto il problema, c'erano delle dipendenze che andavano gestite

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 © 2025 vBulletin Solutions, Inc. All rights reserved.