[Servlet/Tomcat] : Servlet indisponible (erreur 503)

: Servlet indisponible (erreur 503) [Servlet/Tomcat] - Java - Programmation

Marsh Posté le 08-02-2004 à 18:05:47    

Hello,
 
voilà j'ai une applet qui est sensée envoyer une chaine de carctères à une servlet, celle-ci envoie la chaine à un service qui la renvoie inversée.
 
problème : quand l'applet essaie de se connecter à la servlet, j'ai l'erreur suivante :
 

127.0.0.1 - - [08/Feb/2004:17:48:32 1000] "POST /servlet/ServletSocket HTTP/1.1" 503 720


2004-02-08 17:48:32 StandardWrapper[:ServletSocket]: Marking servlet ServletSocket as unavailable
2004-02-08 17:48:32 StandardWrapperValve[ServletSocket]: Servlet ServletSocket is currently unavailable


 
Voici le code qui appelle la servlet :

Code :
  1. private void envoyerMouseClicked(java.awt.event.MouseEvent evt) {
  2.         try {
  3.             URL urlServlet = new URL(getDocumentBase(), "servlet/ServletSocket" );
  4.             URLConnection connexion = urlServlet.openConnection();
  5.             connexion.setDoOutput(true);
  6.                        
  7.             ObjectOutputStream sortie = new ObjectOutputStream(connexion.getOutputStream());
  8.             sortie.writeObject(new Transmission(1234, saisie.getText(), true));
  9.             ObjectInputStream entree = new ObjectInputStream(connexion.getInputStream());
  10.             Transmission transmission = (Transmission) entree.readObject();
  11.             message.setText("OK" );
  12.             if (transmission.isOk()) message.setText(transmission.getMessage());
  13.             else saisie.setText(transmission.getMessage());
  14.         }
  15.         catch (Exception erreur) { System.err.println("Erreur : " + erreur); }
  16.     }


 
et la méthode doPost de la servlet en question :

Code :
  1. public void doPost(HttpServletRequest request, HttpServletResponse response)
  2.     throws ServletException, IOException {
  3.         try {
  4.             System.out.println("OK." );           
  5.             ObjectInputStream entree = new ObjectInputStream(request.getInputStream());
  6.             Transmission transmission = (Transmission) entree.readObject();
  7.             int numPort = transmission.getPort();
  8.             try {
  9.                 Socket cnx = new Socket("localhost", numPort);
  10.                 PrintWriter envoie = new PrintWriter(cnx.getOutputStream(), true);
  11.                 envoie.println(transmission.getMessage());
  12.                 BufferedReader reception = new BufferedReader(new InputStreamReader(cnx.getInputStream()));
  13.                 transmission = new Transmission(numPort, reception.readLine(), true);
  14.             }
  15.             catch (Exception erreur) {
  16.                 transmission = new Transmission(numPort, erreur.getMessage(), false);
  17.             }
  18.             ObjectOutputStream sortie = new ObjectOutputStream(response.getOutputStream());
  19.             sortie.writeObject(transmission);
  20.         }
  21.         catch (Exception erreur) { System.err.println("Erreur : " + erreur); }       
  22.     }


 
help !  :cry:
 
et merci d'avance  :jap:

Reply

Marsh Posté le 08-02-2004 à 18:05:47   

Reply

Marsh Posté le 08-02-2004 à 23:00:26    

Ta servlet le protocole qu'elle comprend c'est HTTP.
Alors si tu veux discuter avec elle, utilise ce protocole plutôt que de lui envoyer des objets sérialisés.
Regarde comment on envoi des données via une requête POST.
 
Si tu tiens absolument à utiliser des objets sérialisés, oublie les servlets et écris plutôt un serveur RMI.
 
K.
 

Reply

Marsh Posté le 09-02-2004 à 00:21:17    

krosso a écrit :


Si tu tiens absolument à utiliser des objets sérialisés, oublie les servlets et écris plutôt un serveur RMI.


ben je voudrais bien j'ai pas le droit  :p
 
je dois écrire une application 3-tiers qui doit lire/écrire dans une BDD, donc g pas trop le choix je crois  :-/

Reply

Marsh Posté le 09-02-2004 à 20:12:27    

UP!
 
bon j'ai remarqué que mon applet bloquait à cette ligne là :
 

Code :
  1. ObjectInputStream entree = new ObjectInputStream(connexion.getInputStream());


 
mais bon, ça me dit toujours pas à quoi est due mon erreur 503 ni comment la résoudre, help!  :cry:

Reply

Marsh Posté le 09-02-2004 à 20:55:17    

krosso a écrit :

Regarde comment on envoi des données via une requête POST.

Reply

Marsh Posté le 09-02-2004 à 21:23:33    


oui, comme ça : http://emmanuel-remy.developpez.co [...] tm#servlet
et comme ça : http://www.j-nine.com/pubs/applet2servlet/listing3.txt
 
bref ça a rien d'extraordinaire comme utilisation...


Message édité par [ ZeD ] le 09-02-2004 à 21:24:11
Reply

Marsh Posté le 09-02-2004 à 22:46:20    

bon, si tu tiens à suivre cet exemple (je continue de penser que HTTP c'est pas fait pour ça, mais bon...).
 
à première vue dans ton applet il te manque au moins un  
connexion.setDoInput(true);  
et un  
connexion.setRequestProperty("Content-Type", "application/x-java-serialized-object" );
 
à première vue...

Reply

Marsh Posté le 09-02-2004 à 22:48:16    

et puis aussi des flush() et des close() sur tes streams.

Reply

Marsh Posté le 11-02-2004 à 00:15:58    

bon bah ça marche finalement, l'erreur 503 était due au fait que la servlet était pas compilée dans le bon rép. ... *hem*
 
merci quand même  ;)

Reply

Marsh Posté le 11-02-2004 à 02:47:58    

[ ZeD ] a écrit :


ben je voudrais bien j'ai pas le droit  :p
 
je dois écrire une application 3-tiers qui doit lire/écrire dans une BDD, donc g pas trop le choix je crois  :-/
 

et le rapport c'est quoi? [:mlc]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 11-02-2004 à 02:47:58   

Reply

Marsh Posté le 11-02-2004 à 12:23:36    

Citation :

et le rapport c'est quoi?


le rapport c'est que pour faire ça j'ai pas d'autres choix que d'utiliser des servlets il me semble.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed