Aplikacje WWW - laboratorium

Podobne dokumenty
Java Database Connectivity

Aplikacje internetowe i rozproszone - laboratorium

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

2) W wyświetlonym oknie należy zaznaczyć chęć utworzenia nowej aplikacji (wygląd okna może się różnić od powyższego); kliknąć OK

Plan wykładu. Dostęp do bazy danych. Architektura JDBC. Dostęp do baz danych z aplikacji Java EE

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

JDBC (Java Database Connectivity vit )

Architektury Usług Internetowych. Laboratorium 1. Servlety

Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski. Zaawansowane Systemy Decyzyjne. Laboratorium

Aplikacje WWW - laboratorium

Aplikacje WWW - laboratorium

Dostęp do baz danych z aplikacji J2EE

prepared by: Programowanie WWW Servlety

Java EE: Serwlety i filtry serwletów

Elementy JEE. 1. Wprowadzenie. 2. Prerekwizyty. 3. Pierwszy servlet. obsługa parametrów żądań 4. JavaServer Pages.

Zaawansowane aplikacje internetowe laboratorium

Aplikacje internetowe - laboratorium

Programowanie w języku Java

Zaawansowane aplikacje internetowe - laboratorium Architektura Spring.

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

JDBC. Plan ćwiczenia. Wywoływanie poleceń SQL z języków programowania. Plan ćwiczenia cd. Wprowadzenie do laboratorium

Typy sterowników. Rozdział 21 JDBC. Podstawowe kroki aplikacji. Historia. Program napisany w języku Java JDBC API. Menadżer sterowników JDBC

Serwlety Java: zagadnienia zaawansowane. Data Sources. Data Sources. Przykład pliku data-sources.xml

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

b) Jako nazwę projektu wpisz SerwletyJSPJSTL. Nie zmieniaj wartości pozostałych opcji. Kliknij przycisk Next >.

Enterprise JavaBeans (EJB)

Aplikacje WWW - laboratorium

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Aplikacje WWW - laboratorium

Wykład dla studentów Informatyki Stosowanej UJ 2012/2013

1 Wprowadzenie do J2EE

JAVA I BAZY DANYCH. MATERIAŁY:

Aplikacje WWW - laboratorium

Analiza porównawcza technologii tworzenia aplikacji internetowych dla baz danych Oracle

Java rozszerzenie. dr. A. Dawid

Wybrane Działy Informatyki Stosowanej LABORATORIUM 1.

Microsoft.NET: LINQ to SQL, ASP.NET AJAX

Programowanie w języku Java. Bazy danych SQLite w Javie

Łączenie z bazą danych przykładowa klasa infpolaczenie import java.sql.drivermanager; import java.sql.connection; import java.sql.

Protokół JDBC współpraca z relacyjnymi bazami danych lab4. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Wybierz kategorię Java Web i typ projektu Web Application. Kliknij przycisk Next >.

Bazy danych wykład dwunasty

prepared by: Programowanie WWW Model-View-Controller

Analiza porównawcza technologii tworzenia aplikacji internetowych dla baz danych Oracle

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Architektury Usług Internetowych. Laboratorium 1 Servlety

Wybrane działy Informatyki Stosowanej

Zaawansowane aplikacje internetowe laboratorium

Architektura Model-View-Controller

Metody dostępu do danych

In»ynieria systemów informacyjnych - Adam Krechowicz

Protokół JDBC współpraca z relacyjnymi bazami danych lab3

Aplikacje WWW - laboratorium

Aplikacje WWW - laboratorium

Zaawansowane aplikacje internetowe - laboratorium

Zaawansowane aplikacje WWW - laboratorium

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

Piotr Laskowski Krzysztof Stefański. Java Servlets

Czym są serwlety Java? Serwlety Java. Zalety serwletów Java (w porównaniu z CGI)

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

Projektowanie aplikacji internetowych laboratorium

1) Przygotowanie środowiska pracy.

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

Projektowanie aplikacji J2EE w architekturze Model-View-Controller

Microsoft.NET: Warstwa dostępu do danych (DAL) w aplikacjach ASP.NET Web Forms

Przegląd technologii JSP

Java i jej wykorzystanie do tworzenia dynamicznych aplikacji Webowych

Testowanie podstawowej konfiguracji serwera w środowisku NetBeans

CGI i serwlety. Plan wykładu. Wykład prowadzi Mikołaj Morzy. Przykład: serwlety vs. szablony. Implementacja logiki prezentacji

Połączenie z bazą danych

Programowanie w języku Java

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Connection con = DriverManager.getConnection(dbUrl, username, passwd);

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Serwlety. Co to jest serwlet? Przykładowy kod serwletu. Po co są serwlety?

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 2).

Aplikacje www laboratorium

Java Database Connectivity

Obsługa transakcji rozproszonych Java. Marek Wojciechowski, Maciej Zakrzewicz Instytut Informatyki, Politechnika Poznańska

Aplikacje Internetowe

Programowanie komputerów. Wykład 10: Dostęp do baz danych z poziomu aplikacji Java. (JDBC Database Access)

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Podstawy otwartych języków programowania Java Database Connectivity (JDBC)

TIN Techniki Internetowe Lato 2005

E:\DYDAKTYKA\ZAI\ZWWW\Laboratoria\L07\Java Persistence.doc 2011-lis-24, 17:0 Zaawansowane aplikacje internetowe Laboratorium Java Persistence.

Java wybrane technologie spotkanie nr 4. Serwlety c.d.

Java EE: JSF + EJB + JPA

Programowanie wielowarstwowe i komponentowe

Programowanie w Sieci Internet JSP ciąg dalszy. Kraków, 9 stycznia 2015 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Tworzenie usług internetowych. Servlety cz. 1

Projektowanie oprogramowania. Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz

Aplikacje WWW - laboratorium

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Ćwiczenia 2 IBM DB2 Data Studio

Zaawansowane aplikacje internetowe

Transkrypt:

Aplikacje WWW - laboratorium Java Database Connectivity Celem ćwiczenia jest zbudowanie kilku prostych serwletów z użyciem technologii JDBC. Podczas ćwiczenia zbudowane zostaną serwlety ilustrujące podstawowe techniki łączenia się z bazą danych, wykonywania zapytań oraz przetwarzania wyników zapytania. Do wykonania ćwiczenia potrzebne jest zintegrowane środowisko programistyczne NetBeans IDE 5.5 (do pobrania z http://www.netbeans.org) oraz środowisko J2SE 1.4.2 (lub wyższe). Dodatkowo, potrzebne są sterowniki JDBC do łączenia się z bazą danych Oracle w wersji 10.2 (do pobrania z http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html) 1. Uruchom narzędzie NetBeans IDE 5.5 2. Z menu głównego wybierz File New Project. W otwartym okienku kreatora projektu wybierz kategorię Web i typ projektu Web Application. Kliknij przycisk Next >.

3. Podaj nazwę projektu, Aplikacje internetowe JDBC. Upewnij się, że wybranym serwerem aplikacji jest zagnieżdżony serwer Tomcat 5.5. Skróć ścieżkę aplikacji do postaci /ai-jdbc i zaznacz zgodność kodu źródłowego z 1.4. Kliknij przycisk Finish.

4. Wybierz z menu Tools Library Manager. Kliknij przycisk New Library Jako nazwę biblioteki podaj Oracle-JDBC, jako typ biblioteki podaj Class Libraries. Kliknij przycisk Add JAR/Folder Zaznacz pliki classes12.jar, ojdbc14.jar i orai18n.jar i kliknij przycisk Add JAR/Folder Kliknij przycisk OK. 5. W nawigatorze projektu rozwiń gałąź Libraries, kliknij prawym klawiszem myszy na ikonie Libraries i z menu kontekstowego wybierz opcję Add Library. Znajdź na liście bibliotekę Oracle-JDBC i kliknij przycisk Add Library.

6. Utwórz nowy serwlet i nazwij go JDBCTestServlet. Umieść serwlet w pakiecie ai.servlets. Umieść w serwlecie poniższy kod. Zwróć uwagę na importowane biblioteki oraz sposób zarejestrowania sterownika JDBC. package ai.servlets; import java.io.*; import java.net.*; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; import oracle.jdbc.*; public class JDBCTestServlet extends HttpServlet { protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String url = "jdbc:oracle:thin:@dblab.cs.put.poznan.pl:1521:dblab10g"; String username = "xxx"; String password = "xxx" DriverManager.registerDriver( new oracle.jdbc.oracledriver() ); Connection conn = DriverManager.getConnection(url, username, password); DatabaseMetaData dbmetadata = conn.getmetadata(); PrintWriter out = response.getwriter(); out.println("<html><head><title>jdbc meta data</title></head>"); out.println("<body>"); out.println("<h2>database metadata</h2>"); out.println("<ul>"); out.println("<li>database: " + dbmetadata.getdatabaseproductname()); out.println("<li>version: " + dbmetadata.getdatabaseproductversion()); out.println("<li>jdbc version: " + dbmetadata.getjdbcmajorversion() + "." + dbmetadata.getjdbcminorversion()); out.println("<li>sql keywords: " + dbmetadata.getsqlkeywords()); out.println("<li>list of objects"); out.println("<ul>"); ResultSet tabs = dbmetadata.gettables(null,username,null,null); while (tabs.next()) out.println("<li>" + tabs.getstring("table_name") + " <b>" + tabs.getstring("table_type") + "</b>"); out.println("</ul>"); out.println("</ul>"); out.println("</ul>"); out.println("</body>"); out.println("</html>"); out.close(); catch (SQLException ex) { ex.printstacktrace();

7. W następnym zadaniu nauczysz się wykonywać proste zapytania do bazy danych. Zwróć uwagę, że sterownik JDBC można zarejestrować poprzez jawne załadowanie właściwej klasy. Utwórz serwlet JDBCSimpleQueryServlet w pakiecie ai.servlets i umieść w nim poniższy kod package ai.servlets; import java.io.*; import java.net.*; import java.text.*; import java.util.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*; import oracle.jdbc.driver.oracledriver; public class JDBCSimpleQueryServlet extends HttpServlet { protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String url = "jdbc:oracle:thin:@dblab.cs.put.poznan.pl:1521:dblab10g"; String username = "xxx"; String password = "xxx" Class.forName("oracle.jdbc.OracleDriver"); Connection conn = DriverManager.getConnection(url, username, password); Statement stmt = conn.createstatement(); ResultSet rset = stmt.executequery(" SELECT nazwisko,etat,placa_pod,zatrudniony FROM pracownicy"); response.setcontenttype("text/html"); response.setcharacterencoding("windows-1250"); PrintWriter out = response.getwriter(); out.println("<html><head><title>jdbc simple query</title></head>"); out.println("<body><h2>pracownicy</h2>"); out.println("<table border='1'>"); out.println("<tr><th>nazwisko</th><th>etat</th> <th>płaca</th><th>zatrudnienie</th></tr>"); while (rset.next()) { NumberFormat nf = new DecimalFormat("#####.00"); DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE); String nazwisko = rset.getstring("nazwisko"); String etat = rset.getstring(2); float placa_pod = rset.getfloat("placa_pod"); java.util.date zatrudniony = rset.getdate(4); out.println("<tr><td>" + nazwisko + "</td><td>" + etat + "</td> <td>" + nf.format(placa_pod) + "</td> <td>" + df.format(zatrudniony) + "</td></tr>"); out.println("</table></html>"); out.close(); rset.close(); stmt.close(); conn.close(); catch (SQLException ex) { ex.printstacktrace(); catch (ClassNotFoundException ex) { ex.printstacktrace();

8. Kolejne ćwiczenie obrazuje sposób postępowania z wynikiem zapytania. Utwórz serwlet o nazwie JDBCResultSetServlet w pakiecie ai.servlets i umieść w nim poniższy kod. Zwróć uwagę na przekazywanie połączenia, zapytania i wyniku przez sesję. Zauważ, że ładowanie sterownika przeniesiono do metody init(). package ai.servlets; import java.io.*; import java.net.*; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; import oracle.jdbc.oracledriver; public class JDBCResultSetServlet extends HttpServlet { public void init() throws ServletException { Class.forName("oracle.jdbc.OracleDriver"); catch (ClassNotFoundException ex) { ex.printstacktrace(); protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getsession(); String url = "jdbc:oracle:thin:@dblab.cs.put.poznan.pl:1521:dblab10g"; String username = "xxx"; String password = "xxx"; response.setcontenttype("text/html"); response.setcharacterencoding("windows-1250"); PrintWriter out = response.getwriter(); out.println("<html><head><title>resultset management</title></head>"); out.println("<body><h2>resultset management</h2>"); Connection conn = (Connection)session.getAttribute("connection"); if (conn == null) { conn = DriverManager.getConnection(url, username, password); session.setattribute("session", session); Statement stmt = (Statement)session.getAttribute("statement"); if (stmt == null) { stmt = conn.createstatement(resultset.type_forward_only, ResultSet.CONCUR_READ_ONLY); session.setattribute("statement", stmt); ResultSet rset = (ResultSet)session.getAttribute("query"); if (rset == null) { rset = stmt.executequery("select nazwisko FROM pracownicy"); session.setattribute("query", rset); String action = request.getparameter("action"); if (action == null) rset.next(); else if (action.equals("next") &&!rset.islast()) rset.next(); else if (action.equals("previous") &&!rset.isfirst()) rset.previous(); out.println(rset.getstring("nazwisko") + "<br/>");

out.println("<a href=\"jdbcresultsetservlet?action=previous\"> <<previous</a>"); out.println("<a href=\"jdbcresultsetservlet?action=next\"> next>></a>"); out.println("</body></html>"); out.close(); catch (SQLException ex) { ex.printstacktrace(); 9. Przetestuj działanie serwletu. Czy działa przewijanie kursora do tyłu? Zweryfikuj komunikat w logu serwera. Zmień typ zbioru wynikowego na TYPE_SCROLL_INSENSITIVE i powtórz ćwiczenie. 10. Celem kolejnego ćwiczenia jest zobrazowanie sposobu wykorzystania wiązania zmiennych za pomocą JDBC. Utwórz serwlet JDBCPreparedQueryServlet. W metodzie init() załaduj właściwy sterownik. W metodzie doget() kolejno: nawiąż połączenie z bazą danych, wykonaj zapytanie SELECT id_prac, nazwisko FROM pracownicy a następnie umieść w metodzie poniższy kod out.println("<html><head><title>preparedquery test</title></head>"); out.println("<body><h2>pracownicy</h2>"); out.println("<table border=1><tr><th colspan=2>nazwisko</th></tr>"); while (rset.next()) { out.println("<tr><td>" + rset.getstring("nazwisko") + "</td>"); out.println("<td><a href=\"jdbcpreparedqueryservlet?id=" + rset.getint("id_prac") + "\">dane pracownika</a></td></tr>"); out.println("</table>"); int id = 0; if (request.getparameter("id")!= null) { id = Integer.parseInt(request.getParameter("id")); PreparedStatement pstmt = conn.preparestatement("select * FROM pracownicy WHERE id_prac =?"); pstmt.setint(1, id); ResultSet emp = pstmt.executequery(); emp.next(); out.println("<h3>pracownik</h3>"); out.println("<ul>"); out.println("<li>" + emp.getstring("nazwisko")); out.println("<li>" + emp.getstring("etat")); out.println("<li>" + emp.getfloat("placa_pod")); out.println("<li>" + emp.getdate("zatrudniony")); out.println("</ul>"); out.println("</body></html>"); out.close(); rset.close(); stmt.close(); conn.close();

11. Kolejne ćwiczenie pokazuje, w jaki sposób można modyfikować zawartość bazy danych wykorzystując mechanizm kursorów (zamiast poleceń SQL). Utwórz nowy serwlet JDBCUpdateServlet. W metodzie init() załaduj sterownik JDBC. W metodzie doget() umieść poniższy kod: response.setcontenttype("text/html"); response.setcharacterencoding("windows-1250"); String url = "jdbc:oracle:thin:@dblab.cs.put.poznan.pl:1521:dblab10g"; String username = "xxx"; String password = "xxx"; String query = "SELECT id_prac, nazwisko, placa_pod FROM pracownicy"; Connection conn = DriverManager.getConnection(url, username, password); Statement stmt = conn.createstatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rset = stmt.executequery(query); conn.setautocommit(false); conn.settransactionisolation(connection.transaction_read_committed); int id = 0; if (request.getparameter("id")!= null) { id = Integer.parseInt(request.getParameter("id")); rset.first(); while (rset.getint("id_prac")!= id) rset.next(); float placa = rset.getfloat("placa_pod"); rset.updatefloat("placa_pod", placa + 101); rset.updaterow(); conn.commit(); PrintWriter out = response.getwriter(); response.setcontenttype("text/html"); response.setcharacterencoding("utf-8"); out.println("<html><head><title>updatequery test</title></head>"); out.println("<body><h2>pracownicy</h2>"); out.println("<table border=1><tr><th>nazwisko</th><th>płaca</th></tr>"); rset.first(); while (rset.next()) { out.println("<tr><td>" + rset.getstring("nazwisko") + "</td>"); out.println("<td>" + rset.getfloat("placa_pod") + "</td>"); out.println("<td><a href=\"jdbcupdateservlet?id=" + rset.getint("id_prac") + "\">podwyżka</a></td></tr>"); out.println("</table>"); rset.close(); stmt.close(); conn.close(); catch (SQLException ex) { ex.printstacktrace(); catch (IOException ex) { ex.printstacktrace(); 12. Utwórz w bazie danych tabelę TEST ( X VARCHAR(100)) i dodaj do powyższego kodu fragment, który dokona wsadowego dodania zbioru rekordów do tabeli TEST. stmt.addbatch("insert INTO test VALUES ('a')"); stmt.addbatch("insert INTO test VALUES ('b')"); stmt.addbatch("insert INTO test VALUES ('c')"); int[] counts = stmt.executebatch();

13. Ostatnie ćwiczenie pokazuje kroki konieczne do uruchomienia aplikacji w konfiguracji z pulą połączeń. Otwórz kod źródłowy serwletu JDBCTestServlet. Następnie, wykonaj następujące kroki: a) Dodaj specyfikację źródła danych do pliku $CATALINA_BASE/config/server.xml. Wewnątrz znacznika <GlobalNamingResources> umieść poniższy kod <Resource name="jdbc/dblab" auth="container" type="javax.sql.datasource" driverclassname="oracle.jdbc.oracledriver" url="jdbc:oracle:thin:@dblab.cs.put.poznan.pl:1521:dblab10g" username="xxx" password="xxx" maxactive="20" maxidle="10" maxwait="-1"/> b) Do katalogu $CATALINA_HOME/common/lib przekopiuj pliki składające się na sterownik JDBC. c) Do deskryptora wdrożenia aplikacji web.xml dopisz deklarację wykorzystania zasobu. Bezpośrednio przed zamykającym znacznikiem </web-app> umieść poniższy kod <resource-ref> <res-ref-name>jdbc/dblab</res-ref-name> <res-type>javax.sql.datasource</res-type> <res-auth>containe r</res-auth> <res-sharing-scope>shareable</res-sharing-scope> </resource-ref> d) Do kodu źródłowego serwletu dodaj polecenia importujące pakiety javax.sql i javax.naming. Zastąp linie DriverManager.registerDriver( new oracle.jdbc.oracledriver() ); Connection conn = DriverManager.getConnection(url, username, password); liniami Context initcontext = new InitialContext(); DataSource ds = (DataSource)initContext.lookup("java:comp/env/jdbc/dblab"); Connection conn = ds.getconnection(); Pamiętaj, żeby obsłużyć wyjątek NamingException który może zostać zgłoszony podczas wyszukiwania źródła danych w JNDI.