Почему в спецификации Servlet присутствуют магические атрибуты? - PullRequest
2 голосов
/ 15 марта 2010

С принципами Java всегда казалось, что в спецификации Java Servlet Spec (версия 2.5 здесь ) есть набор магических атрибутов, содержащих информацию о включенных ресурсах, а именно:

javax.servlet.include.request_uri
javax.servlet.include.context_path
javax.servlet.include.servlet_path
javax.servlet.include.path_info
javax.servlet.include.query_string

Это даже не указано в документации API , только в спецификации, где это необходимо для правильной реализации.

Этот подход кажется очень неправильным, это детали реализации, которые клиенты будут использовать и от которых зависят. Почему эта информация раскрывается таким образом?

Ответы [ 2 ]

4 голосов
/ 15 марта 2010

Они фактически указаны в документации API, в части Постоянные поля . Как видно из документации API, вместо этого вы должны использовать константы RequestDispatcher, например:

String includeRequestURI = request.getAttribute(RequestDispatcher.INCLUDE_REQUEST_URI);
2 голосов
/ 15 марта 2010

Тот факт, что вы никогда не должны использовать необработанные константы (магические числа) в своем коде, не означает, что когда интерфейсу требуется передать константу, это должно быть указано.

С точки зрения пользователя допустимы только константы, но с точки зрения реализации эти константы должны соответствовать реальным значениям, если различные системы должны взаимодействовать. Если константы были непоследовательно определены в разных реализациях, то классы, скомпилированные в одной реализации (с постоянными значениями, возможно, встроенными в двоичном файле), не будут работать в другой реализации.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...