8.1 Pengenalan kepada anotasi servlet

Bermula dengan versi 7, Tomcat mula menyokong spesifikasi servlet web Servlet API 3.0 . Khususnya, pakej muncul di dalamnya yang dipanggil javax.servlet.annotation. Ia mengandungi pelbagai jenis anotasi yang boleh digunakan untuk menganotasi kelas servlet. Jika anda menggunakan anotasi, maka deskriptor penempatan (web.xml) tidak diperlukan.

Senarai anotasi yang paling berguna:

anotasi Penerangan
1 @WebServlet Mengisytiharkan servlet
2 @WebInitParam Menentukan parameter permulaan
3 @WebFilter Mengisytiharkan penapis web
4 @WebListener Mengisytiharkan penyeri web
5 @ServletSecurity Membolehkan anda mengkonfigurasi tetapan keselamatan

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 sudah cukup untuk mengisytiharkan servlet dan memetakannya untuk menyampaikan semua permintaan yang akan datang ke URL yang diberikan oleh /api/*.

8.2 Menyediakan pemetaan servlet

Anotasi mempunyai @WebServletbanyak parameter yang membenarkan konfigurasi servlet yang sangat fleksibel yang diterangkannya. Mari kita lihat yang utama:

Atribut Penerangan
1 name Nama unik Servlet (seperti dalam web.xml)
2 displayName Nama servlet yang boleh dibaca manusia
3 description Penerangan Servlet
4 value Menetapkan url untuk pemetaan
5 urlPatterns Menentukan senarai url untuk dipetakan (digunakan bukannya nilai)
6 initParams Membolehkan anda menetapkan parameter permulaan servlet
7 asyncSupported Menentukan bahawa servlet boleh dijalankan secara tak segerak (HTTP/2)
8 loadOnStartup Nombor urutan untuk mengawal keutamaan permulaan servlet
9 smallIcon Menetapkan ikon servlet kecil
10 largeIcon Menetapkan ikon servlet yang besar

Terdapat beberapa perkara menarik di sini.

Pertama, ambil perhatian bahawa valuedan urlPatternsmerupakan atribut yang boleh ditukar ganti. Kedua-duanya membenarkan anda untuk menentukan senarai URL yang harus dipetakan oleh servlet.

Kedua, parameter asyncSupportedmenunjukkan sama ada servlet akan memproses permintaan tak segerak dengan betul melalui protokol HTTP/2.

Dan atribut penting ketiga ialah initParams, ia membolehkan anda menetapkan senarai parameter yang akan diletakkan dalam 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 Menyediakan pemetaan penapis

Seperti yang dinyatakan di atas, penapis ialah jenis utiliti servlet, dan ia dikonfigurasikan seperti servlet. Berikut ialah atribut yang ada pada anotasi @WebFilter:

Atribut Penerangan
1 filterName Tapis nama unik (seperti dalam web.xml)
2 displayName Nama penapis yang boleh dibaca manusia
3 description Penerangan Penapis
4 value / urlPatterns Menetapkan senarai url untuk dipetakan
5 dispatcherTypes Menentukan senarai DispatcherTypes
6 servletNames Menentukan senarai servlet untuk digunakan
7 initParams Membolehkan anda menetapkan parameter permulaan penapis
8 asyncSupported Menentukan bahawa penapis boleh dijalankan secara tak segerak (HTTP/2)
9 smallIcon Menetapkan ikon penapis kecil
10 largeIcon Menetapkan ikon penapis yang besar

Contoh penapis yang memintas semua permintaan kepada servlet tertentu :

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

Contoh penapis yang diberikan berbilang 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 penapis yang diberikan untuk RequestDispatcher :

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

Anda akan mengetahui lebih lanjut tentang tujuan penapis dan servlet dalam kuliah berikut.