Materiały poprawione dla NetBeans 8.0.1
Transkrypt
Materiały poprawione dla NetBeans 8.0.1
Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf Materiały poprawione Rozwiązanie zadania w NetBeans IDE 8.1, opracowanie materiału: Piotr Nierebiński, Mateusz Turski (na podstawie materiału oryginalnego oraz wersji poprawionej autorstwa J.Ksybek i A.Miazio.) Celem ćwiczenia jest przygotowanie prostej aplikacji internetowej wykorzystującej architekturę Spring. Aplikacja składa się z jednego zarządcy (ang. dispatcher) i jednego kontrolera wyświetlającego stronę JSP. Dodatkowo, aplikacja wykorzystuje mechanizm fabryki komponentów do połączenia się z bazą danych i wyświetlenia listy klientów. Do wykonania ćwiczenia potrzebne jest zintegrowane środowisko programistyczne NetBeans IDE 8.1 (do pobrania z http://www.netbeans.org) oraz środowisko JAVA EE 7.0 Web. 1. Uruchom narzędzie NetBeans IDE 8.1 2. Z menu głównego wybierz File → New Project. Wybierz kategorię Java Web i typ projektu Web Application. Rezultat: Kliknij przycisk NEXT > S t r o n a 1 | 10 3. Podaj nazwę projektu, np. „Spring” oraz określ ścieżkę projektu. Kliknij przycisk NEXT >. 4. Kliknij przycisk NEXT > 5. Pozostaw ustawienia bez zmian, naciśnij przycisk NEXT > S t r o n a 2 | 10 6. Zaznacz opcję Spring Web MVC. W tym momencie uaktywnią się nowe opcje. W zakładce Configuration w polu Dispatcher Name wpisz „SimpleMVC”. Pozostałe wpisy pozostaw bez zmian. Kliknij przycisk FINISH. Rezultat: 9. Utworzyła się aplikacja, którą można już uruchomić. W tym celu: Kliknij prawym przyciskiem myszy na nazwę projektu („Spring”) w zakładce Projects i z menu kontekstowego wybierz opcję Run. GlassFish Server 4.1.1 oraz DB Java Database Process uruchomi się automatycznie. Obserwuj komunikaty pojawiające się podczas uruchomiania projektu. Po kilku sekundach powinno otworzyć się okno przeglądarki wyświetlające rezultat podobny do tego: S t r o n a 3 | 10 10. Dwukrotnie kliknij lewym przyciskiem myszy na plik SimpleMVC-servlet.xml w celu jego edycji. Plik powinien wyglądać następująco: <?xml version='1.0' encoding='UTF-8' ?> <!-- was: <?xml version="1.0" encoding="UTF-8"?> --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/> <!-Most controllers will use the ControllerClassNameHandlerMapping above, but for the index controller we are using ParameterizableViewController, so we must define an explicit mapping for it. --> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="index.htm">indexController</prop> </props> </property> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" p:viewClass="org.springframework.web.servlet.view.JstlView"/> <!-The index controller. --> <bean name="indexController" class="controller.SimpleController" /> </beans> S t r o n a 4 | 10 11. Powyższa konfiguracja zleca kierowanie żądań o URL index.html do kontrolera o nazwie controller.SimpleController. Kolejnym krokiem jest implementacja tego kontrolera. Kliknij prawym przyciskiem myszy na ikonie projektu „Spring” i z menu kontekstowego wybierz New → Java Class. Wprowadź nazwę klasy: SimpleController i nazwę pakietu: controller. Kliknij przycisk FINISH. 12. Plik SimpleController.java powinien mieć następujący kod: package controller; import import import import import java.util.Date; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; org.springframework.web.servlet.ModelAndView; org.springframework.web.servlet.mvc.AbstractController; public class SimpleController extends AbstractController{ @Override protected ModelAndView handleRequestInternal (HttpServletRequest HttpServletResponse arg1) throws Exception { ModelAndView mav = new ModelAndView("welcome"); mav.addObject("date", new Date()); return mav; } } arg0, Kontroler otrzymuje żądanie, tworzy nowy obiekt wynikowy ModelAndView, dodaje do modelu obiekt biznesowy (w tym przypadku prosty obiekt java.util.Date) i zwraca obiekt wynikowy. Nazwa obiektu wynikowego „welcome" jest tłumaczona na /WEBINF/jsp/welcome.jsp. S t r o n a 5 | 10 13. Kolejny krok to zbudowanie strony JSP wywoływanej przez kontroler. Kliknij prawym przyciskiem myszy na folderze jsp i z menu kontekstowego wybierz New → JSP. Podaj nazwę dokumentu: „welcome” (nie podawaj rozszerzenia, zostanie dodane automatycznie). Naciśnij przycisk FINISH. 14. Plik welcome.jsp zostanie otwarty w edytorze. Wprowadź następujący kod: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h1>Gratulacje</h1> Teraz jest <c:out value="${date}" /> </body> </html> Zapisz wszystkie pliki i uruchom aplikację klikając prawym przyciskiem myszy na projekcie „Spring” wybierając z menu kontekstowego opcję Run. Powinna się pojawić strona internetowa z aktualną datą i godziną jak poniżej: S t r o n a 6 | 10 Skopiuj adres URL (http://localhost:8080/Spring/index.htm) i przetestuj działanie aplikacji w innych przeglądarkach. 15. Kolejny krok to dodanie do projektu komponentu odpowiedzialnego za nawiązanie połączenia z bazą danych. Kliknij dwukrotnie na pliku SimpleMVC-servlet.xml i wewnątrz znaczników wprowadź następującą definicję komponentu dbBean, podając prawidłowe parametry połączenia (host, port, sid, username, password): <bean id="dbBean" class="org.springframework.jdbc.datasource.DriverManagerDataSource" p:driverClassName="org.apache.derby.jdbc.ClientDriver" p:url="jdbc:derby://localhost:1527/sample" p:username="app" p:password="app" /> 16. Nawiązanie połączenia z bazą danych wymaga dołączenia do projektu właściwego sterownika JDBC. Kliknij prawym przyciskiem myszy na ikonie projektu „Spring”, z menu kontekstowego wybierz Properies, wyświetli się okno właściwości projektu. Wybierz zakładkę Libraries i z menu po prawej stronie wybierz Add Library. S t r o n a 7 | 10 Wybierz z listy sterownik Java DB Driver i kliknij Add Library. 17. Nawiązanie połączenia, wykonanie zapytania i odczytanie wyników zapytania jest realizowane w kontrolerze. Kliknij dwukrotnie plik SimpleController.java w celu jego edycji i dodaj kod obsługi połączenia z bazą danych. S t r o n a 8 | 10 package controller; … import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DriverManagerDataSource; … protected ModelAndView handleRequestInternal (HttpServletRequest arg0, HttpServletResponse arg1) throws Exception { ApplicationContext ctx = this.getApplicationContext(); DriverManagerDataSource dbBean = (DriverManagerDataSource) ctx.getBean("dbBean"); JdbcTemplate template = new JdbcTemplate(dbBean); List clients = template.queryForList("SELECT * FROM customer"); ModelAndView mav = new ModelAndView("welcome"); mav.addObject("date", new Date()); mav.addObject("clients", clients); return mav; } … 18. Zmodyfikuj wynikową stronę JSP w taki sposób, aby wyświetlała wynik zapytania przesłany przez kontroler w obiekcie „employees”. Kliknij dwukrotnie plik welcome.jsp i przejdź do jego edycji. Plik powinien wyglądać następująco: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h1>Gratulacje</h1> <fmt:setLocale value="pl_PL" /> Teraz jest <fmt:formatDate value="${date}" pattern="dd-MM-yyyy HH:mm" /> <h1>Lista klientów</h1> <table border="1"> <tr><th>Nazwa</th><th>Miasto</th><th>Email</th><th>FAX</th></tr> <c:forEach var="emp" items="${clients}"> <tr> <td> <c:out value="${emp['NAME']}" /> </td> <td> <c:out value="${emp['CITY']}" /> </td> <td> <c:out value="${emp['EMAIL']}" /> </td> <td> <c:out value="${emp['FAX']}" /> </td> </tr> </c:forEach> </table> </body> </html> S t r o n a 9 | 10 19. Przed uruchomieniem aplikacji należy zmienić serwer bazy danych. W tym celu przejdź do zakładki Services. Rozwiń drzewo Database. Kliknij prawym przyciskiem myszy na JavaDB -> wybierz Properties. Pojawi się okno jak poniżej: Odszukaj ścieżkę instalacji javadb serwera GlassFish i podmień istniejącą ścieżkę w polu Java DB Installation. Naciśnij OK. 20. Ustanów połączenie z bazą danych. W tym celu kliknij prawym przyciskiem myszy na JavaDB i z menu kontekstowego wybierz opcję Start Server. Kiedy serwer się uruchomi (obserwuj komunikaty w oknie „Output - JavaDB Database Process”), powtórz czynność wybierając Connect z menu kontekstowego jdbc:derby://localhost:1527/sample [app on APP]. 21. Przejdź do zakładki Projects i uruchom aplikację (Run -> Run Project (Spring)). S t r o n a 10 | 10