Warum verwenden Java-Webanwendungen die Erweiterung .do? Wo ist es hergekommen?


114

Ich habe mich immer gefragt, warum so viele Java-Entwickler ".do" als Erweiterung für ihre MVC-Ressourcen (Web Controller) verwenden. Beispiel: http://example.com/register.do

Es scheint nicht einmal Framework-spezifisch zu sein, wie ich es in Spring MVC- und Struts-Projekten gesehen habe. Woher kommt diese ".do" -Erweiterungspraxis? Warum wurde dies anstelle einer Erweiterung durchgeführt? Ich habe das Gefühl, dass ich das Java World Memo dazu verpasst habe.

Persönlich bevorzuge ich keine Verlängerung.


4
Freundlicher Hinweis für Personen, die von ".do" migrieren möchten und freundliche URLs haben. Verwenden Sie den Servlet-Pfad anstelle der Erweiterung ie / do / login und verwenden Sie dann das Umschreiben der Tuckey-Filter-URL, um / do / login ==> / login zu erstellen.
Adam Gent

Richtig, das Umschreiben von URLs (sei es über mod_rewrite oder Tuckeys Filter) würde den Trick machen.
Pascal Thivent

1
Es ist ziemlich idiotisch und es gibt keine Entschuldigung dafür.
Unbestreitbarer

Antworten:


75

Meines Wissens wurde diese Konvention von Struts1 verbreitet. In der Bedienungsanleitung heißt es:

5.4.2 Konfigurieren Sie die ActionServlet-Zuordnung

Hinweis: Das Material in diesem Abschnitt ist nicht spezifisch für Streben. Die Konfiguration der Servlet-Zuordnungen ist in der Java-Servlet-Spezifikation definiert. In diesem Abschnitt werden die gängigsten Methoden zum Konfigurieren einer Anwendung beschrieben.

Es gibt zwei gängige Ansätze zum Definieren der URLs, die vom Controller-Servlet verarbeitet werden: Präfixabgleich und Erweiterungsabgleich. Ein geeigneter Zuordnungseintrag für jeden Ansatz wird unten beschrieben.

Präfixabgleich bedeutet, dass alle URLs, die (nach dem Kontextpfadteil) mit einem bestimmten Wert beginnen, an dieses Servlet übergeben werden sollen. Ein solcher Eintrag könnte folgendermaßen aussehen:

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

/logonDies bedeutet, dass ein Anforderungs-URI, der mit dem zuvor beschriebenen Pfad übereinstimmt, folgendermaßen aussehen könnte:

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

Wo /myapplicationist der Kontextpfad, unter dem Ihre Anwendung bereitgestellt wird?

Die Erweiterungszuordnung hingegen ordnet Anforderungs-URIs dem Aktionsservlet zu, basierend auf der Tatsache, dass die URI mit einem Punkt endet, gefolgt von einem definierten Zeichensatz. Beispielsweise wird das JSP-Verarbeitungsservlet dem *.jspMuster zugeordnet, sodass es aufgerufen wird, um jede angeforderte JSP-Seite zu verarbeiten. Um die *.do Erweiterung zu verwenden (was "etwas tun" impliziert) , würde der Zuordnungseintrag folgendermaßen aussehen:

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

und ein Anforderungs-URI, der mit dem /logonzuvor beschriebenen Pfad übereinstimmt, könnte folgendermaßen aussehen:

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

WARNUNG - Das Framework funktioniert nicht ordnungsgemäß, wenn Sie mehr als ein <servlet-mapping>Element für das Controller-Servlet definieren.

WARNUNG - Wenn Sie die neue Modulunterstützung seit Version 1.1 verwenden, sollten Sie sich bewusst sein, dass nur die Erweiterungszuordnung unterstützt wird.

Und ich denke, diese Konvention wurde beibehalten (manchmal , um URLs auch nach dem Ersetzen von Struts1 nicht zu ändern , manchmal nur, weil die Leute damit zufrieden waren).


2
Ich dachte, es wäre Struts 1. Vor so langer Zeit muss ich es vergessen haben. Das waren die nicht so guten Tage für Java Web Dev.
Adam Gent

4
@Adam Zu dieser Zeit (~ 2001) war ich mit Struts1 zufrieden. Wenn ich es heute benutze, würde ich weinen.
Pascal Thivent

5
Im Jahr 2001 hatten wir GLÜCK, Struts 1 zu haben!
Thorbjørn Ravn Andersen

2
Mit Struts 2 können wir alle glücklich sein!
Alireza Fattahi

9

Es war üblich, das Struts-Servlet in web.xml * .do zuzuordnen, um URLs an das Struts-Servlet zu übergeben. Beispielsweise:

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

Es gibt wirklich keinen Grund außer Konvention dafür. Wenn Sie keine Erweiterung verwenden, müssen Sie etwas Magie anwenden, um Bilder und andere statische Inhalte so zu verarbeiten, dass sie nicht an Ihr Sevlet gesendet werden. Dies geschieht häufig an einem Load Balancer eines Fronting-Webservers.


2
Ich weiß nicht, dass es Magie ist. Alles, was es hat, ist ein Master-Dispatching-Servlet und möglicherweise ein URL-Umschreiben, um das Präfix / myservlet / zu vermeiden. Siehe Umschreiben der Tuckey-URL.
Adam Gent

-2

Nur ein Sicherheitstipp!

Es wird empfohlen, eine ungewöhnliche Erweiterung für Ihren Controller zu verwenden. Auf diese Weise müssen die Eindringlinge mehr Zeit aufwenden, um Informationen über die Site zu finden.

Wenn Sie also die Standarderweiterung sowie einige wenige Statiken in Ihrem Framework ändern, die möglicherweise Ihre Hand offenbaren, ist Ihr MVC-Framework möglicherweise völlig unbekannt.

Ändern Sie sogar die Erweiterung auf phpoderaspx könnte eine gute Idee sein.

Nun, in der Tat ist dies Sicherheit durch Verschleierung, aber dies ist nicht das Gegenteil von guter Sicherheit. Es könnte hilfreich sein, Sicherheit durch Dunkelheit auf ein bereits sicheres System zu legen. Es gibt interessante Vor- und Nachteile der Sicherheit durch Verschleierung und wenn beide im Internet verwendet werden können.


5
Das ist Sicherheit durch Dunkelheit.
TGO

Wirklich, das ist Verschleierung
Brandon G

4
Dunkelheit ist nicht das Gegenteil von guter Sicherheit. Es ist eine gute Praxis, sich zu weigern, Informationen preiszugeben, die Kunden nicht wissen müssen. In meiner Firma haben wir alle Webserver- und App-Server-Header gelöscht und durch eine erfundene Zeichenfolge ersetzt. Die Anzahl der Schwachstellen-Scans, die selbst obskure Websites erhalten, ist verrückt. Alles, was Sie tun können, um sich weniger als Ziel zu sehen, ist positiv.
XP84

Standardmäßig würden die Antwortheader ausreichen, um die Dinge herauszufinden.
Kannan Ramamoorthy
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.