Чому Java webapps використовують розширення .do? Звідки воно взялося?


114

Мені завжди було цікаво, чому так багато розробників Java використовують ".do" як розширення для ресурсів свого веб-контролера (MVC). Приклад: http://example.com/register.do

Це навіть не здається рамковим, як я бачив у весняних проектах MVC та Struts. Звідки взялася ця практика .dodo розширення. Чому це було зроблено замість розширення? Я відчуваю, що пропустив пам’ятку світу про Java.

Особисто я віддаю перевагу не розширення.


4
Примітка для людей, які хочуть перейти з ".do" та мають дружні URL-адреси. Використовуйте шлях сервлета замість розширення, тобто / do / login, а потім використовуйте переписування URL-адреси фільтра Tuckey, щоб зробити / do / login ==> / login.
Адам Гент

Правда, переписування URL-адрес (будь то через mod_rewrite або фільтр Тукея) зробило б свою справу.
Паскаль Thivent

1
це досить ідіотично, і виправдання для цього немає.
незаперечний

Відповіді:


75

Наскільки мені відомо, цю конвенцію поширив Струць1. Посібник користувача розміщує його так:

5.4.2 Налаштування картографування ActionServlet

Примітка: Матеріал у цьому розділі не характерний лише для Распор. Конфігурація відображень сервлетів визначена в специфікації Java Servlet. У цьому розділі описані найпоширеніші засоби налаштування програми.

Існує два загальні підходи до визначення URL-адрес, які будуть оброблені сервлетом контролера - збіг префікса та збіг розширень. Відповідний запис для кожного підходу буде описано нижче.

Збіг префіксу означає, що ви хочете, щоб всі URL-адреси, які починаються (після частини контуру контексту) з певним значенням, передавались цьому сервлету. Такий запис може виглядати приблизно так:

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

що означає, що URI запиту для відповідності /logonописаному раніше шляху може виглядати так:

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

де /myapplicationконтекстний шлях, під яким розгорнута ваша програма.

З іншого боку, відображення розширень відповідає збігу запитів URI на сервлет дій на основі того, що URI закінчується періодом, за яким слідує визначений набір символів. Наприклад, сервлет обробки JSP відображається у *.jspшаблоні так, що він викликається для обробки кожної запитуваної сторінки JSP. Для використання *.do розширення (яке означає "зробити щось") запис карти буде виглядати приблизно так:

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

і URI запиту, щоб відповідати /logonописаному раніше шляху, може виглядати так:

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

ПОПЕРЕДЖЕННЯ - Рамка не працюватиме належним чином, якщо <servlet-mapping>для сервлета контролера визначено більше одного елемента.

ПОПЕРЕДЖЕННЯ - Якщо ви використовуєте нову підтримку модулів з версії 1.1, ви повинні знати, що підтримується лише відображення розширень.

І я думаю, ця конвенція була дотримана (іноді не змінювати URL-адреси навіть після заміни Struts1, іноді просто тому, що люди були задоволені цим).


2
Я подумав, що це Струц 1. Такий давно я, мабуть, забув. Це були не дуже гарні дні для Java Web Dev.
Адам Гент

4
@Adam У той час (~ 2001 р.) Я був щасливий зі Struts1. Сьогодні його використання змусить мене плакати.
Паскаль Thivent

5
У 2001 році нам пощастило мати Struts 1!
Thorbjørn Ravn Andersen

2
З Struts 2 ми можемо бути всі щасливі!
Аліреза Фаттахі

9

Звичайною практикою було зіставлення сервлета streuts до * .do в web.xml для передачі URL-адрес сервлету struts. Наприклад:

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

Насправді немає жодної причини, крім угоди для цього. Якщо ви не використовуєте розширення, вам потрібно зробити магію для обробки зображень та іншого статичного вмісту таким чином, щоб вони не надсилали їх вашому севлету. Часто це робиться за допомогою балансира завантаження веб-сервера фронтування.


2
Я не знаю, як це магія. Все, що має головний диспетчер сервлетів і, можливо, робить певне перезапис URL-адрес, щоб уникнути наявності префікса / myservlet /. Див. Перезапис URL-адрес Tuckey.
Адам Гент

-2

Просто порада з безпеки!

Корисно використовувати якесь незвичайне розширення для вашого контролера, таким чином зловмисникам потрібно буде витратити більше часу, щоб знайти деяку інформацію про сайт.

Отже, якщо ви зміните розширення за замовчуванням, а також кілька статик у вашій рамці, які можуть виявити вашу руку, ваш MVC фрейм може бути абсолютно невідомим.

Навіть змінити розширення на phpабо aspxможе бути хорошою ідеєю.

Ну, це справді безпека затуплення, але це не протилежне хорошій безпеці. Налаштування безпеки через неясність поверх уже захищеної системи може допомогти. Існують цікаві плюси і мінуси безпеки через затуманення, і коли їх можна використовувати як в Інтернеті.


5
Це безпека через невідомість.
ТГО

Дійсно це обфускація
Брендон G

4
Непомітність не є протилежністю доброї безпеки. Відмова від оприлюднення інформації про те, що клієнти не мають необхідності знати, є хорошою практикою. У моїй компанії ми очистили всі заголовки веб-сервера та сервера додатків і замінили його на готовий рядок. Кількість сканів на вразливість, які отримують навіть незрозумілі сайти, - це позитивне значення.
XP84

За замовчуванням заголовків відповідей було б достатньо для з'ясування речей.
Каннан Рамаморті
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.