8.1 Introducere în adnotările servlet

Începând cu versiunea 7, Tomcat a început să accepte specificația de servlet web Servlet API 3.0 . În special, a apărut un pachet numit javax.servlet.annotation. Conține diferite tipuri de adnotări care pot fi folosite pentru a adnota o clasă de servlet. Dacă utilizați o adnotare, atunci descriptorul de implementare (web.xml) nu este necesar.

Lista celor mai utile adnotări:

adnotare Descriere
1 @WebServlet Declara un servlet
2 @WebInitParam Specifică un parametru de inițializare
3 @WebFilter Declara un filtru web
4 @WebListener Declara utilizatorul web
5 @ServletSecurity Vă permite să configurați setările de securitate

Exemplu:

@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!");
    }
}

O adnotare este suficientă pentru a declara un servlet și a-l mapa pentru a servi toate solicitările care vor ajunge la adresa URL dată de /api/*.

8.2 Configurarea mapării servlet-urilor

Adnotarea are @WebServletmulți parametri care permit configurarea foarte flexibilă a servlet-ului pe care îl descrie. Să aruncăm o privire la cele principale:

Atribut Descriere
1 name Nume unic servlet (ca în web.xml)
2 displayName Nume servlet care poate fi citit de om
3 description Descrierea servletului
4 value Setează adresa URL pentru mapare
5 urlPatterns Specifică o listă de adrese URL de mapat (utilizate în loc de valoare)
6 initParams Vă permite să setați parametrii de pornire ai servlet-ului
7 asyncSupported Specifică faptul că servletul poate rula asincron (HTTP/2)
8 loadOnStartup Numărul de secvență pentru a controla prioritatea de pornire a servlet-ului
9 smallIcon Setează o pictogramă mică de servlet
10 largeIcon Setează o pictogramă servlet mare

Există mai multe puncte interesante aici.

În primul rând, rețineți că valueși urlPatternssunt atribute interschimbabile. Ambele vă permit să specificați o listă de adrese URL la care ar trebui să mapați servletul.

În al doilea rând, parametrul asyncSupportedindică dacă servletul va procesa corect cererile asincrone prin protocolul HTTP/2.

Și al treilea atribut important este initParams, vă permite să setați o listă de parametri care vor fi plasați în ServletContext.

Exemplu:

@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 Configurarea mapării filtrului

După cum am menționat mai sus, filtrele sunt un tip utilitar de servlet-uri și sunt configurate ca servlet-uri. Iată atributele pe care le are o adnotare @WebFilter:

Atribut Descriere
1 filterName Filtrați numele unic (ca în web.xml)
2 displayName Nume filtru care poate fi citit de om
3 description Descriere filtru
4 value / urlPatterns Setează o listă de adrese URL pentru a mapa
5 dispatcherTypes Specifică o listă de DispatcherTypes
6 servletNames Specifică o listă de servlet-uri la care să se aplice
7 initParams Vă permite să setați parametrii de pornire ai filtrului
8 asyncSupported Specifică faptul că filtrul poate rula asincron (HTTP/2)
9 smallIcon Setează o pictogramă de filtru mică
10 largeIcon Setează o pictogramă mare de filtru

Un exemplu de filtru care interceptează toate solicitările către anumite servlet-uri :

@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
    // implements Filter's methods here...
}

Un exemplu de filtru dat cu mai mulți parametri :

@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...
}

Un exemplu de filtru date tipuri pentru RequestDispatcher :

@WebFilter(
        urlPatterns = "/admin",
        dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}
)
public class MyFilter implements Filter {
    // implements Filter's methods here...
}

Veți afla mai multe despre scopul filtrelor și servlet-urilor în următoarele prelegeri.