8.1 Wprowadzenie do adnotacji serwletów
Począwszy od wersji 7, Tomcat zaczął obsługiwać specyfikację serwletów WWW Servlet API 3.0 . W szczególności pojawił się w nim pakiet o nazwie javax.servlet.annotation
. Zawiera różne rodzaje adnotacji, których można użyć do opisywania klasy serwletu. Jeśli używasz adnotacji, deskryptor wdrożenia (web.xml) nie jest wymagany.
Lista najbardziej przydatnych adnotacji:
adnotacja | Opis | |
---|---|---|
1 | @WebServlet |
Deklaruje serwlet |
2 | @WebInitParam |
Określa parametr inicjalizacji |
3 | @WebFilter |
Deklaruje filtr internetowy |
4 | @WebListener |
Deklaruje web lisener |
5 | @ServletSecurity |
Umożliwia skonfigurowanie ustawień zabezpieczeń |
Przykład:
@WebServlet( urlPatterns = {"/api/*"} )
public class Example extends HttpServlet {
protected void doGet( HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Hello World!");
}
}
Wystarczy jedna adnotacja, aby zadeklarować serwlet i zmapować go tak, aby obsługiwał wszystkie żądania, które będą przychodzić do adresu URL podanego przez plik /api/*
.
8.2 Konfigurowanie mapowania serwletów
Adnotacja posiada @WebServlet
wiele parametrów, które pozwalają na bardzo elastyczną konfigurację opisywanego serwletu. Przyjrzyjmy się głównym z nich:
Atrybut | Opis | |
---|---|---|
1 | name |
Unikalna nazwa serwletu (jak w web.xml) |
2 | displayName |
Czytelna dla człowieka nazwa serwletu |
3 | description |
Opis serwletu |
4 | value |
Ustawia adres URL dla mapowania |
5 | urlPatterns |
Określa listę adresów URL do mapowania (używane zamiast wartości) |
6 | initParams |
Umożliwia ustawienie parametrów początkowych serwletu |
7 | asyncSupported |
Określa, że serwlet może działać asynchronicznie (HTTP/2) |
8 | loadOnStartup |
Numer sekwencyjny do sterowania priorytetem uruchamiania serwletu |
9 | smallIcon |
Ustawia małą ikonę serwletu |
10 | largeIcon |
Ustawia dużą ikonę serwletu |
Jest tu kilka interesujących punktów.
Po pierwsze, zauważ, że value
i urlPatterns
są atrybutami wymiennymi. Oba pozwalają określić listę adresów URL, na które aplet powinien być mapowany.
Po drugie, parametr asyncSupported
wskazuje, czy aplet będzie poprawnie przetwarzał żądania asynchroniczne przez protokół HTTP/2.
Trzecim ważnym atrybutem jest initParams
, pozwala ustawić listę parametrów, które zostaną umieszczone w ServletContext.
Przykład:
@WebServlet(
urlPatterns = {"/sendFile", "/uploadFile"},
loadOnStartup = 1,
asyncSupported = true,
initParams = {
@WebInitParam(name = "saveDir", value = "c:/uploaded"),
@WebInitParam(name = "allowedTypes", value = "jpg,gif,png")
}
)
public class ImageUploadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
String saveDir = getInitParameter("saveDir");
String fileTypes = getInitParameter("allowedTypes");
PrintWriter writer = response.getWriter();
writer.println("saveDir = " + saveDir);
writer.println("fileTypes = " + fileTypes);
}
}
8.3 Konfigurowanie mapowania filtrów
Jak wspomniano powyżej, filtry są serwletami typu użytkowego i są konfigurowane jak serwlety. Oto atrybuty adnotacji @WebFilter
:
Atrybut | Opis | |
---|---|---|
1 | filterName |
Filtruj unikalną nazwę (jak w web.xml) |
2 | displayName |
Czytelna dla człowieka nazwa filtra |
3 | description |
Opis filtra |
4 | value / urlPatterns |
Ustawia listę adresów URL do mapowania |
5 | dispatcherTypes |
Określa listę DispatcherTypes |
6 | servletNames |
Określa listę serwletów, do których należy się zastosować |
7 | initParams |
Umożliwia ustawienie parametrów początkowych filtra |
8 | asyncSupported |
Określa, że filtr może działać asynchronicznie (HTTP/2) |
9 | smallIcon |
Ustawia małą ikonę filtra |
10 | largeIcon |
Ustawia dużą ikonę filtra |
Przykład filtra, który przechwytuje wszystkie żądania do określonych serwletów :
@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Przykład filtra z wieloma parametrami :
@WebFilter(
urlPatterns = "/uploadFilter",
initParams = @WebInitParam(name = "fileTypes", value = "doc;xls;zip;txt;jpg;png;gif")
)
public class UploadFilter implements Filter {
// implements Filter's methods here...
}
Przykład filtru podanego typu dla RequestDispatcher :
@WebFilter(
urlPatterns = "/admin",
dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}
)
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Więcej o przeznaczeniu filtrów i serwletów dowiesz się z kolejnych wykładów.