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 @WebServletszá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 urlPatternscseré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 asyncSupportedjelzi, hogy a szervlet megfelelően feldolgozza-e az aszinkron kéréseket a HTTP/2 protokollon keresztül.
A harmadik fontos attribútum pedig initParamslehető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.
GO TO FULL VERSION