#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:
область «запроса» на самом деле является областью «запрос-ответ».