Mengapa aplikasi web Java menggunakan ekstensi .do? Dari mana asalnya

114

Saya selalu bertanya-tanya mengapa begitu banyak pengembang Java menggunakan ".do" sebagai ekstensi untuk sumber daya pengontrol web (MVC) mereka. Contoh: http://example.com/register.do

Itu bahkan tampaknya tidak spesifik kerangka kerja seperti yang saya lihat di proyek Spring MVC dan Struts. Dari mana asal praktik ekstensi ".do" ini. Mengapa ini dilakukan, bukan tanpa ekstensi? Saya merasa seperti saya melewatkan memo dunia Jawa tentang ini.

Secara pribadi saya lebih suka tidak ada ekstensi.

Adam Gent
sumber
4
Catatan ramah untuk orang-orang yang ingin bermigrasi dari ".do" dan memiliki URL yang ramah. Gunakan jalur servlet alih-alih ekstensi yaitu / do / login dan kemudian gunakan penulisan ulang URL Filter Tuckey untuk membuat / do / login ==> / login.
Adam Gent
Benar, penulisan ulang URL (baik itu melalui mod_rewrite atau filter Tuckey) akan berhasil.
Pascal Thivent
1
itu sangat bodoh, dan tidak ada alasan untuk itu.
bereputasi

Jawaban:

75

Sepengetahuan saya, konvensi ini telah disebarkan oleh Struts1. Panduan pengguna mengatakannya seperti ini:

5.4.2 Konfigurasi Pemetaan ActionServlet

Catatan: Materi di bagian ini tidak spesifik untuk Struts. Konfigurasi pemetaan servlet ditentukan dalam Spesifikasi Servlet Java. Bagian ini menjelaskan cara paling umum untuk mengkonfigurasi aplikasi.

Ada dua pendekatan umum untuk menentukan URL yang akan diproses oleh pengontrol servlet - pencocokan awalan dan pencocokan ekstensi. Entri pemetaan yang sesuai untuk setiap pendekatan akan dijelaskan di bawah ini.

Pencocokan prefiks berarti Anda ingin semua URL yang dimulai (setelah bagian jalur konteks) dengan nilai tertentu untuk diteruskan ke servlet ini. Entri seperti itu mungkin terlihat seperti ini:

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

yang berarti URI permintaan untuk mencocokkan /logonjalur yang dijelaskan sebelumnya mungkin terlihat seperti ini:

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

di mana /myapplicationjalur konteks tempat aplikasi Anda di-deploy.

Pemetaan ekstensi, di sisi lain, mencocokkan URI permintaan dengan servlet tindakan berdasarkan fakta bahwa URI diakhiri dengan titik yang diikuti dengan serangkaian karakter yang ditentukan. Misalnya, servlet pemrosesan JSP dipetakan ke *.jsppola sehingga dipanggil untuk memproses setiap halaman JSP yang diminta. Untuk menggunakan *.do ekstensi (yang menyiratkan "melakukan sesuatu") , entri pemetaan akan terlihat seperti ini:

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

dan URI permintaan untuk mencocokkan /logonjalur yang dijelaskan sebelumnya mungkin terlihat seperti ini:

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

PERINGATAN - Framework tidak akan beroperasi dengan benar jika Anda mendefinisikan lebih dari satu <servlet-mapping>elemen untuk controller servlet.

PERINGATAN - Jika Anda menggunakan dukungan modul baru sejak versi 1.1, Anda harus menyadari bahwa hanya pemetaan ekstensi yang didukung.

Dan saya pikir konvensi ini telah dipertahankan (terkadang untuk tidak mengubah URL bahkan setelah mengganti Struts1, terkadang hanya karena orang menyukainya).

Pascal Thivent
sumber
2
Kupikir itu Struts 1. Sudah lama sekali aku pasti sudah lupa. Itu adalah hari-hari yang tidak terlalu bagus untuk Java Web Dev.
Adam Gent
4
@Adam Saat itu (~ 2001), saya senang dengan Struts1. Hari ini, menggunakannya akan membuatku menangis.
Pascal Thivent
5
Pada tahun 2001 kami BERUNTUNG memiliki Struts 1!
Thorbjørn Ravn Andersen
2
Dengan Struts 2 kita semua bisa bahagia!
Alireza Fattahi
9

Ini adalah praktik umum untuk memetakan servlet struts Anda ke * .do di web.xml untuk meneruskan URL ke servlet struts. Sebagai contoh:

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

Sebenarnya tidak ada alasan kecuali konvensi untuk ini. Jika Anda tidak menggunakan ekstensi, Anda perlu melakukan sihir untuk menangani gambar dan konten statis lainnya dengan cara yang tidak mengirimkannya ke sevlet Anda. Seringkali ini dilakukan pada penyeimbang beban dari server web fronting.

leonm
sumber
2
Saya tidak tahu tentang sihir. Semua itu memiliki master pengiriman servlet dan mungkin melakukan beberapa penulisan ulang URL untuk menghindari memiliki / myservlet / prefix. Lihat Penulisan ulang URL Tuckey.
Adam Gent
-2

Hanya tip keamanan!

Ini adalah praktik yang baik untuk menggunakan beberapa ekstensi yang tidak biasa untuk pengontrol Anda, dengan cara ini penyusup perlu menghabiskan lebih banyak waktu untuk menemukan beberapa info tentang situs tersebut.

Jadi jika Anda mengubah ekstensi default, ditambah beberapa statika dalam kerangka kerja Anda yang dapat mengungkapkan tangan Anda, kerangka kerja MVC Anda bisa sama sekali tidak dikenal.

Bahkan mengubah ekstensi menjadi phpatau aspxbisa jadi ide yang bagus.

Memang ini keamanan dengan kebingungan, tapi ini bukan kebalikan dari keamanan yang baik. Melapisi keamanan dengan ketidakjelasan di atas sistem yang sudah aman mungkin membantu. Ada pro dan kontra yang menarik tentang keamanan dengan kebingungan dan kapan keduanya dapat digunakan di internet.

Alireza Fattahi
sumber
5
Itulah keamanan dengan ketidakjelasan.
TGO
Sungguh ini kebingungan
Brandon G
4
Ketidakjelasan bukanlah kebalikan dari keamanan yang baik. Menolak untuk membocorkan informasi bahwa klien tidak memiliki kebutuhan untuk tahu adalah praktik yang baik. Di perusahaan saya, kami menghapus semua header server web dan server aplikasi dan menggantinya dengan string yang dibuat-buat. Jumlah pemindaian kerentanan yang bahkan didapat dari situs yang tidak jelas adalah hal yang gila, apa pun yang dapat Anda lakukan untuk mengurangi target adalah hal positif.
XP84
Secara default, header respons akan cukup untuk memahami berbagai hal.
Kannan Ramamoorthy