8.1 Pambuka kanggo anotasi servlet

Miwiti karo versi 7, Tomcat wiwit ndhukung spesifikasi servlet web Servlet API 3.0 . Ing tartamtu, paket katon ing disebut javax.servlet.annotation. Isine macem-macem jinis anotasi sing bisa digunakake kanggo menehi anotasi kelas servlet. Yen sampeyan nggunakake anotasi, deskriptor penyebaran (web.xml) ora dibutuhake.

Dhaptar anotasi sing paling migunani:

anotasi Katrangan
1 @WebServlet Ngandika servlet
2 @WebInitParam Nemtokake parameter initialization
3 @WebFilter Nyatakake saringan web
4 @WebListener Nyatakake lisener web
5 @ServletSecurity Ngidini sampeyan ngatur setelan keamanan

Tuladha:

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

Siji anotasi cukup kanggo ngumumake servlet lan peta kanggo nglayani kabeh panjalukan sing bakal teka menyang URL sing diwenehake dening /api/*.

8.2 Nggawe pemetaan servlet

Anotasi duwe @WebServletakeh paramèter sing ngidini konfigurasi fleksibel banget saka servlet sing diterangake. Ayo goleki sing utama:

Atribut Katrangan
1 name Jeneng unik Servlet (kaya ing web.xml)
2 displayName Jeneng servlet sing bisa diwaca manungsa
3 description Deskripsi Servlet
4 value Nyetel url kanggo pemetaan
5 urlPatterns Nemtokake dhaptar url sing arep dipetakan (digunakake tinimbang nilai)
6 initParams Ngidini sampeyan nyetel paramèter wiwitan servlet
7 asyncSupported Nemtokake manawa servlet bisa mlaku kanthi ora sinkron (HTTP/2)
8 loadOnStartup Nomer urutan kanggo ngontrol prioritas wiwitan servlet
9 smallIcon Nyetel lambang servlet cilik
10 largeIcon Nyetel lambang servlet gedhe

Ana sawetara titik menarik ing kene.

Pisanan, elinga valuelan urlPatternsminangka atribut sing bisa diijolake. Loro-lorone ngidini sampeyan nemtokake dhaptar URL sing kudu dipetakan dening servlet.

Kapindho, parameter kasebut asyncSupportednuduhake manawa servlet bakal ngolah panjaluk asinkron kanthi bener liwat protokol HTTP/2.

Lan atribut penting katelu yaiku initParams, ngidini sampeyan nyetel dhaptar paramèter sing bakal diselehake ing ServletContext.

Tuladha:

@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 Nggawe pemetaan filter

Kaya kasebut ing ndhuwur, saringan minangka jinis utilitas servlet, lan dikonfigurasi kaya servlet. Mangkene atribut sing ana ing anotasi @WebFilter:

Atribut Katrangan
1 filterName Filter jeneng unik (kaya ing web.xml)
2 displayName Jeneng Filter sing bisa diwaca manungsa
3 description Katrangan Filter
4 value / urlPatterns Nyetel dhaptar url kanggo peta
5 dispatcherTypes Nemtokake dhaptar DispatcherTypes
6 servletNames Nemtokake dhaptar servlet sing bakal ditrapake
7 initParams Ngidini sampeyan nyetel paramèter wiwitan panyaring
8 asyncSupported Nemtokake yen panyaring bisa mlaku kanthi ora sinkron (HTTP/2)
9 smallIcon Nyetel lambang filter cilik
10 largeIcon Nyetel lambang filter gedhe

Conto panyaring sing nyegat kabeh panjalukan menyang servlet tartamtu :

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

Conto filter sing diwenehi pirang-pirang paramèter :

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

Conto jinis filter sing diwenehake kanggo RequestDispatcher :

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

Sampeyan bakal sinau luwih lengkap babagan tujuan saringan lan servlet ing kuliah ing ngisor iki.