Méthodes d'une servlet.

Méthodes d'une servlet. - Java - Programmation

Marsh Posté le 20-06-2006 à 11:41:49    

Bonjour à tous,
 
Je débute dans le monde java, et je dois créer une servlet à partir d'une classe Java déjà existante.
 
Je m'explique, j'ai réalisé une classe java contenant 4 méthodes (principalement pour récuperer des données d'une base de données). J'aimerais que cette classe java devienne une servlet. Seulement, après avoir lu pamal de docs, je ne vois pas très bien comment faire (dans les exemples, ils parlent d'une méthode doGet à créer ou doPost, mais là, je devrais en créer 4?).
 
Les méthodes des servlets étant appelées ensuite par une application java.
 
 
Un exemple d'une classe java que je dois modifier :
 

Code :
  1. public class ServicesVehiculeImplementation
  2. {
  3. public ServicesVehiculeImplementation()
  4. {
  5. }
  6. public String[] rechercherMarques()
  7. {
  8.  RequetesSqlVehicule sql = new RequetesSqlVehicule();
  9.  sql.connexion();
  10.  String[] resultat = sql.rechercherMarques();
  11.  sql.deconnexion();
  12.  return resultat;
  13. }
  14. public String[] rechercherAlimentations(PocVehicle vehicle)
  15. {
  16.  RequetesSqlVehicule sql = new RequetesSqlVehicule();
  17.  sql.connexion();
  18.  String[] resultat = sql.rechercherAlimentations(vehicle);
  19.  sql.deconnexion();
  20.  return resultat;
  21. }
  22. public String[] rechercherGabarits(PocVehicle vehicle)
  23. {
  24.  RequetesSqlVehicule sql = new RequetesSqlVehicule();
  25.  sql.connexion();
  26.  String[] resultat = sql.rechercherGabarits(vehicle);
  27.  sql.deconnexion();
  28.  return resultat;
  29. }
  30. public String[] rechercherModeles(PocVehicle vehicle)
  31. {
  32.  RequetesSqlVehicule sql = new RequetesSqlVehicule();
  33.  sql.connexion();
  34.  String[] resultat = sql.rechercherModeles(vehicle);
  35.  sql.deconnexion();
  36.  return resultat;
  37. }
  38. public PocVehicle[] rechercherVehicules(PocVehicle vehicle)
  39. {
  40.  RequetesSqlVehicule sql = new RequetesSqlVehicule();
  41.  sql.connexion();
  42.  PWFPrimaVehicle[] resultat = sql.rechercherVehicules(vehicle);
  43.  sql.deconnexion();
  44.  return resultat;
  45. }
  46. }


 
 
Merci de votre aide, car la je bloque :(

Reply

Marsh Posté le 20-06-2006 à 11:41:49   

Reply

Marsh Posté le 20-06-2006 à 11:46:08    

ben suivant la requête que tu fais (HttpRequest), tu appelles l'une ou l'autre de tes méthodes.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 20-06-2006 à 12:00:19    

brisssou a écrit :

ben suivant la requête que tu fais (HttpRequest), tu appelles l'une ou l'autre de tes méthodes.


 
C'est a dire qu'a part etendre ma classe avec HttpServlet, je ne dois rien toucher d'autres à la classe ?  :??:  

Reply

Marsh Posté le 20-06-2006 à 13:33:00    

Commence par faire un HelloWorld avec une servlet pour te clarifier l'esprit. Ensuite rien n'empeche ta servlet d'utiliser une instance de ta classe existante, ce sera bien plus propre.


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 20-06-2006 à 13:35:08    

c'est possible oui, ou plutôt ta classe pourrais (devrait) être une classe de services (Factory, singleton, tout ça tout ça), et ta servlet appelle ta classe pré-existante.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 20-06-2006 à 14:12:15    

boulax a écrit :

Commence par faire un HelloWorld avec une servlet pour te clarifier l'esprit. Ensuite rien n'empeche ta servlet d'utiliser une instance de ta classe existante, ce sera bien plus propre.


 
J'ai deja fait une servlet de ce type, mais ca ne clarifie pas tres bien, et c'est pour ca que je viens demander des conseils ici ;) (vu que mon HelloWord se fait avec un doget comme sur tous les exemples de chaque cours :/).

Reply

Marsh Posté le 20-06-2006 à 14:23:30    

Une servlet est une classe qui réponds à des requetes HTTP. doGet capte un GET http sur ta servlet, doPost un POST.
Qu'est ce qui n'est pas clair ?


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 20-06-2006 à 14:35:49    

Et bien, ma classe Java comporte 4 méthodes. Mon but est donc de pouvoir l'une de ces 4 méthodes.  
 
Si j'utilises la méthode doGet, je ne pourrais executer qu'une des 4 méthodes (a moins que dans la requete, je mette un paramètre pour dire quelle méthode je souhaite lancer, et faire le traitement dans la méthode doGet, mais je trouve pas ca très propre).  
N'y aurait-il pas, un peu comme les services web, un moyen pour faire en sorte de garder ces 4 méthodes, et ensuite faire des requetes http pour appeler l'une des 4 méthodes ?

Reply

Marsh Posté le 20-06-2006 à 14:41:33    

4bis a écrit :

Et bien, ma classe Java comporte 4 méthodes. Mon but est donc de pouvoir l'une de ces 4 méthodes.  
 
Si j'utilises la méthode doGet, je ne pourrais executer qu'une des 4 méthodes (a moins que dans la requete, je mette un paramètre pour dire quelle méthode je souhaite lancer, et faire le traitement dans la méthode doGet, mais je trouve pas ca très propre).  
N'y aurait-il pas, un peu comme les services web, un moyen pour faire en sorte de garder ces 4 méthodes, et ensuite faire des requetes http pour appeler l'une des 4 méthodes ?


 
4 méthodes = 4 services
1 servlet = 1 service
4 services = 4 servlets
 
Tu dois faire le distingo entre les services (=servlet) que tu souhaites appeler dans ta page html.


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 20-06-2006 à 14:41:58    

Citation :

(a moins que dans la requete, je mette un paramètre pour dire quelle méthode je souhaite lancer  


 
VOILA !!
 
c'est un peu le sens des message que tu as un peu plus haut


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 20-06-2006 à 14:41:58   

Reply

Marsh Posté le 20-06-2006 à 14:45:55    

D'accord ok, merci à vous deux.  
 
Bon ca m'arrange pas du tout alors :D

Reply

Marsh Posté le 20-06-2006 à 15:06:24    

pourquoi ?


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 20-06-2006 à 15:35:36    

Parce que je dois avoir une quarantaine de méthodes à passer en servlet... ;)
 
A la base, je dois faire des services selon l'architecture REST, mais on m'a dit qu'avec des servlet, c'était presque pareil, donc je pensais utiliser les servlets.

Reply

Marsh Posté le 20-06-2006 à 15:50:51    

mais tu pourrais utiliser les servlets pour faire du routage vers tes méthodes...
http://localhost:8080/TonAppli/taS [...] aleur1&...

Code :
  1. class TaServlet extends HttpServlet {
  2. public void doGet(...) {
  3.   if (request.getParameter("quoi" ).equals("taMethode" )) {
  4.     String param1 = request.getParameter("param1" );
  5.     taMethode(param1);
  6.   } else if (...) {
  7.   ...
  8.   } else {
  9.     // exception
  10.   }
  11. }


   
 
non ?

Message cité 2 fois
Message édité par brisssou le 20-06-2006 à 15:52:24

---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 20-06-2006 à 15:52:05    

ouais, mais si t'en as 40... avec en plus le contrôle des parametres, et tout le tralala, ca devient vite chiant.

Reply

Marsh Posté le 20-06-2006 à 16:01:11    

brisssou a écrit :

mais tu pourrais utiliser les servlets pour faire du routage vers tes méthodes...
http://localhost:8080/TonAppli/taS [...] aleur1&...

Code :
  1. class TaServlet extends HttpServlet {
  2. public void doGet(...) {
  3.   if (request.getParameter("quoi" ).equals("taMethode" )) {
  4.     String param1 = request.getParameter("param1" );
  5.     taMethode(param1);
  6.   } else if (...) {
  7.   ...
  8.   } else {
  9.     // exception
  10.   }
  11. }


   
 
non ?


 
 
J'avoue que j'aime bien les choses propres et simples :D Et rajouter une méthode de ce type, je trouve pas ca terrible. Mais si vraiment je ne trouve rien d'autres du côté des services REST, oui, je pense que je devrais faire ca ;)
 
Surtout que comme l'a dit lorill, j'aurais des controles a faire sur les parametres, et la structure PocVehicule (qui est utilisé comme paramètre d'entrée de ma méthode contient beaucoup de variables).  


Message édité par 4bis le 20-06-2006 à 16:04:03
Reply

Marsh Posté le 20-06-2006 à 16:03:35    

j'ai envie de dire que c'est presque propre et simple, puisque c'est plus ou moins le fonctionnement de Struts avec les DispatchAction, moins les reflexion.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 20-06-2006 à 16:05:58    

brisssou a écrit :

j'ai envie de dire que c'est presque propre et simple, puisque c'est plus ou moins le fonctionnement de Struts avec les DispatchAction, moins les reflexion.


 
Par rapport à l'utilisation par exemple de services SOAP, je trouve ca moins propre ;) Mais, c'est vrai que si je dois utiiliser des servlets, ce sera surement la manière la plus propre et simple.
 
 
Mais malheuresement, on ne veut pas que j'utilises des services SOAP :o
 

Reply

Marsh Posté le 20-06-2006 à 16:28:15    

brisssou a écrit :

j'ai envie de dire que c'est presque propre et simple, puisque c'est plus ou moins le fonctionnement de Struts avec les DispatchAction, moins les reflexion.


spa paske struts le fait que c'est propre hein [:dawao]

Reply

Marsh Posté le 20-06-2006 à 16:31:16    

je dis que c'est surement propre parce que j'imagine qu'ils (les dev' de Struts) sont plus malins et nombreux que moi. Et comme ils ont dû réfléchir à l'implémentation du système à deux fois, je me dis que c'est probablement très potable.
 
[:smiley-qui-hausse-les-epaules-comme-pour-dire-que-j-ai-plusèd-arguments:]


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 21-06-2006 à 10:27:22    

brisssou a écrit :

mais tu pourrais utiliser les servlets pour faire du routage vers tes méthodes...
http://localhost:8080/TonAppli/taS [...] aleur1&...

Code :
  1. class TaServlet extends HttpServlet {
  2. public void doGet(...) {
  3.   if (request.getParameter("quoi" ).equals("taMethode" )) {
  4.     String param1 = request.getParameter("param1" );
  5.     taMethode(param1);
  6.   } else if (...) {
  7.   ...
  8.   } else {
  9.     // exception
  10.   }
  11. }


   
 
non ?


 
N'ayant rien trouvé d'autres, j'ai pris ta solution.
 
Seulement, j'ai une dernière question. Sachant que j'appelle la servlet à partir de code java, comment est-ce que je retourne le resultat ? Car pour une chaine de caracteres, pour l'instant, j'ai fait comme ca :
 

Code :
  1. PrintWriter writer = response.getWriter();
  2.  writer.println(result);


 
Mais, vu que je vais devoir renvoyer des structures plus complexes (avec plusieurs chaines de caractères, et plusieurs entiers...), y'a-t-il un moyen plus simple pour récuperer toute la structure de données d'un coup ?

Reply

Marsh Posté le 21-06-2006 à 10:38:20    

il va falloir que tu implémente des ServletContext ou un truc du genre, je sais plus exactement...
 
et d'abord, pkoi tu veux appeller ta servlet depuis du code java ? c'est avec une requête http que tu es sensé l'appeller. Et tu pourras mettre tes résultats complexes dans la request (request.setAttribute(...))


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 21-06-2006 à 11:57:33    

brisssou a écrit :

il va falloir que tu implémente des ServletContext ou un truc du genre, je sais plus exactement...
 
et d'abord, pkoi tu veux appeller ta servlet depuis du code java ? c'est avec une requête http que tu es sensé l'appeller. Et tu pourras mettre tes résultats complexes dans la request (request.setAttribute(...))


 
Parce que le programme qui appelle les servlets est réalisé en java. Mais, oui, j'utiliserais bien des requêtes http quand meme.

Reply

Marsh Posté le 21-06-2006 à 13:30:14    

j'ai pas compris alors...
 
t'as un programme java qui va faire des requêtes http vers tes servlets ?
 
si c'est ça, tu vas (je crois) devoir faire de la désérialisation pour passer tes objets dans la response http (qui ne prend que du texte, me trompe-je ?).


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 21-06-2006 à 14:33:16    

brisssou a écrit :

j'ai pas compris alors...
 
t'as un programme java qui va faire des requêtes http vers tes servlets ?
 
si c'est ça, tu vas (je crois) devoir faire de la désérialisation pour passer tes objets dans la response http (qui ne prend que du texte, me trompe-je ?).


 
Ouep, c'est ca, a moins qu'il y ait une autre maniere, mais là par exemple, dans la méthode doGet, j'ai fait ca :
 

Code :
  1. if (request.getParameter("met" ).equals("rechercherMarques" )) {
  2.   //String param1 = request.getParameter("param1" );
  3.   result = rechercherMarques();
  4.  } else if (request.getParameter("met" ).equals("rechercherModeles" )) {
  5.   PocVehicle vehicule = new PocVehicle();
  6.   vehicule.setBrandName(request.getParameter("brandname" ));
  7.   rechercherModeles(vehicule);
  8.  } else if (request.getParameter("met" ).equals("rechercherAlimentations" )) {
  9.   PocVehicle vehicule = new PocVehicle();
  10.   vehicule.setBrandName(request.getParameter("brandname" ));
  11.   vehicule.setModel(request.getParameter("model" ));
  12.   rechercherAlimentations(vehicule);
  13. }

Reply

Marsh Posté le 21-06-2006 à 14:45:18    

bon, ben bon courrage alors O_o


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 21-06-2006 à 14:57:33    

Merci :D
 
Sinon, j'ai une autre question, là je viens de réaliser ma première servlet, je l'ai déployé sur TomCat, j'arrive à l'appeler.  
 
Mais j'ai une erreur :
 

Citation :

java.lang.NoClassDefFoundError: com/pwf/und/impl/sql/RequetesSqlVehicule


 
Je présume que la servlet ne trouve pas la classe (je l'ai importé en début de fichier via : import com.pwf.und.impl.sql.RequetesSqlVehicule), comme lui spécifier ou aller chercher cette classe ? Ou mettre la classe ?

Reply

Marsh Posté le 21-06-2006 à 15:01:39    

soit tu mets la classe directement dans WEB-INF/classes/com/pwf/und/impl/sql/RequetesSqlVehicule, soit tu a un jar qui va bien, et là, tu le mets dans WEB-INF/lib


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 21-06-2006 à 15:12:01    

brisssou a écrit :

soit tu mets la classe directement dans WEB-INF/classes/com/pwf/und/impl/sql/RequetesSqlVehicule, soit tu a un jar qui va bien, et là, tu le mets dans WEB-INF/lib


 
Nikel, ca marche, j'avais ecris libs au lieu de lib.  :fou:

Reply

Marsh Posté le 21-06-2006 à 15:13:02    

laule :)


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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