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 @WebServlet
banyak 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 value
dan urlPatterns
merupakan atribut yang boleh ditukar ganti. Kedua-duanya membenarkan anda untuk menentukan senarai URL yang harus dipetakan oleh servlet.
Kedua, parameter asyncSupported
menunjukkan 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.
GO TO FULL VERSION