laboratorium 1

Transkrypt

laboratorium 1
AUI – laboratorium
Laboratorium 1
Architektury usług internetowych
Laboratorium 1.
Serwlety
Wstęp
Celem laboratorium jest zapoznanie się z modelem klient-serwer (żądanie-odpowiedź) na
przykładzie serwletów.
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,
•
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,
© 2010 Michał Wójcik
1
AUI – laboratorium
•
Laboratorium 1
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 input definiują nazwy za pomocą, których będzie
można pobrać z obiektu żądania za pomocą metody getParameter().
Konfiguracja
Serwlet należy zdefiniować w pliku WEB-INF/web.xml poprzez wpis:
<servlet>
<servlet-name>Repository</servlet-name>
<servlet-class>aui.servlet.RepositoryServlet</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.
© 2010 Michał Wójcik
2
AUI – laboratorium
Laboratorium 1
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ć gotową aplikację znajdującą się w Apache Tomcat,
servlets-examples.
•
Katalog aui należy umieścić w katalogu servlets-examples/WEB-INF/classes/.
•
Klasy należy skompilować z katalogu WEB-INF/classes poleceniem:
◦
javac -cp servlet-api.jar aui/servlet/Notes.java
◦
javac -cp servlet-api.jar aui/servlet/RepositoryServlet.java
•
Należy zmodyfikować plik web.xml według wzoru podanego w sekcji konfiguracja.
•
Plik form.html należy skopiować do servlets-examples/.
•
Testowanie: https://localhost:8080/servlet-examples/form.html.
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="http://localhost:8080/servlets-examples/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="http://localhost:8080/servlets-examples/Repository" method="POST">
<input type="hidden" name="action" value="clean" /><br />
<input type="submit" value="delete" />
</form>
<form action="http://localhost:8080/servlets-examples/Repository" method="GET">
<input type="hidden" name="action" value="display" /><br />
<input type="submit" value="display" />
</form>
</body>
</html>
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>();
}
© 2010 Michał Wójcik
3
AUI – laboratorium
Laboratorium 1
public Map<Integer, String> getNotes() {
return notes;
}
public void setNotes(Map<Integer, String> notes) {
this.notes = notes;
}
}
RepositoryServlet.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();
}
}
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 Michał Wójcik
4

Podobne dokumenty