Java web uygulamaları neden .do uzantısını kullanır? Nereden geldi?


114

Neden bu kadar çok Java geliştiricisinin web denetleyicisi (MVC) kaynakları için uzantı olarak ".do" kullandığını hep merak etmişimdir. Örnek: http://example.com/register.do

Spring MVC ve Struts projelerinde gördüğüm gibi çerçeveye özgü görünmüyor bile. Bu ".do" uzantı uygulaması nereden geldi. Uzantı yok yerine neden bu yapıldı? Bununla ilgili Java dünyası notunu kaçırmışım gibi hissediyorum.

Şahsen ben uzatma istemiyorum.


4
".Do" alanından geçiş yapmak isteyen ve kullanıcı dostu URL'leri olan kişiler için dostça not. Örneğin / do / login uzantısı yerine sunucu uygulaması yolunu kullanın ve ardından / do / login ==> / login için Tuckey Filtresi URL yeniden yazmayı kullanın.
Adam Gent

Doğru, URL'nin yeniden yazılması (mod_rewrite veya Tuckey'nin filtresi aracılığıyla) işe yarar.
Pascal Thivent

1
oldukça aptalca ve bunun için hiçbir mazeret yok.
49'da reddedilemez

Yanıtlar:


75

Bildiğim kadarıyla bu kongre Struts1 tarafından yayılmıştır. Kullanım kılavuzu bunu şöyle ifade eder:

5.4.2 ActionServlet Eşlemesini Yapılandırma

Not: Bu bölümdeki malzeme Payandalara özel değildir. Sunucu uygulaması eşlemelerinin yapılandırması Java Servlet Spesifikasyonunda tanımlanmıştır. Bu bölüm, bir uygulamayı yapılandırmanın en yaygın yollarını açıklamaktadır.

Denetleyici sunucu uygulaması tarafından işlenecek URL'leri tanımlamak için iki yaygın yaklaşım vardır - önek eşleştirme ve uzantı eşleştirme. Her yaklaşım için uygun bir haritalama girişi aşağıda açıklanacaktır.

Önek eşleştirme, belirli bir değerle başlayan (bağlam yolu bölümünden sonra) tüm URL'lerin bu sunucu uygulamasına aktarılmasını istediğiniz anlamına gelir. Böyle bir giriş şöyle görünebilir:

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

bu /logon, daha önce açıklanan yolla eşleşen bir istek URI'sinin aşağıdaki gibi görünebileceği anlamına gelir :

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

/myapplicationuygulamanızın dağıtıldığı bağlam yolu nerede .

Öte yandan, uzantı eşlemesi, URI'nin bir nokta ve ardından tanımlanmış bir karakter kümesiyle sona ermesi gerçeğine dayalı olarak, istek URI'larını eylem sunucu uygulamasına eşleştirir. Örneğin, JSP işleme sunucu uygulaması *.jsp, istenen her JSP sayfasını işlemek için çağrılması için modele eşlenir . Uzantıyı kullanmak için *.do("bir şeyler yap" anlamına gelir) , eşleme girişi şöyle görünecektir:

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

ve /logondaha önce açıklanan yolla eşleşen bir istek URI'si şöyle görünebilir:

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

UYARI - <servlet-mapping>Denetleyici sunucu uygulaması için birden fazla öğe tanımlarsanız çerçeve doğru çalışmayacaktır .

UYARI - Sürüm 1.1'den beri yeni modül desteğini kullanıyorsanız, yalnızca uzantı eşlemesinin desteklendiğini bilmelisiniz.

Ve bu konvansiyonun korunduğunu düşünüyorum (bazen Struts1'i değiştirdikten sonra bile URL'leri değiştirmemek, bazen sadece insanlar bundan memnun olduğu için).


2
Struts 1 olduğunu anladım. Çok uzun zaman önce unutmuş olmalıyım. Java Web Dev için pek de iyi olmayan günlerdi.
Adam Gent

4
@Adam O sırada (~ 2001) Struts1 ile mutluydum. Bugün onu kullanmak beni ağlatırdı.
Pascal Thivent

5
2001 yılında Struts 1'e sahip olduğumuz için ŞANSLIydık!
Thorbjørn Ravn Andersen

2
Struts 2 ile hepimiz mutlu olabiliriz!
Alireza Fattahi

9

Struts sunucu uygulamasının URL'leri struts sunucu uygulamasına geçirmek için web.xml'de * .do ile eşlemek yaygın bir uygulamadır. Örneğin:

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

Bunun için kongre dışında gerçekten bir neden yok. Herhangi bir uzantı kullanmazsanız, görüntüleri ve diğer statik içeriği, onları servisinize göndermeyecek şekilde işlemek için biraz sihir yapmanız gerekir. Genellikle bu, öndeki bir web sunucusunun yük dengeleyicisinde yapılır.


2
Büyü olduğunu bilmiyorum. Tüm bunlar bir ana dağıtım sunucu uygulamasına sahip olmak ve belki / myservlet / önekini kullanmaktan kaçınmak için bazı URL'leri yeniden yazmaktır. Tuckey URL yeniden yazma konusuna bakın.
Adam Gent

-2

Sadece bir güvenlik ipucu!

Denetleyiciniz için alışılmadık bir uzantı kullanmak iyi bir uygulamadır, bu şekilde davetsiz misafirlerin site hakkında biraz bilgi bulmak için daha fazla zaman harcaması gerekecektir.

Bu nedenle, varsayılan uzantıyı ve ayrıca çerçevenizdeki elinizi ortaya çıkarabilecek birkaç statiği değiştirirseniz, MVC çerçeveniz tamamen bilinmeyebilir.

Hatta uzantıyı phpveya aspxiyi bir fikir olabilir.

Aslında bu gizleme yoluyla güvenliktir, ancak bu iyi güvenliğin tersi değildir. Zaten güvenli olan bir sistemin üzerine belirsizlikle güvenliği katmanlamak yardımcı olabilir. Gizleme ile güvenliğin ilginç artıları ve eksileri vardır ve her ikisi de internette ne zaman kullanılabilir.


5
Bu, belirsizlikle güvenliktir.
TGO

Gerçekten bu bir gizleme
Brandon G

4
Belirsizlik, iyi güvenliğin tersi değildir. Müşterilerin bilmeye hiç ihtiyaç duymadıkları bilgileri açıklamayı reddetmek iyi bir uygulamadır. Şirketimde tüm web sunucusu ve uygulama sunucusu başlıklarını çıkardık ve yerine uydurma bir dizeyle değiştirdik. Belirsiz sitelerin aldığı güvenlik açığı taramalarının miktarı delidir, kendinizi daha az hedef haline getirmek için yapabileceğiniz her şey olumludur.
XP84

Varsayılan olarak, yanıt başlıkları olayları anlamak için yeterli olacaktır.
Kannan Ramamoorthy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.