Почему в Java-сервлетах атрибуты определены только для контекста, запросов и областей сеанса?

#java #servlets #attributes

#java #сервлеты #атрибуты

Вопрос:

В сервлетах getAttribute() и setAttribute() связаны только с HttpSession , ServletRequest и ServletContext , т.е. атрибуты определены только для контекста, запросов и областей сеанса. Почему, скажем, не для ServletResponse или ServletConfig ?

Ответ №1:

Атрибуты всегда применяются к некоторой области. Например, если вы хотите, чтобы они применялись только к текущему запросу, то вы привязываете их к объекту запроса.

Аналогично, если вы хотите, чтобы это применялось к текущему сеансу, то вы привязываете их к объекту сеанса. Атрибуты, относящиеся ко всему запущенному экземпляру приложения, устанавливаются в контекстном объекте сервлета.

Предложенные вами объекты имеют точно такую же область видимости, что и уже предоставленные: ответ имеет ту же область видимости (иначе говоря, время жизни), что и запрос. Конфигурация сервлета имеет точно такую же область видимости, что и контекст сервлета.

Следовательно, добавление getAttribute() / setAttribute() к этим методам только добавило бы путаницы («я установил атрибут в запросе или в ответе?») и не добавило бы никаких дополнительных функций.

Ответ №2:

  • ServletConfig предназначен для init-params определения в web.xml.
  • Установка атрибута в HttpServletResponse ничего не даст, и это также не будет иметь никакого смысла, поскольку ответ предназначен для клиента — не от клиента, т. е. браузера, и, тем не менее, он не способен это понять. И вы должны понимать, что JSP и сервлет оба выполняются на стороне сервера, что бы это ни было. Следовательно, установка атрибутов на request в сервлете и получение их в JSP вообще не затрагивает клиента.

Ответ №3:

область «запроса» на самом деле является областью «запрос-ответ».