8.1 Panimula sa servlet annotation
Simula sa bersyon 7, nagsimulang suportahan ng Tomcat ang Servlet API 3.0 web servlet specification . Sa partikular, lumitaw ang isang pakete sa tinatawag na javax.servlet.annotation
. Naglalaman ito ng iba't ibang uri ng mga anotasyon na maaaring magamit upang i-annotate ang isang klase ng servlet. Kung gagamit ka ng annotation, hindi kinakailangan ang deployment descriptor (web.xml).
Listahan ng mga pinakakapaki-pakinabang na anotasyon:
anotasyon | Paglalarawan | |
---|---|---|
1 | @WebServlet |
Nagdedeklara ng isang servlet |
2 | @WebInitParam |
Tumutukoy ng parameter ng pagsisimula |
3 | @WebFilter |
Nagdedeklara ng isang web filter |
4 | @WebListener |
Ipinapahayag ang web liser |
5 | @ServletSecurity |
Binibigyang-daan kang i-configure ang mga setting ng seguridad |
Halimbawa:
@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!");
}
}
Ang isang anotasyon ay sapat na upang magdeklara ng isang servlet at imapa ito upang maihatid ang lahat ng mga kahilingan na darating sa URL na ibinigay ng /api/*
.
8.2 Pag-set up ng servlet mapping
Ang anotasyon ay may @WebServlet
maraming mga parameter na nagbibigay-daan sa napaka-flexible na pagsasaayos ng servlet na inilalarawan nito. Tingnan natin ang mga pangunahing:
Katangian | Paglalarawan | |
---|---|---|
1 | name |
Natatanging pangalan ng Servlet (tulad ng sa web.xml) |
2 | displayName |
Nababasa ng tao ang pangalan ng servlet |
3 | description |
Paglalarawan ng Servlet |
4 | value |
Itinatakda ang url para sa pagmamapa |
5 | urlPatterns |
Tinutukoy ang isang listahan ng mga url na imamapa (ginamit sa halip na halaga) |
6 | initParams |
Binibigyang-daan kang itakda ang mga parameter ng pagsisimula ng servlet |
7 | asyncSupported |
Tinutukoy na ang servlet ay maaaring tumakbo nang asynchronously (HTTP/2) |
8 | loadOnStartup |
Sequence number para makontrol ang servlet start priority |
9 | smallIcon |
Nagtatakda ng maliit na icon ng servlet |
10 | largeIcon |
Nagtatakda ng malaking icon ng servlet |
Mayroong ilang mga kagiliw-giliw na mga punto dito.
Una, tandaan na value
at urlPatterns
mga mapagpapalit na katangian. Pareho silang nagpapahintulot sa iyo na tukuyin ang isang listahan ng mga URL kung saan dapat imapa ng servlet.
Pangalawa, ang parameter asyncSupported
ay nagpapahiwatig kung ang servlet ay tama na magpoproseso ng mga asynchronous na kahilingan sa HTTP/2 protocol.
At ang pangatlong mahalagang katangian ay initParams
, pinapayagan ka nitong magtakda ng listahan ng mga parameter na ilalagay sa ServletContext.
Halimbawa:
@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 Pag-set up ng filter mapping
Tulad ng nabanggit sa itaas, ang mga filter ay isang uri ng utility ng mga servlet, at sila ay na-configure tulad ng mga servlet. Narito ang mga katangian ng isang anotasyon @WebFilter
:
Katangian | Paglalarawan | |
---|---|---|
1 | filterName |
I-filter ang natatanging pangalan (tulad ng sa web.xml) |
2 | displayName |
Pangalan ng filter na nababasa ng tao |
3 | description |
Paglalarawan ng Filter |
4 | value / urlPatterns |
Nagtatakda ng listahan ng mga url na imamapa |
5 | dispatcherTypes |
Tinutukoy ang isang listahan ng mga DispatcherTypes |
6 | servletNames |
Tinutukoy ang isang listahan ng mga servlet na ilalapat sa |
7 | initParams |
Binibigyang-daan kang itakda ang panimulang mga parameter ng filter |
8 | asyncSupported |
Tinutukoy na ang filter ay maaaring tumakbo nang asynchronously (HTTP/2) |
9 | smallIcon |
Nagtatakda ng maliit na icon ng filter |
10 | largeIcon |
Nagtatakda ng malaking icon ng filter |
Isang halimbawa ng isang filter na humarang sa lahat ng mga kahilingan sa mga partikular na servlet :
@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Isang halimbawa ng isang filter na binigyan ng maraming 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...
}
Isang halimbawa ng isang filter na ibinigay na mga uri para sa RequestDispatcher :
@WebFilter(
urlPatterns = "/admin",
dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}
)
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Malalaman mo ang higit pa tungkol sa layunin ng mga filter at servlet sa mga sumusunod na lektura.