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

    My First web Application

    Come da titolo mi stò avvicinando da poco al mondo jEE. Sto usando eclipse e come application server GlassFish.
    Ho scritto una servlet di prova che si collega ad un DB scritto sul DBMS postgresql ma quando provo ad eseguire la servlet ho il seguente errore ma non riesco a capire dove sia il problema.
    Ecco il log di glassfish:

    GRAVE: StandardWrapperValve[TrovaCapitoliServlet]: PWC1406: Servlet.service() for servlet TrovaCapitoliServlet threw exception
    java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFull y(ObjectInputStream.java:2281)
    at java.io.ObjectInputStream$BlockDataInputStream.rea dShort(ObjectInputStream.java:2750)
    at java.io.ObjectInputStream.readStreamHeader(ObjectI nputStream.java:780)
    at java.io.ObjectInputStream.<init>(ObjectInputStream .java:280)
    at TrovaCapitoliServlet.doPost(TrovaCapitoliServlet.j ava:65)
    at TrovaCapitoliServlet.doGet(TrovaCapitoliServlet.ja va:57)
    at javax.servlet.http.HttpServlet.service(HttpServlet .java:734)
    at javax.servlet.http.HttpServlet.service(HttpServlet .java:847)
    at org.apache.catalina.core.ApplicationFilterChain.se rvletService(ApplicationFilterChain.java:431)
    at org.apache.catalina.core.StandardWrapperValve.preI nvoke(StandardWrapperValve.java:462)
    at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:139)
    at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java:186)
    at org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:719)
    at org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:657)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipel ine.java:96)
    at com.sun.enterprise.web.PESessionLockingStandardPip eline.invoke(PESessionLockingStandardPipeline.java :98)
    at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:187)
    at org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:719)
    at org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:657)
    at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:651)
    at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:1030)
    at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:142)
    at org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:719)
    at org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:657)
    at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:651)
    at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:1030)
    at org.apache.catalina.connector.CoyoteAdapter.doServ ice(CoyoteAdapter.java:325)
    at org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:242)
    at com.sun.enterprise.v3.services.impl.ContainerMappe r.service(ContainerMapper.java:180)
    at com.sun.grizzly.http.DefaultProcessorTask.invokeAd apter(DefaultProcessorTask.java:633)
    at com.sun.grizzly.http.DefaultProcessorTask.doProces s(DefaultProcessorTask.java:570)
    at com.sun.grizzly.http.DefaultProcessorTask.process( DefaultProcessorTask.java:827)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute (DefaultProtocolFilter.java:152)
    at com.sun.enterprise.v3.services.impl.GlassfishProto colChain.executeProtocolFilter(GlassfishProtocolCh ain.java:71)
    at com.sun.grizzly.DefaultProtocolChain.execute(Defau ltProtocolChain.java:103)
    at com.sun.grizzly.DefaultProtocolChain.execute(Defau ltProtocolChain.java:89)
    at com.sun.grizzly.http.HttpProtocolChain.execute(Htt pProtocolChain.java:76)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(Pr otocolChainContextTask.java:67)
    at com.sun.grizzly.SelectionKeyContextTask.call(Selec tionKeyContextTask.java:56)
    at com.sun.grizzly.util.WorkerThreadImpl.processTask( WorkerThreadImpl.java:325)
    at com.sun.grizzly.util.WorkerThreadImpl.run(WorkerTh readImpl.java:184)


    Sono un po confuso sper che qualcuno di vogli possa illuminarmi.
    gazie 1000!!!

  2. #2
    Scusatemi ho dimenticato di postare il codice dove avviene l'errore:


    codice:
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		
    		ObjectInputStream ois=new ObjectInputStream(request.getInputStream());  
    		try {
    			File id_cap=(File)ois.readObject();
    			 Vector<String> v = new Vector<String>();
    			.......
    ........................................
    la linea in grassetto genera l'errore. Ma non capisco il perchè.

  3. #3
    sei sicuro che sullo stream ci siano oggetti Java? chi richiama questa servlet?
    Ivan Venuti
    Vuoi scaricare alcuni articoli sulla programmazione, pubblicati su riviste di informatica? Visita http://ivenuti.altervista.org/articoli.htm. Se vuoi imparare JavaScript leggi il mio libro: http://www.fag.it/scheda.aspx?ID=21754 !

  4. #4
    Non ne sono sicuro ma un applet alla pressione di un tasto dovrebbe passare l'oggetto ecco il codice:

    [/code]
    ..............
    ByteArrayOutputStream bufferVet = new ByteArrayOutputStream();
    ObjectOutputStream out=new ObjectOutputStream(bufferVet);
    out.writeObject(file);

    byte[] serobj= bufferVet.toByteArray();
    int i2=serobj.length;
    StringBuffer buffer=new StringBuffer();
    buffer.append("POST ");
    buffer.append("/TrovaCapitoliServlet");
    buffer.append(" HTTP/1.0\r\nUser-Agent: JavaobjectTunnel\r\n");
    buffer.append("Content-Type: application/java-object\r\n");
    buffer.append("Content-Lenght: "+bufferVet.size());
    buffer.append("\r\n\r\n");

    Socket s=new Socket("localhost",8080);
    OutputStream sout=s.getOutputStream();
    sout.write(buffer.toString().getBytes());
    sout.write(serobj);
    sout.write("\r\n".getBytes());
    s.close();
    ......
    .........
    [code]

    per testare prima eseguo la servlet sull'application server e poi lancio l'applet.

  5. #5
    non va bene: tu scrivi i byte restituiti dal metodo toString. Invece dovresti aprire un ObjectOutputStream e scrivere con il metodo write l'oggetto che poi verrà letto...
    Ivan Venuti
    Vuoi scaricare alcuni articoli sulla programmazione, pubblicati su riviste di informatica? Visita http://ivenuti.altervista.org/articoli.htm. Se vuoi imparare JavaScript leggi il mio libro: http://www.fag.it/scheda.aspx?ID=21754 !

  6. #6
    Originariamente inviato da ivenuti
    non va bene: tu scrivi i byte restituiti dal metodo toString. Invece dovresti aprire un ObjectOutputStream e scrivere con il metodo write l'oggetto che poi verrà letto...

    Ciao e grazie per la disponibilità...
    Allora ho modificato il codice dell'applet in questo modo:
    codice:
       ByteArrayOutputStream bufferVet = new ByteArrayOutputStream(); 
       ObjectOutputStream out=new ObjectOutputStream(bufferVet);
       out.writeObject(file);
       byte[] serobj= bufferVet.toByteArray();
       int i2=serobj.length;
       StringBuffer buffer=new StringBuffer();
       buffer.append("POST  ");
       buffer.append("/TrovaCapitoliServlet");
       buffer.append(" HTTP/1.0\r\nUser-Agent: JavaobjectTunnel\r\n");
       buffer.append("Content-Type: application/java-object\r\n");
       buffer.append("Content-Lenght: "+bufferVet.size());
       buffer.append("\r\n\r\n");
       Socket s=new Socket("localhost",8080);
       ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream());
       oos.writeBytes(buffer.toString());
       oos.writeObject(serobj);
       oos.writeBytes("\r\n");
       s.close();
    }

    Ma ottengo sempre lo stesso errore

    GRAVE: StandardWrapperValve[TrovaCapitoliServlet]: PWC1406: Servlet.service() for servlet TrovaCapitoliServlet threw exception
    java.io.EOFException.................


    Io per testare il tutto faccio cosi: in Project explorer di Eclipse tasto destro mouse sulla servlet e faccio RUN On SERVER ma già a questo punto viene fuori l'errore summenzionato (prima che l'applet faccia la richiesta di post (questo avviene anche con la versione precedente la mia ultima modifica della richiesta di post da parte dell'applet).

  7. #7
    Allora raga ho fatto alcune modifiche al codice

    ecco la parte sull'applet (al click di un pulsante invio una stringa PIPPO):

    codice:
     URL urlServlet = new URL("http://localhost:8080/MyFirstWebApp/TrovaCapitoliServlet");
     HttpURLConnection con = (HttpURLConnection)urlServlet.openConnection();
    
     con.setRequestMethod("POST");
     con.setDoInput(false);
     con.setDoOutput(true);
     con.setUseCaches(false);
     con.setRequestProperty("Content-Type","application/x-java-serialized-object");
    	
     ObjectOutputStream oos = new ObjectOutputStream(con.getOutputStream());
     oos.writeObject("PIPPO");
     oos.flush();
     oos.close();

    Mentre il codice della servlet è questo

    codice:
    public class TrovaCapitoliServlet extends HttpServlet {
    ........
    ............
    ..................
    ...............
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    {
    		
        try {
    		InputStream in = request.getInputStream();
    		if (in!=null && in.available()>0)
    		{
    	         	ObjectInputStream inputFromApplet = new ObjectInputStream(in);
    			String echo = (String) inputFromApplet.readObject();
    			response.getOutputStream().println("valore inviato "+echo);
    		}
    		else
    		  response.getOutputStream().println("nessun valore inviato.");
    				  
       }
       catch (ClassNotFoundException e) {
    		e.printStackTrace();
       }
    
    }
    Quando lancio la servlet l'output è sempre nessun valore inviato non viene mai visualizzata la stringa PIPPO.

    Qualcuno mi può aiutare ?



  8. #8
    Ho trovato la soluzione al dilemma
    Ecco cosa ho dovuto fare per risolvere il problema della mancata ricezione della stringa:

    nel metodo post della servlet ho fatto cosi:
    codice:
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
    
    try {
    			InputStream in = request.getInputStream();
    			if (in!=null)
                           {
    				ObjectInputStream inputFromApplet = new ObjectInputStream(in);
    				String echo = (String) inputFromApplet.readObject();
    				System.out.println("valore arrivato :"+echo);
    		
                             // questo codice per rinviare all'applet la stringa inviata alla servlet		
                   			response.setContentType("application/x-java-serialized-object");
    				OutputStream outstr = response.getOutputStream();
    				ObjectOutputStream oos = new ObjectOutputStream(outstr);
    				oos.writeObject(echo);
    				oos.flush();
    				oos.close();
                           }
    
    ............
    ovviamente l'applet è stata modificata in modo tale da ricevere la stringa:

    codice:
    try {
    			URL urlServlet = new URL("http://localhost:8080/web/TrovaCapitoliServlet");
    			//URL urlServlet = new URL(getCodeBase(),"TrovaCapitoliServlet");
    			System.out.println(urlServlet.toString());
    			HttpURLConnection con = (HttpURLConnection)urlServlet.openConnection();
    			
    
    			con.setRequestMethod("POST");
    			con.setDoInput(true);
    			con.setDoOutput(true);
    			con.setUseCaches(false);
    			con.setRequestProperty("Content-Type","application/x-java-serialized-object");
    			String invio=new String("PIPPO");
    			ObjectOutputStream oos = new ObjectOutputStream(con.getOutputStream());
    			oos.writeObject(invio);
    			oos.flush();
    			oos.close();
    			
    			// Getting request reponse code
    			int code = con.getResponseCode();
    	 
    			// Response is OK
    			String v[]=new String[1];
    			if (code == 200)
    			{
    				// Retrieving servlet response
    				ObjectInputStream inputStream = new ObjectInputStream(con.getInputStream());
    				try {
    					v[0]= new String((String) inputStream.readObject());
    					
    				} catch (ClassNotFoundException e1) {
    					e1.printStackTrace();
    				}
    				inputStream.close();
    	            
    			}
    			else
    			{
    				v[0]= new String("Servlet request has failed! Response code is: " + code);
    				System.out.println("Servlet request has failed! Response code is: " + code);
    			}
    			tableList.setListData(v);
    			
    		} catch (MalformedURLException e1) {
    			
    			e1.printStackTrace();
    		} catch (ProtocolException e1) {

    OK ....

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.