web-dev-qa-db-fra.com

Pourquoi Java webapps utilise-t-il l'extension .do? D'où vient-il?

Je me suis toujours demandé pourquoi tant de développeurs Java utilisent l'extension ".do" pour leurs ressources de contrôleur Web (MVC). Exemple: http://example.com/register .do

Cela ne semble même pas être spécifique à un framework comme je l’ai vu dans les projets Spring MVC et Struts. D'où vient cette pratique d'extension ".do"? Pourquoi a-t-on fait cela au lieu d'aucune extension? J'ai l'impression d'avoir raté le mémo mondial Java sur ce sujet.

Personnellement je préfère pas d'extension.

109
Adam Gent

À ma connaissance, cette convention a été diffusée par Struts1. Le guide de l'utilisateur le dit comme ceci:

5.4.2 Configurer le mappage ActionServlet

Remarque: Le contenu de cette section n'est pas spécifique à Struts. La configuration des mappages de servlet est définie dans la spécification de servlet Java). Cette section décrit les moyens les plus courants de configuration d'une application.

Il existe deux approches courantes pour définir les URL qui seront traitées par le servlet du contrôleur: correspondance du préfixe et extension. Une entrée de mappage appropriée pour chaque approche sera décrite ci-dessous.

La correspondance de préfixe signifie que vous voulez que toutes les URL commençant (après la partie chemin de contexte) par une valeur particulière soient transmises à ce servlet. Une telle entrée pourrait ressembler à ceci:

<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>/do/*</url-pattern>
</servlet-mapping>

ce qui signifie qu'un URI de requête correspondant à /logon Le chemin décrit plus haut pourrait ressembler à ceci:

http://www.mycompany.com/myapplication/do/logon

/myapplication est le chemin de contexte sous lequel votre application est déployée.

Par contre, le mappage d'extension fait correspondre les URI de requête au servlet d'action en se basant sur le fait que l'URI se termine par un point suivi d'un ensemble de caractères défini. Par exemple, le servlet de traitement JSP est mappé sur le *.jsp pattern afin qu’il soit appelé pour traiter chaque page JSP demandée. Utiliser le *.do extension (ce qui implique "faire quelque chose") , l’entrée de mappage ressemblerait à ceci:

<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

et un URI de requête pour faire correspondre le /logon Le chemin décrit plus haut pourrait ressembler à ceci:

http://www.mycompany.com/myapplication/logon.do

[~ # ~] warning [~ # ~] - Le cadre ne fonctionnera pas correctement si vous définissez plus d'un <servlet-mapping> élément pour le servlet du contrôleur.

[~ # ~] warning [~ # ~] - Si vous utilisez le support du nouveau module depuis la version 1.1, vous devez savoir que seul le mappage d'extension est pris en charge.

Et je pense que cette convention a été conservée (parfois pour ne pas changer d'URL même après avoir remplacé Struts1, parfois simplement parce que les gens en étaient satisfaits).

72
Pascal Thivent

Il était courant de mapper votre servlet struts à * .do dans web.xml pour transmettre des URL au servlet struts. Par exemple:

<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

Il n'y a vraiment aucune raison sauf convention pour cela. Si vous n'utilisez aucune extension, vous devez faire un peu de magie pour gérer les images et autres contenus statiques de manière à ne pas les envoyer à votre sevlet. Cela se fait souvent sur un équilibreur de charge d'un serveur Web frontal.

9
leonm