2011-01-23 6 views
1

Je regarde ces questions précédentes comme:
https://stackoverflow.com/questions/98334/creating-a-java-servlet-web-application
How many actions should a servlet perform?Comment organiser mes servlets?

Il y a des réponses dans ces discussions qui se contredisent; Certaines personnes disent utiliser une servlet pour chaque page, et d'autres disent utiliser seulement une servlet pour l'ensemble de votre application.

J'ai le même problème. Alors, comment décider de ce que seront mes servlets? Si j'utilise un (ou plusieurs) "contrôleurs frontaux", comment analyser les requêtes pour les déléguer à d'autres objets? Par exemple, si une seule page comporte trois formulaires différents, comment puis-je faire la différence entre leurs demandes? Comment puis-je faire la différence entre les formulaires et les demandes provenant de différentes pages? Affecter plusieurs mappages servlet pour chaque formulaire + page? Regardez les noms des paramètres? URL-encoder un paramètre "type de requête"?

Tant de façons de faire les choses ...

post-scriptum Je préférerais NE PAS utiliser un framework comme Struts - Je veux connaître la meilleure façon de le faire en utilisant l'API Servlet. J'utilise Tomcat7.

Répondre

1

Le contrôleur frontal est juste la passerelle dans votre application pour les demandes HTTP. Mais cela agit généralement comme un agent de la circulation pour acheminer les requêtes HTTP aux classes qui savent comment les gérer. Spring, par exemple, a un DispatcherServlet qui mappe les contrôleurs aux demandes (généralement par URL). Le contrôleur était une interface, mais maintenant les POJO du contrôleur peuvent également être annotés.

L'interface de contrôleur a une seule méthode: handleRequest:

ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) 

Il prend en requête HTTP et renvoie une réponse et ModelAndView.

+0

Merci, même si je ne veux pas utiliser Spring. Mais si je devais le faire de cette façon moi-même, je pourrais faire un objet qui connaît la relation entre le traitement des objets et la demande d'URL, et l'utiliser comme "répartiteur"? Ainsi, le formulaire de "connexion" irait à "www.mysite.com/Login", le formulaire "contactez-nous" irait à "www.mysite.com/Contact", les deux mappant à la servlet du contrôleur frontal, qui utilise le répartiteur pour déléguer ces demandes de formulaire? –

+0

Je n'ai pas dit "utiliser Spring"; Je l'ai cité comme un exemple à suivre. Oui, vous pouvez écrire une servlet FrontController, ViewResolver et Controller POJO, etc. Mais si vous allez faire tout ce que vous pourriez penser d'un framework web MVC - Spring ou Wicket ou autre chose. Réinventez la roue uniquement si vous souhaitez apprendre comment les roues fonctionnent. C'est un problème qui a été résolu des centaines de fois. Qu'est-ce qui te fait penser que tu feras mieux? – duffymo

+1

Haha merci - Je doute que je ferai mieux, mais j'aime inventer des roues ... Cela m'aide à comprendre les choses. –

2

servlet d'abord, homegrowing un (contrôleur avant) sans adopter un existant (par exemple printemps DispatcherServlet, FacesServlet de JSF, Wicket de WicketServlet, etc.) est tout à fait un travail. Mais vous vous retrouvez finalement avec un code d'entreprise plus simple et mieux réutilisable/maintenable. Il n'y a généralement pas de multiples servlets du contrôleur frontal sur une application web moyenne. Il devrait y en avoir seulement un.

Il est difficile de dire si vous en avez vraiment besoin ou non. Si vous avez après tout seulement 3 formulaires web (et donc 3 servlets) dans votre webapp et cela ne changera jamais à long terme, alors il ne vaut probablement pas la peine de passer des jours à développer un framework MVC ou plonger dans l'apprentissage d'un existant Cadre MVC. C'est difficile de dire où est la frontière. Mais si vous pouvez être certain que la webapp en question a besoin d'expansion et/ou d'améliorations dans le futur, alors il est vraiment préférable d'adopter le pattern MVC (c'est-à-dire une seule servlet de contrôleur frontal) en ce moment.

Au moins, si vous avez l'intention de homegrow, alors vous pouvez trouver beaucoup de renseignements utiles dans this answer. Mais la réutilisation d'un framework existant finira par être beaucoup plus facile à maintenir puisqu'il y a beaucoup plus de chance de trouver quelqu'un qui connaît déjà le framework de haut en bas pour qu'il n'ait pas besoin d'apprendre un autre framework avant de pouvoir maintenir votre webapp.

0

J'ai essayé les deux, et je n'utilise aucun cadre en conserve (que ce soit bon ou mauvais). Mon sentiment est que différentes servlets sont meilleures lorsqu'elles sont assez indépendantes et de structure modulaire, de sorte que vous pouvez les mettre hors ligne pour la mise à niveau ou la maintenance. L'utilisation d'une seule servlet est préférable lorsque vous traitez des problèmes de synchronisation, en particulier avec une base de données.Mais encore une fois, vous êtes le meilleur juge pour les partitionner. J'utilise des servlets de différence quand je sais qu'ils vont accéder à un ensemble de tables complètement différent dans la base de données.

Questions connexes