laboratorium 1

Transkrypt

laboratorium 1
AUI
Laboratorium 1.
Architektury Usług Internetowych
Laboratorium 1.
Servlety
Wstęp
Celem laboratorium jest zapoznanie się z modelem klient-serwer (żądanie-odpowiedź) na
przykładzie serwletów.
Kontener webowy
Kontener webowy (kontener sevletu) jest to komponent serwera webowego zajmujący się
interakcją z servletami i potencjalnie stronami JSP (dynamiczne strony tłumaczone
i wykonywanie jako servlety).
Istnieje kilka kontenerów webowych, gdzie do najpopularniejszych należą:
•
Apache Tomcat http://tomcat.apache.org/,
•
Jetty http://jetty.codehaus.org/jetty/.
Na zajęciach wykorzystywany będzie serwer Apache Tomcat, który ze względu na
kompatybilność dostępny jest w trzech utrzymywanych wersjach:
Servlet/JSP Spec
Apache Tomcat
version
Actual release
revision
Minimum Java
Version
3.0/2.2
7.0.x
7.0.30
1.6
2.5/2.1
6.0.x
6.0.35
1.5
2.4/2.0
5.5.x
5.5.35
1.4
Integracja z NetBeans IDE
Najnowsza wersja NetBeans IDE (7.2) może być zainstalowana już z zintegrowanym
Apache Tomcat 7.0.27. Ponadto każdy z powyżej wymienionych wersji może być ręcznie
zintegrowana z IDE.
Zarządzanie serwerami odbywa się poprzez zakładkę services w zakładce servers. Można
stamtąd dodawać/usuwać oraz uruchamiać/zatrzymywać serwery.
W przypadku dodawania nowego serwera należy wybrać typ serwera Apache Tomcat
i nadać mu odpowiednią nazwę. Następnie należy podać katalog gdzie zostały rozpakowane
pliki serwera oraz nazwę użytkownika i hasło (np. netbeans/netbeans) pamiętając
o zaznaczeniu pola „Create user if does not exists”.
© 2010 - 2012 Michał Wójcik
1
AUI
Laboratorium 1.
Przygotowanie projektu
Aby przygotować aplikację webową w środowisku NetBeans jako typ nowego projektu
należy wybrać Java Web/Web application. Po określeniu nazwy i lokalizacji projekty
należy wybrać serwer na którym będzie uruchamiany oraz obowiązującą wersję Java EE.
Resztę ustawień można pozostawić bez zmian. Ustawienia dotyczące serwera można później
modyfikować we właściwościach projekt w zakładce run.
Struktura stworzonego projektu jest następująca:
•
Web Pages – strony HTML aplikacji:
◦
META-INF:
▪
◦
contex.xml – deskryptor konfiguracji aplikacji specyficzny dla serwera
Apache Tomcat;
WEB-INF:
▪
web.xml – standardowy deskryptor aplikacji webowej;
•
Source Packages – źródła projektu,
•
Libraries – wszystkie dodatkowe biblioteki:
◦
Apache Tomcat – biblioteki serwera na którym będzie uruchamiana aplikacja,
zawierają również standardowe biblioteki dla Java web.
Struktura serwletu
public class Repository extends HttpServlet {
@Override
public void init() throws ServletException {
super.init();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//
}
Podstawowe metody serwletu:
•
init – inicjalizacja serwletu, wywoływana przy jego pierwszym uruchomieniu,
© 2010 - 2012 Michał Wójcik
2
AUI
Laboratorium 1.
•
doGet – obsługa żądań GET,
•
doPost – obsługa żądań POST.
Parametry żądania i odpowiedzi:
•
HttpServletRequest – dostarcza informacje na temat żądania:
◦
•
String getParameter(String name) – zwraca wartość parametru żądania,
HttpServletResponse – dostarcza informacje na temat odpowiedzi.
Sesja
Sesja jest obiektem klasy HttpSession. Może zostać pobrana np. poprzez wywołanie
odpowiedniej metody na obiekcie żądania: request.getSession().
Podstawowe operacje na obiekcie sesji:
•
Object getAttribute(String name) – pobranie obiektu z sesji,
•
void setAttribute(String name, Object obj) – dodanie obiektu do sesji,
•
void invalidate() - zniszczenie obiektu sesji,
•
void removeAttribute(String name) – usunięcie obiektu z sesji.
Wysyłanie żądania do serwletu
Przykładowe wywołanie serwletu za pomocą formularza html:
<form action="adres_serwletu">
<input type="text" name="param1" />
<input type="text" name="param2" />
<input type="submit" value="send" />
</form>
Wartości name dla kolejnych elementów w input definiują nazwy za pomocą, których
będzie można pobrać z obiektu żądania za pomocą metody getParameter().
Konfiguracja
Dla wersji 3.0
Serwlet można zdefiniować poprzez adnotację WebServlet na klasie implementującej
dziedziczącej po HttpServlet. Sposoby konfiguracji z poprzednich wersji są nadal dostępne.
@WebServlet(name="Repository", urlPatterns="/Repository")
public class Repository extends HttpServlet {
}
Parametry name i urlPatterns określają kolejno nazwę serwleta oraz adresy pod którymi
jest on dostępny.
© 2010 - 2012 Michał Wójcik
3
AUI
Laboratorium 1.
Dla wersji 2.5 i 2.4
Serwlet należy zdefiniować w pliku WEB-INF/web.xml poprzez wpis:
<servlet>
<servlet-name>Repository</servlet-name>
<servlet-class>pl.gda.pg.eti.kask.aui.servlets.Repository</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Repository</servlet-name>
<url-pattern>/Repository</url-pattern>
</servlet-mapping>
Sekcja <servlet> określa klasę i nazwę serwletu, natomiast <servlet-mapping> określa
adres pod, którym będzie znajdował się serwlet.
Dla wersji …
Przykład
Przykład pozwala użytkownikom na zapisywanie notatek na czas trwania sesji oraz
usunięcie wszystkich notatek (usunięcie sesji).
W ramach laboratorium można wykorzystać gotowy projekt NetBeans dołączony do
instrukcji.
form.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<form action="Repository" method="POST">
<input type="hidden" name="action" value="add" /><br />
id:<input type="text" name="id" /><br />
content:<input type="text" name="content" /><br />
<input type="submit" value="add note" />
</form>
<form action="Repository" method="POST">
<input type="hidden" name="action" value="clean" /><br />
<input type="submit" value="delete" />
</form>
<form action="Repository" method="GET">
<input type="hidden" name="action" value="display" /><br />
<input type="submit" value="display" />
</form>
</body>
</html>
© 2010 - 2012 Michał Wójcik
4
AUI
Laboratorium 1.
Trzy formularze pozwalające na działanie na notatkach. Dodawanie pojedynczej notatki,
usunięcie wszystkich notatek oraz wyświetlenie notatek. Każdy z formularzy ma ten sam
parametr action określający akcję, którą powinien wykonać serwlet oraz dodatkowe
parametry jeśli potrzebne.
Notes.java:
public class Notes implements Serializable {
private Map<Integer,String> notes;
public Notes() {
this.notes = new HashMap<Integer,String>();
}
public Map<Integer, String> getNotes() {
return notes;
}
}
public void setNotes(Map<Integer, String> notes) {
this.notes = notes;
}
Repository.java:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
String action = request.getParameter("action");
if (action == null) {
}
} else if (action.equals("clean")) {
request.getSession().invalidate();
out.write(display(request.getSession()));
} else if (action.equals("display")) {
out.write(display(request.getSession()));
} else if (action.equals("add")) {
int id = Integer.parseInt(request.getParameter("id"));
String content = request.getParameter("content");
add(request.getSession(), id, content);
out.write(display(request.getSession()));
}
} finally {
out.close();
}
© 2010 - 2012 Michał Wójcik
5
AUI
Laboratorium 1.
Główna metoda serwletu (wywoływana przez metody doPost i doGet) realizująca
określone akcje w zależności od wartości parametry action. Wynik zostaje wysłany na
wyjście odpowiedzi i zostaje wyświetlona w przeglądarce.
© 2010 - 2012 Michał Wójcik
6

Podobne dokumenty