8.1 Bevezetés a szervlet megjegyzésekbe
A 7-es verziótól kezdődően a Tomcat támogatni kezdte a Servlet API 3.0 webservlet specifikációját . Konkrétan egy csomag jelent meg benne, melynek neve javax.servlet.annotation
. Különféle típusú annotációkat tartalmaz, amelyekkel egy szervlet osztály annotációját lehet használni. Ha megjegyzést használ, akkor a telepítési leíró (web.xml) nem szükséges.
A leghasznosabb megjegyzések listája:
annotáció | Leírás | |
---|---|---|
1 | @WebServlet |
Kijelenti a szervletet |
2 | @WebInitParam |
Megad egy inicializálási paramétert |
3 | @WebFilter |
Webszűrőt deklarál |
4 | @WebListener |
Kijelenti a web lisenert |
5 | @ServletSecurity |
Lehetővé teszi a biztonsági beállítások konfigurálását |
Példa:
@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!");
}
}
Egy annotáció elegendő egy szervlet deklarálásához és leképezéséhez, hogy kiszolgálja az összes olyan kérést, amely a . által megadott URL-re érkezik /api/*
.
8.2 Szervlet-leképezés beállítása
A megjegyzés @WebServlet
számos paraméterrel rendelkezik, amelyek lehetővé teszik az általa leírt szervlet nagyon rugalmas konfigurálását. Nézzük a főbbeket:
Tulajdonság | Leírás | |
---|---|---|
1 | name |
Servlet egyedi név (mint a web.xml-ben) |
2 | displayName |
Ember által olvasható szervletnév |
3 | description |
Servlet leírása |
4 | value |
Beállítja az url-t a leképezéshez |
5 | urlPatterns |
Megadja a leképezendő URL-ek listáját (érték helyett használva) |
6 | initParams |
Lehetővé teszi a szervlet indítási paramétereinek beállítását |
7 | asyncSupported |
Megadja, hogy a szervlet futhat-e aszinkron módon (HTTP/2) |
8 | loadOnStartup |
Sorszám a szervlet indítási prioritásának vezérléséhez |
9 | smallIcon |
Beállít egy kis szervlet ikont |
10 | largeIcon |
Beállít egy nagy szervlet ikont |
Itt van néhány érdekes pont.
Először is vegye figyelembe, hogy a value
és urlPatterns
cserélhető attribútumok. Mindkettő lehetővé teszi azoknak az URL-címeknek a meghatározását, amelyekhez a szervlet hozzá kell rendelnie.
Másodszor, a paraméter asyncSupported
jelzi, hogy a szervlet megfelelően feldolgozza-e az aszinkron kéréseket a HTTP/2 protokollon keresztül.
A harmadik fontos attribútum pedig initParams
lehetővé teszi a ServletContextben elhelyezett paraméterek listájának beállítását.
Példa:
@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 Szűrőleképezés beállítása
Amint fentebb említettük, a szűrők a szervletek segédprogramtípusai, és úgy vannak beállítva, mint a szervletek. Íme az annotáció attribútumai @WebFilter
:
Tulajdonság | Leírás | |
---|---|---|
1 | filterName |
Szűrő egyedi név (mint a web.xml-ben) |
2 | displayName |
Ember által olvasható szűrőnév |
3 | description |
Szűrő leírása |
4 | value / urlPatterns |
Beállítja a leképezendő URL-ek listáját |
5 | dispatcherTypes |
Megadja a DispatcherTypes listát |
6 | servletNames |
Megadja azoknak a szervleteknek a listáját, amelyekre alkalmazni kell |
7 | initParams |
Lehetővé teszi a szűrő kezdő paramétereinek beállítását |
8 | asyncSupported |
Megadja, hogy a szűrő futhat-e aszinkron módon (HTTP/2) |
9 | smallIcon |
Beállít egy kis szűrő ikont |
10 | largeIcon |
Beállít egy nagy szűrő ikont |
Példa egy szűrőre, amely elfogja az összes kérést meghatározott szervletekhez :
@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Példa több paraméterrel rendelkező szűrőre :
@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...
}
Példa egy adott típusú szűrőre a RequestDispatcher számára :
@WebFilter(
urlPatterns = "/admin",
dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}
)
public class MyFilter implements Filter {
// implements Filter's methods here...
}
A következő előadásokból többet megtudhat a szűrők és szervletek céljáról.