Wprowadzenie do JSP Copyright © Politecnico di Milano September 2003 Translation: Kamil Żyła, Politechnika Lubelska
2 Plan Etapy przetwarzania strony Etapy przetwarzania strony Struktura strony JSP Struktura strony JSP Przykładowe strony JSP Przykładowe strony JSP Lista elementów Lista elementów Lista hiperłączy Lista hiperłączy Strona z detalami o elemencie Strona z detalami o elemencie Lista wielokrotnego wyboru Lista wielokrotnego wyboru Usunięcie instancji Usunięcie instancji Łańcuchy operacji Łańcuchy operacji Translation: Kamil Żyła, Politechnika Lubelska
3 Etapy przetwarzania strony Przetwarzanie strony JSP zawsze zawiera poniższe operacje Dekodowanie parametrów Połączenie z bazą danych Przygotowanie zapytań Wykonanie zapytań Przedstawienie wyników 1. Dekodowanie parametrów żądania 2. Połączenie z bazą danych & Przygotowanie i wykonanie zapytań HTTP request Parametry żądania 3. Wyświetlenie zawartości strony i linków Wyniki zapytań HTTP response Translation: Kamil Żyła, Politechnika Lubelska
4 Struktura strony JSP Translation: Kamil Żyła, Politechnika Lubelska
5 Strony JSP: przykład 1 LISTA ELEMENTÓW <% // DATABASE CONNECTION 4 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 5 Connection conn = DriverManager.getConnection 6 ("jdbc:odbc:acme", "acmeuser", "acmepwd"); 7 // QUERY PREPARATION AND EXECUTION 8 Statement stmt = conn.createStatement(); 9 ResultSet result = stmt.executeQuery( 10 "SELECT NAME FROM NEWSCATEGORY ORDER BY NAME"); 11 %> News Categories Page <% 30 result.close(); 31 stmt.close(); 32 conn.close(); 33 %> Strona wyświetlająca listę kategorii Newsów na podstawie danych pobranych z bazy danych Połączenie z bazą danych (ODBC) Definicja i wykonanie zapytania Wypisanie danych zwróconych przez zapytanie Translation: Kamil Żyła, Politechnika Lubelska
<% // DATABASE CONNECTION 4 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 5 Connection conn = DriverManager.getConnection 6 ("jdbc:odbc:acme", "acmeuser", "acmepwd"); Ustawiony język : Java Importowane biblioteki : java.sql Class.forName(…) : Ładuje sterownik bazy danych AUTOMATYCZNIE rejestruje swoją instancję w obiekcie DriverManager Connection: połączenie z bazą danych Strony JSP: przykład 1 LISTA ELEMENTÓW Translation: Kamil Żyła, Politechnika Lubelska
7 7 // QUERY PREPARATION AND EXECUTION 8 Statement stmt = conn.createStatement(); 9 ResultSet result = stmt.executeQuery( 10 "SELECT NAME FROM NEWSCATEGORY ORDER BY NAME"); 11 %> createStatement : tworzy pusty obiekt klasy Statement (interfejs do wykonywania zapytań) executeQuery : zawiera zapytanie do bazy danych przyjmuje łańcuch znaków stanowiący zapytanie w języku SQL zwraca obiekt ResultSet (zawiera wynik zapytania) Strony JSP: przykład 1 LISTA ELEMENTÓW Translation: Kamil Żyła, Politechnika Lubelska
… Generowanie znaczników i zawartości strony while (result.next()): powtarza {…} aż do przejrzenia całej kolekcji zwróconej w obiekcie ResultSet result.getString(…): zwraca wartość wskazanego atrybutu dla wskazanej instancji ResultSet Strony JSP: przykład 1 LISTA ELEMENTÓW Translation: Kamil Żyła, Politechnika Lubelska
<% 30 result.close(); 31 stmt.close(); 32 conn.close(); 33 %> Close (czynności porządkowe): Obiekty ResultSet Obiekty Statement Obiekty Connection Strony JSP: przykład 1 LISTA ELEMENTÓW Translation: Kamil Żyła, Politechnika Lubelska
10 Strony JSP: przykład 2 LISTA HIPERŁĄCZY 7 // QUERY PREPARATION AND EXECUTION 8 Statement stmt = conn.createStatement(); 9 ResultSet result = stmt.executeQuery( 10 "SELECT NAME,OID FROM NEWSCATEGORY ORDER BY NAME"); 11 %> Strona wyświetlająca listę kategorii newsów Każda nazwa kategorii jest kotwicą do strony wyświetlającej szczegółowe informacje o kategorii <a href= "categoryDetails.jsp?categoryDU= "> Translation: Kamil Żyła, Politechnika Lubelska
<a href= "categoryDetails.jsp?categoryDU= "> Atrybut Name jest wyświetlany jako kotwica Atrybut OID jest używany do złożenia wartości href kotwicy OID jest przekazywany jako parametr w adresie URL strony docelowej Strony JSP: przykład 2 LISTA HIPERŁĄCZY Translation: Kamil Żyła, Politechnika Lubelska
12 Strony JSP: przykład 3 SZCZEGÓŁOWE INFO O JEDNYM ELEMENCIE <% // REQUEST PARAMETERS FETCH 4 String categoryDUInput = request.getParameter("categoryDU"); 5 // DATABASE CONNECTION 6 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 7 Connection conn = DriverManager.getConnection("jdbc:odbc:acme", 8 "acmeuser", "acmepwd"); 9 // QUERY PREPARATION 10 PreparedStatement pstmt = conn.prepareStatement( 11 "SELECT NAME, DESCRIPTION FROM NEWSCATEGORY WHERE OID = ?"); 12 pstmt.setString(1, categoryDUInput); 13 // QUERY EXECUTION 14 ResultSet result = pstmt.executeQuery(); 15 %> Przygotowanie i wykonanie zapytania z parametrami Translation: Kamil Żyła, Politechnika Lubelska
Name 24 Description Pozyskanie pojedynczej krotki (if zamiast while) Pozyskanie wielu atrybutów dla pojedynczej instancji (NAME, DESCRIPTION) Strony JSP: przykład 3 SZCZEGÓŁOWE INFO O JEDNYM ELEMENCIE Translation: Kamil Żyła, Politechnika Lubelska
14 Strony JSP: przykład 4 LISTA WIELOKROTNEGO WYBORU <input type="checkbox" name="chosenOIDs" 23 value=" "/> Użycie znaczników formularza Dynamiczna konstrukcja pola wejściowego typu checkbox Translation: Kamil Żyła, Politechnika Lubelska
15 Strony JSP: przykład 5 USUNIĘCIE INSTANCJI 3 <% // REQUEST PARAMETERS FETCH 4 String selectedOID = request.getParameter("OID"); 5 // DATABASE CONNECTION 6 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 7 Connection conn = DriverManager.getConnection(...); 9 // QUERY PREPARATION AND EXECUTION 10 PreparedStatement pstmt = conn.prepareStatement( 11 "DELETE FROM NEWSCATEGORY WHERE OID = ?"); 12 pstmt.setString(1, selectedOID); 14 try { 15 pstmt.executeUpdate(); 16 } catch (SQLException e) { 17 pageContext.forward("errorPage.jsp"); // KO LINK 18 } 19 pstmt.close(); // TEMPORARY OBJECTS DISPOSITION 20 conn.close(); 21 pageContext.forward("newsCategories.jsp"); // OK LINK 22 %> Translation: Kamil Żyła, Politechnika Lubelska
16 Łańcuch operacji Translation: Kamil Żyła, Politechnika Lubelska
17 Źródła JDBC : JSP: Translation: Kamil Żyła, Politechnika Lubelska