Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Problem z JSP - jak połączyć JavaBean przez DAO?

toma5z 18 Sty 2011 17:36 1957 4
  • #1 18 Sty 2011 17:36
    toma5z
    Poziom 13  

    Witajcie, mam pewien problem z "ziarenkiem jawy".

    Chciałbym połączyć jsp z javabean do wyświetlania rekordów bazy danych.
    Przykład: Mam tam sobie jakąś bazę danych 2 kolumny id, nazwa.

    W jaki sposób połączyć rekordy z ziarnem ?

    Dane z formularza to robię tak:
    plik jsp:

    Code:
    <jsp:useBean id="data" class="Data.Database" scope="session"/>
    
    <jsp:setProperty name="data" property="*" />


    plik java:
    Kod: java
    Zaloguj się, aby zobaczyć kod


    hmmm.... a gdzie umieścić kod odpowiedzialny za pobieranie danych mysql do ziarna ? W java czy jsp ?


    Na czym polega DAO z javabean jak tego użyć ?
    Proszę o wytłumaczenie problemów. Do paru tygodni walczę z tym.

    0 4
  • Pomocny post
    #2 19 Sty 2011 19:05
    pallid
    Poziom 20  

    Przede wszystkim, powinienes zaopatrzyc sie w jakas ksiazke lub inne materialy o Servletach/JSP, bo zadane przez Ciebie pytanie jest zbyt ogolne by ogarnac je w calosci w jednym poscie na forum.

    Natomiast, zeby od czegosc zaczac, kilka wskazowek:

    1. Podziel Sobie projekt na dwie logiczne warstwy:
    - warstwa prezentacji - strony w JSP, ktore odpowiadaja TYLKO za interakcje z uzytkownikim (pobieranie/wyswietlanie danych)
    - warstwa przetwarzania danych - servlety (czyli logika aplikacji) oraz obiekty dostepu do danych (DAO)

    2. JavaBean - w JavaBean nie ma zadnej szczegolnej filozofii. To zwykle obiekty Java (POJO) z okreslonymi wlasnosciami. JSP udostepnia predefiniowane tagi <jsp:useBean/>, ale wiecej korzysci daje EL (Expression Language).

    3. Data Access Objects - to one sa odpowiedzialne za komunikacje z baza. DAO posiadaja metody, ktore umozliwiaja prosty dostep do konkretnych operacji na danych. Najprostsza implementacja jest model CRUD (Create, Read, Update, Delete).

    Kod: java
    Zaloguj się, aby zobaczyć kod


    I przykladowa implementacja takiego interface'u:

    Kod: java
    Zaloguj się, aby zobaczyć kod



    4. Warstwa logiki (przetwarzania danych) - servlety
    Logika biznesowa (czyli: jak dziala aplikacja) powinna byc oddzielona od widoku (prezentacji danych). Do tego sluza servlety. Schemat kontroli przeplywu (flow control) powinien zwykle wygladac tak:

    Code:
    formularz.jsp --> /przetworz (servlet) --> zapytanie DAO --> /process (przetwarzanie odpowiedzi z DAO) --> wynik.jsp


    Czyli po kolei:
    1. Uzytkownik podaje dane w formularzu i klika "Wyslij"
    2. Formularz przekierowany jest do serwletu "/przetworz", ktorzy wyciaga dane z "requesta" i wysyla zapytanie do odpowiedniego DAO
    3. DAO wykonuje odpowiednie operacje na bazie danych i zwraca rezultat (lub nie) z powrotem do servletu "/process".
    4. Servlet odbiera i ew. przetwarza dane z DAO, udostepnia je dla warstwy widoku (JSP) i przekierowywuje do odpowiedniej strony JSP
    5. Strona JSP wyswietla dane udostepnione przez servlet.

    W prostych aplikacjach, to servlet jest odpowiedzialny za sterowanie przeplywem aplikacji, weryfikacje poprawnosci wpisanych przez uzytkownika danych, sprawdzanie dostepu, itd.

    Kod: java
    Zaloguj się, aby zobaczyć kod

    0
  • #3 07 Lut 2011 15:41
    toma5z
    Poziom 13  

    Dzięki za odp. Już zrozumiałem na jakiej zasadzie działa servlet, podszkoliłem się troszkę w tej dziedzinie - i nie jest to takie trudne jakby się wydawało.

    0
  • #4 19 Paź 2011 18:47
    tassader
    Poziom 1  

    pallid, jeśli mógłbym prosić Cię (lub kogoś innego kto wie o co chodzi) o odpowiedź, co miałeś na myśli pisząc

    Cytat:
    1. Uzytkownik podaje dane w formularzu i klika "Wyslij"
    2. Formularz przekierowany jest do serwletu "/przetworz", ktorzy wyciaga dane z "requesta" i wysyla zapytanie do odpowiedniego DAO

    OK
    Cytat:

    3. DAO wykonuje odpowiednie operacje na bazie danych i zwraca rezultat (lub nie) z powrotem do servletu "/process".

    Jak rozumiesz zwracanie rezultatu wykonania DAO do innego serwletu (/process) niż ten z którego (/przetworz) metoda DAO została wywołana?

    0
  • #5 20 Paź 2011 00:48
    pallid
    Poziom 20  

    tassader napisał:
    Cytat:

    3. DAO wykonuje odpowiednie operacje na bazie danych i zwraca rezultat (lub nie) z powrotem do servletu "/process".

    Jak rozumiesz zwracanie rezultatu wykonania DAO do innego serwletu (/process) niż ten z którego (/przetworz) metoda DAO została wywołana?


    Chodzilo mi o ten sam serwlet ("/process" == "/przetworz"). Jak pisalem posta podalem "/przetworz", a w kodzie uzylem "/process" zeby uniknac polskich znakow. Mialem to poprawic, ale skoro op stwierdzil, ze juz wie o co chodzi, to to olalem.

    Najprostszy web-app z DAO moze wygladac np. tak:

    VO (Value Object) - model
    Kod: java5
    Zaloguj się, aby zobaczyć kod

    DAO (Data Access Object) - interface
    Kod: java5
    Zaloguj się, aby zobaczyć kod

    DAO Exception - przykladowy wrapper dla wyjatkow
    Kod: java5
    Zaloguj się, aby zobaczyć kod

    PersonDAOImpl - przykladowa implementacja DAO
    Kod: java5
    Zaloguj się, aby zobaczyć kod

    ServletContextListener - przygotowywanie aplikacji i sprzatanie
    Kod: java5
    Zaloguj się, aby zobaczyć kod

    /process - wlasciwy servlet
    Kod: java5
    Zaloguj się, aby zobaczyć kod

    index.jsp
    Kod: html4strict
    Zaloguj się, aby zobaczyć kod


    Serwlet ProcessServlet jest tutaj kontrolerem, ktory decyduje o tym, jaki widok wyswietlic w zaleznosci od zwroconego z DAO wyniku. DAO moga zrocic jakis rezultat (np. ID, znaleziony obiekt, itd.), null, albo wyrzucic wyjatek. To serwlet decyduje, co sie stanie dalej. Podobnie z walidacja (czyli zanim dane zostana wyslane do bazy).

    Oczywiscie implementacja DAO (PersonDAOImpl) powinna inaczej przechowywac dane, np. powinna potrafic polaczyc sie do jakiegos RMDB (tutaj np. mozna uzyc Singleton'a trzymajacego pule polaczen do bazy danych, itd.).

    Podany (banalny) przyklad wykorzystuje same serwlety i JSP. Chodzi o zalapanie koncepcji. W normalnej pracy do znakomitej wiekszosci rzeczy obecnie wykorzystuje sie frameworki (Wicket, Struts, JSF, Spring, JPA, itd.), ktore wybawiaja od grzebaniny.

    0