wysyłanie obiektu do servletu

0

witam, chciałem sie dowiedzieć czy mogę wysłać obiekt do servletu za pomocą żądania get, nie wiem dlaczego mi to nie działa proszę o podpowiedz.

metoda wysyłająca obiekt wygląda tak

 public void sendObjectToServlet(Object object, String arg) {
        
        String servletGet = webServerStr + "?" + "Action" + "=" + arg;
        ObjectOutputStream outputToServlet = null;
        
        try{
                URL controlerServlet = new URL( servletGet );
                URLConnection servletConnection = controlerServlet.openConnection();
             
                servletConnection.setDoInput(true);          
                servletConnection.setDoOutput(true);
                
                servletConnection.setUseCaches (false);
                servletConnection.setDefaultUseCaches (false);
                servletConnection.setRequestProperty("Content-Type", "application/octet-stream");
                
                outputToServlet = new ObjectOutputStream(servletConnection.getOutputStream());
                outputToServlet.writeObject(object);
                outputToServlet.flush();	        
	        outputToServlet.close();
                
        }catch (Exception e)
	    {
	      e.printStackTrace(); 
	    }
    }

natomiast po stronie servletu wygląda to tak :

protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        
        
        String action = null;
        action = request.getParameterValues("Action")[0];
        AccessDB accessDB = new AccessDB();
        
     
        if(action.equals("AddKontrahent")) {
            Kontrahent kontrahent = null;
            kontrahent = getKontrahentFromApplet(request);
            try {
                accessDB.addKontrahent(kontrahent);
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }
        
        
    }

protected Kontrahent getKontrahentFromApplet(HttpServletRequest request) {
           
           Kontrahent kontrahent = null;
           ObjectInputStream inputFromApplet = null;
           
           try{
               inputFromApplet = new ObjectInputStream(request.getInputStream());
               kontrahent = (Kontrahent) inputFromApplet.readObject();
               inputFromApplet.close();
               
     
    
           }catch (Exception e)
        {
			e.printStackTrace();    
        }
           return kontrahent;
    }
0

Dziwne podejście. Do wysyłania obiektów służy zazwyczaj SOAP i webservices, ale jak chcesz wysłać go po "zwykłym" http to:

  • zapisz obiekt jako strumień
  • strumień zamień na tekst/ciąg znaków
  • wywołaj url z parametrem, którego wartość to nasz zserializowany i zapisany jako strumień obiekt.
0

może i dziwne ale z takim podejściem spotkałem sie w bardzo wielu miejscach w sieci z tym ze obiekt był wysyłany postem, ale tamtym podejściem tez mi nie działało np
http://www.j-nine.com/pubs/applet2servlet/Applet2Servlet.html
http://www.codeguru.com/forum/archive/index.php/t-31968.html
, chciałem porostu wysłać prosty obiekt z apletu i żeby serwet mi go odebrał i dodał do bazy, chciałbym to zrobić najprościej bez uczenia się nowych technologi których w ogóle nie znam jak saop itp

0

Hm... ok. Już chyba wiem. Zabrakło serializacji. Klasa Object nie jest serializowana, a zatem nie można wysłać instancji do serwletu. w pierwszym linku jest przykład klasy:

class Foo implements java.io.Serializable
{
// normal declaration of data members,
// constructors and methods
}
0

nie mam pojęcia czemu to nie działa zmieniałem na inną klasę serializowaną i nadal nic, może problem tkwi w czymś innym niż kodzie, jeśli ktoś miał kiedyś z tym do czynienia to proszę o jakąś pomoc, bądź wskazówkę. Co ciekawe w drugą stronę tzn. gdy wysyłam obiekty z serwletu do appletu wszystko działa bez zarzutu

0

jeśli kogoś by to mogło naprowadzić to serwer rzuca mi taki log

java.io.EOFException
        at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2279)
        at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2748)
        at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
        at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280)
        at Controller.getKontrahentFromApplet(Controller.java:135)
        at Controller.doGet(Controller.java:75)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Thread.java:619)

1 użytkowników online, w tym zalogowanych: 0, gości: 1