Atrybuty i parametry aplikacji J2EE
6 years, 11 months 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
  • public Object getAttribute(String)
  • public void setAttribute(String, Object)
  • public void removeAttribute(String)
  • public Enumeration getAttributeNames()
sesji HttpSession
  • public Object getAttribute(String)
  • public void setAttribute(String, Object)
  • public void removeAttribute(String)
  • public Enumeration getAttributeNames()
żądania ServletRequest
  • public Object getAttribute(String)
  • public void setAttribute(String, Object)
  • public void removeAttribute(String)
  • public Enumeration getAttributeNames()
strony JspContext
  • public Object getAttribute(String)
  • public Object getAttribute(String, int)
  • public void setAttribute(String, Object)
  • public void setAttribute(String, Object, int)
  • public void removeAttribute(String)
  • public void removeAttribute(String, int)
  • public Enumeration getAttributeNamesInScope(int)
  • public Object findAttribute(String)
  • public int getAttributesScope(String) 

 

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
  • public String getInitParameter(String)
inicjalizacji serwletu ServletConfig
  • public String getInitParameter(String)
żądania ServletRequest
  • public String getParameter(String)
  • public String[] getParameterValues(String)
  • public Enumeration getParameterNames()
  • public Map getParameterMap()

 

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.

Joanna Dzikowska
Comments
16
RSS Google+ Facebook Twitter LinkedIn
Lucid Mailer
Effective email marketing: newsletters, bulletins,
mailing campaigns
Lucid CRM
Customer relationship management, internal communication, individual sale
Lucid Sale
Sales assistant with custom-made
e-commerce platforms
Lucid Assistance
Post-Sales support for customers and troubleshooting solutions
Lucid Panel
Software for remote administration of
dedicated servers
Copyright © 2002-2012 Spacja.com