8.1 Pengantar anotasi servlet

Dimulai dengan versi 7, Tomcat mulai mendukung spesifikasi web servlet Servlet API 3.0 . Secara khusus, sebuah paket muncul di dalamnya bernama javax.servlet.annotation. Ini berisi berbagai jenis anotasi yang dapat digunakan untuk membuat anotasi kelas servlet. Jika Anda menggunakan anotasi, deskriptor penyebaran (web.xml) tidak diperlukan.

Daftar anotasi yang paling berguna:

anotasi Keterangan
1 @WebServlet Mendeklarasikan servlet
2 @WebInitParam Menentukan parameter inisialisasi
3 @WebFilter Mendeklarasikan filter web
4 @WebListener Mendeklarasikan lisener web
5 @ServletSecurity Memungkinkan Anda mengonfigurasi pengaturan keamanan

Contoh:

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

Satu anotasi cukup untuk mendeklarasikan servlet dan memetakannya untuk melayani semua permintaan yang akan datang ke URL yang diberikan oleh /api/*.

8.2 Menyiapkan pemetaan servlet

Anotasi memiliki @WebServletbanyak parameter yang memungkinkan konfigurasi servlet yang sangat fleksibel yang dijelaskannya. Mari kita lihat yang utama:

Atribut Keterangan
1 name Nama unik servlet (seperti di web.xml)
2 displayName Nama servlet yang dapat dibaca manusia
3 description Deskripsi Servlet
4 value Menetapkan url untuk pemetaan
5 urlPatterns Menentukan daftar url untuk dipetakan (digunakan sebagai pengganti nilai)
6 initParams Memungkinkan Anda menyetel parameter awal servlet
7 asyncSupported Menentukan bahwa servlet dapat berjalan secara asinkron (HTTP/2)
8 loadOnStartup Nomor urut untuk mengontrol prioritas mulai servlet
9 smallIcon Menyetel ikon servlet kecil
10 largeIcon Menyetel ikon servlet besar

Ada beberapa poin menarik di sini.

Pertama, perhatikan bahwa valuedan urlPatternsadalah atribut yang dapat dipertukarkan. Keduanya memungkinkan Anda untuk menentukan daftar URL yang harus dipetakan oleh servlet.

Kedua, parameter asyncSupportedmenunjukkan apakah servlet akan memproses permintaan asinkron dengan benar melalui protokol HTTP/2.

Dan atribut penting ketiga adalah initParams, memungkinkan Anda untuk mengatur daftar parameter yang akan ditempatkan di ServletContext.

Contoh:

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

Seperti disebutkan di atas, filter adalah jenis servlet utilitas, dan dikonfigurasi seperti servlet. Berikut adalah atribut yang dimiliki anotasi @WebFilter:

Atribut Keterangan
1 filterName Filter nama unik (seperti di web.xml)
2 displayName Nama filter yang dapat dibaca manusia
3 description Deskripsi Filter
4 value / urlPatterns Menetapkan daftar url untuk dipetakan
5 dispatcherTypes Menentukan daftar DispatcherTypes
6 servletNames Menentukan daftar servlet yang akan diterapkan
7 initParams Memungkinkan Anda menyetel parameter awal filter
8 asyncSupported Menentukan bahwa filter dapat berjalan secara asinkron (HTTP/2)
9 smallIcon Menetapkan ikon filter kecil
10 largeIcon Menetapkan ikon filter besar

Contoh filter yang mencegat semua permintaan ke servlet tertentu :

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

Contoh filter yang diberikan beberapa parameter :

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

Contoh jenis filter yang diberikan untuk RequestDispatcher :

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

Anda akan mempelajari lebih lanjut tentang tujuan filter dan servlet dalam kuliah berikut.