8.1 Servlet annotatsiyalari bilan tanishuv
7-versiyadan boshlab Tomcat Servlet API 3.0 veb-servlet spetsifikatsiyasini qo'llab-quvvatlashni boshladi. Unda xususan javax.servlet.annotation
nomli paket paydo bo'ldi. Bu paket turli xil annotatsiyalarni o'z ichiga olgan bo'lib, ularni servlet klassini annotatsiyalash uchun ishlatish mumkin. Agar sen annotatsiya ishlatsang, unda deployment deskriptor (web.xml) kerak emas.
Eng foydali annotatsiyalar ro'yxati:
Annotatsiya | Ta'rif | |
---|---|---|
1 | @WebServlet |
Servlet e'lon qiladi |
2 | @WebInitParam |
Initsializatsiya parametrini ko'rsatadi |
3 | @WebFilter |
Veb-filtr e'lon qiladi |
4 | @WebListener |
Veb-listener e'lon qiladi |
5 | @ServletSecurity |
Xavfsizlik parametrlarini sozlash imkonini beradi |
Misol:
@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("Салом Дунё!");
}
}
Bitta annotatsiya yetarli, servletni e'lon qilish va uni /api/*
namunasida belgilangan URL'ga keladigan barcha so'rovlarni xizmat qilish uchun mapping' qilish uchun.
8.2 Servlet mapping'ini sozlash
@WebServlet
annotatsiyasida ko'plab parametrlar mavjud bo'lib, ular servletni juda moslashuvchan tarzda sozlash imkonini beradi. Asosiylari bilan tanishamiz:
Atribut | Ta'rif | |
---|---|---|
1 | name |
Servletning noyob nomi (web.xml'dagi kabi) |
2 | displayName |
Odam uchun ko'rgazmali nom |
3 | description |
Servlet ta'rifi |
4 | value |
Mapping uchun URL'ni belgilaydi |
5 | urlPatterns |
Mapping uchun URL'lar ro'yxatini belgilaydi (value o'rniga ishlatiladi) |
6 | initParams |
Servletning boshlang'ich parametrlarini belgilash imkonini beradi |
7 | asyncSupported |
Servletning asinxron ishlash qobiliyatiga ega ekanligini ko'rsatadi (HTTP/2) |
8 | loadOnStartup |
Servletlarning ishga tushish tartibini boshqarish uchun raqamli indeks |
9 | smallIcon |
Servletning kichik ikonkasini belgilaydi |
10 | largeIcon |
Servletning katta ikonkasini belgilaydi |
Bu yerda qiziqarli nuqtalar bir nechta.
Birinchidan, value
va urlPatterns
— o'zaro almashtiriladigan atributlardir. Ular ikkalasi ham servletni mapping qilinishi lozim bo'lgan URL'lar ro'yxatini belgilashga imkon beradi.
Ikkinchidan, asyncSupported
parametri servletning HTTP/2 protokolida asinxron so'rovlarni to'g'ri qayta ishlay olishini ko'rsatadi.
Va uchinchi muhim atribut — bu initParams
, u ServletContext'ga kiritiladigan parametrlar ro'yxatini belgilash imkonini beradi.
Misol:
@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 Filtr mapping'ini sozlash
Yuqorida aytilganidek, filtrlar — bu servletlarning xizmat turi bo'lib, ular servletlar kabi sozlanadi. @WebFilter
annotatsiyasida quyidagi atributlar mavjud:
Atribut | Ta'rif | |
---|---|---|
1 | filterName |
Filtrning noyob nomi (web.xml'dagi kabi) |
2 | displayName |
Filtrning odam uchun ko'rgazmali nomi |
3 | description |
Filtr ta'rifi |
4 | value / urlPatterns |
Mapping uchun URL'lar ro'yxatini belgilaydi |
5 | dispatcherTypes |
DispatcherType turlar ro'yxatini belgilaydi |
6 | servletNames |
Ulam ktamenda qo'llaniladigan servletlar ro'yxatini belgilaydi |
7 | initParams |
Filtrning boshlang'ich parametrlarini belgilash imkonini beradi |
8 | asyncSupported |
Filtrning asinxron ishlash qobiliyatiga ega ekanligini ko'rsatadi (HTTP/2) |
9 | smallIcon |
Filtrning kichik ikonkasini belgilaydi |
10 | largeIcon |
Filtrning katta ikonkasini belgilaydi |
Muayyan servletlarga oid barcha so'rovlarni ushlab qoladigan filtr misoli:
@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Bir nechta parametrlari bor filtrning bir misoli:
@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...
}
RequestDispatcher uchun turlar belgilanadigan filtrning misoli:
@WebFilter( urlPatterns = "/admin", dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD} )
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Filtrlar va servletlarning vazifalari haqida batafsil ma'lumotni keyingi ma'ruzalarda bilib olasan.
GO TO FULL VERSION