| Atrybuty i parametry aplikacji J2EE | 4 months, 1 week ago |
Każdy, kto miał do czynienia z serwletami J2EE, powinien poświęcić nieco uwagi na analizę znaczenia atrybutów w aplikacji webowej, przede wszystkim zaś na różnice dzielące je od parametrów. Atrybuty aplikacji webowej to nie to samo co parametry, a poniższy blog opisuje ich znaczenie.
Różne rodzaje zasięgu aplikacji webowej
Istnieją trzy podstawowe zasięgi aplikacji webowej: kontekstu, żądania i sesji. Oznacza to, że jeśli np. umieścimy coś w jednym z zasięgów, może to coś być niewidoczne z poziomu innego.
- zasięg kontekstu (aplikacji) - to największy z zasięgów, dotyczy całej aplikacji. Jeśli umieścimy coś w zasięgu aplikacji, będzie to dostępne z każdego jej możliwego miejsca i przez każdego. Np. niezależnie od tego, który klient wyśle żądanie na serwer, zawsze będzie on mógł uzyskać aktualny dla całej aplikacji parametr lub atrybut. Obiektem reprezentującym zasięg kontekstu jest obiekt ServletContext.
- zasięg sesji - to zasięg zarezerwowany dla każdego klienta (przeglądarki internetowej) z osobna. Innymi słowy każdy z klientów, jeśli otrzyma sesję, będzie mógł trzymać w niej ważne tylko i wyłącznie dla niego i niedostępne dla innych atrybuty. Obiektem reprezentującym zasięg sesji jest obiekt HttpSession.
- zasięg żądania - to zasięg przeznaczony dla każdego żądania HTTP przesyłanego na serwer z osobna. Musimy pamiętać o tym, że jedno żądanie możemy przekazywać pomiędzy stronami JSP i serwletami. Czyli jeśli umieścimy jakiś atrybut w żądaniu z poziomu jednego serwletu a następnie przekażemy to żądanie dalej, to z poziomu następnego serwletu lub strony JSP możemy odczytać to żądanie. Obiektem reprezentującym zasięg żądania jest obiekt HttpServletRequest.
- zasięg strony - to dodatkowy zasięg utworzony na potrzeby stron JSP. Wszystkie atrybuty umieszczone w zasięgu strony są dostępne w ramach jednej strony JSP. Obiektem reprezentującym zasięg strony jest obiekt typu PageContext dostępny z poziomu strony JSP jako obiekt domyślny pageContext. Z wykorzystaniem tego obiektu możemy uzyskiwać dostęp do każdego z trzech pozostałych zasięgów.
Co to są atrybuty?
Dla każdego z czterech wspomnianych zasięgów możemy pobierać, ustawiać, zmieniać i usuwać atrybuty. Okazuje się, że interfejs API dla każdego z zasięgów udostępnia nam te same trzy metody: getAttribute(String), setAttribute(String, Object), removeAttribute(String). Dodatkowo zasięg aplikacji, sesji i żądania posiada metodę getAttributeNames().
| Zasięg | Interfejs | Metody |
| aplikacji | ServletContext |
|
| sesji | HttpSession |
|
| żądania | ServletRequest |
|
| strony | JspContext |
|
Zasięg strony różni się nieco od pozostałych, ponieważ z jego pomocą możemy uzyskiwać referencję do pozostałych trzech zasięgów i dodatkowo pobierać, ustawiać, zmieniać i usuwać z nich atrybuty. Innymi słowy obiekt PageContext może służyć do obsługi atrybutów każdego zasięgu. Metody, które stworzono z myślą o obsłudze atrybutów zasięgu strony, otrzymują na wejściu dodatkowy argument int określający właśnie interesujący nas zasięg. Chociaż metody operujące na atrybutach pochodzą z klasy JspContext (klasa, z której dziedziczy PageContext), stałe reprezentujące zasięgi znajdziemy w klasie PageContext:
- PAGE_SCOPE
- APPLICATION_SCOPE
- SESSION_SCOPE
- REQUEST_SCOPE
W ten sposób np. ustawienie jakiegoś atrybutu w zasięgu sesji na stronie JSP może wyglądać tak:
<% Float dwa = new Float(2.0); pageContext.setAttribute("foo", dwa, PageContext.SESSION_SCOPE) %>
Na uwagę zasługuje metoda findAttribute(String), która poszukuje atrybut o podanej nazwie w każdym z czterech zasięgów, począwszy od najmniejszego (strony) do największego (aplikacji). Liczy się tylko ten zasięg, w którym atrybut z daną nazwą zostanie znaleziony jako pierwszy.
Co to są parametry?
Przede wszystkim parametry od atrybutów różnią się tym, że z poziomu kodu można je jedynie odczytywać. Poza tym są to obiekty typu String. Parametry występują tylko w zasięgu aplikacji i żądania a dodatkowo jako parametry inicjalizacji serwletu. Ogólnie rozróżniamy parametry inicjalizacji aplikacji, inicjalizacji serwletu i żądania. Parametry żądania przychodzą na serwer wraz z żądaniem HTTP jako wartości pobrane z formularza HTML. Parametry inicjalizacji aplikacji i serwletu deklaryjemy w deskryptorze wdrożenia:
Parametry inicjalizacji aplikacji:
<context-param>
<param-name>param</param-name>
<param-value>value</param-value>
</context-param>
Parametry inicjalizacji serwletu:
<servlet>
<servlet-name>mojServlet</servlet-name>
<servlet-class>com.example.MojServlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>value</param-value>
</init-param>
</servlet>
Metody pobierające parametry:
| Rodzaj | Interfejs | Metody |
| inicjalizacji aplikacji | ServletContext |
|
| inicjalizacji serwletu | ServletConfig |
|
| żądania | ServletRequest |
|
Pamiętajmy, że w zasięgu strony możemy również odczytywać wszystkie trzy rodzaje parametrów z wykorzystaniem metod getServletContext(), getServletConfig() i getRequest(). Dodatkowo na stronie JSP możemy także skorzystać z elementów domyślnych: application, config i request.
[LucidCRM] Powiadomienia oraz pulpit |
[LucidCRM] Nowy wygląd ![]() |

[LucidCRM] Powiadomienia oraz pulpit
Comments
Lucid Office



Lucid CRM
Lucid Assistance
Lucid Sale
Lucid Mailer