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 @WebServletmaraming 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 valueat urlPatternsmga 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 asyncSupporteday 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.