8.1 рд╕рд░реНрд╡рд▓реЗрдЯ рднрд╛рд╖реНрдпрд╛рдВрдЪрд╛ рдкрд░рд┐рдЪрдп

рдЖрд╡реГрддреНрддреА 7 рдкрд╛рд╕реВрди рдкреНрд░рд╛рд░рдВрдн рдХрд░реВрди, рдЯреЙрдордХреЕрдЯрдиреЗ рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯ API 3.0 рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯ рддрдкрд╢реАрд▓рд╛рд╕ рд╕рдорд░реНрдерди рджреЗрдгреНрдпрд╛рд╕ рд╕реБрд░реБрд╡рд╛рдд рдХреЗрд▓реА . рд╡рд┐рд╢реЗрд╖рддрдГ, рддреНрдпрд╛рдд рдПрдХ рдкреЕрдХреЗрдЬ рджрд┐рд╕рд▓реЗ рдЬреНрдпрд╛рдЪреЗ рдирд╛рд╡ рдЖрд╣реЗ javax.servlet.annotation. рдпрд╛рдордзреНрдпреЗ рд╡рд┐рд╡рд┐рдз рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рднрд╛рд╖реНрдпрд╛рдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЖрд╣реЗ рдЬреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯ рдХреНрд▓рд╛рд╕рд╡рд░ рднрд╛рд╖реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рддреБрдореНрд╣реА рднрд╛рд╖реНрдп рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реНрдпрд╛рд╕, рдЙрдкрдпреЛрдЬрди рд╡рд░реНрдгрдирдХрд░реНрддрд╛ (web.xml) рдЖрд╡рд╢реНрдпрдХ рдирд╛рд╣реА.

рд╕рд░реНрд╡рд╛рдд рдЙрдкрдпреБрдХреНрдд рднрд╛рд╖реНрдпрд╛рдВрдЪреА рдпрд╛рджреА:

рднрд╛рд╖реНрдп рд╡рд░реНрдгрди
рез @WebServlet рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ
2 @WebInitParam рдЗрдирд┐рд╢рд┐рдПрд▓рд╛рдпрдЭреЗрд╢рди рдкреЕрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ
3 @WebFilter рд╡реЗрдм рдлрд┐рд▓реНрдЯрд░ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ
4 @WebListener рд╡реЗрдм рд▓рд╛рдпрд╕реЗрдирд░ рдШреЛрд╖рд┐рдд рдХрд░рддреЛ
рел @ServletSecurity рддреБрдореНрд╣рд╛рд▓рд╛ рд╕реБрд░рдХреНрд╖рд╛ рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рдЪреА рдЕрдиреБрдорддреА рджреЗрддреЗ

рдЙрджрд╛рд╣рд░рдг:

@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!");
    }
}

рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯ рдШреЛрд╖рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рджреНрд╡рд╛рд░реЗ рджрд┐рд▓реЗрд▓реНрдпрд╛ URL рд╡рд░ рдпреЗрдгрд╛рд░реНтАНрдпрд╛ рд╕рд░реНрд╡ рд╡рд┐рдирдВрддреНрдпрд╛ рдкреВрд░реНрдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреЗ рдореЕрдк рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рднрд╛рд╖реНрдп рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗ /api/*.

8.2 рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯ рдореЕрдкрд┐рдВрдЧ рд╕реЗрдЯ рдХрд░рдгреЗ

рднрд╛рд╖реНрдпрд╛рдордзреНрдпреЗ @WebServletрдЕрдиреЗрдХ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдЖрд╣реЗрдд рдЬреЗ рддреЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯрдЪреНрдпрд╛ рдЕрддрд┐рд╢рдп рд▓рд╡рдЪрд┐рдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд▓рд╛ рдкрд░рд╡рд╛рдирдЧреА рджреЗрддрд╛рдд. рдЪрд▓рд╛ рдореБрдЦреНрдп рдЧреЛрд╖реНрдЯреАрдВрд╡рд░ рдПрдХ рдирдЬрд░ рдЯрд╛рдХреВрдпрд╛:

рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд░реНрдгрди
рез name рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯ рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рд╡ (web.xml рдкреНрд░рдорд╛рдгреЗ)
2 displayName рдорд╛рдирд╡реА рд╡рд╛рдЪрдиреАрдп рд╕рд░реНрд╡рд▓реЗрдЯ рдирд╛рд╡
3 description рд╕рд░реНрд╡рд▓реЗрдЯ рд╡рд░реНрдгрди
4 value рдореЕрдкрд┐рдВрдЧрд╕рд╛рдареА url рд╕реЗрдЯ рдХрд░рддреЗ
рел urlPatterns рдирдХрд╛рд╢рд╛рд╡рд░ url рдЪреА рд╕реВрдЪреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ (рдореВрд▓реНрдпрд╛рдРрд╡рдЬреА рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ)
6 initParams рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯрдЪреЗ рд╕реНрдЯрд╛рд░реНрдЯ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ
рен asyncSupported рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕рдкрдгреЗ рдЪрд╛рд▓реВ рд╢рдХрддреЗ рд╣реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ (HTTP/2)
8 loadOnStartup рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯ рдкреНрд░рд╛рд░рдВрдн рдкреНрд░рд╛рдзрд╛рдиреНрдп рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдиреБрдХреНрд░рдо рдХреНрд░рдорд╛рдВрдХ
реп smallIcon рдПрдХ рд▓рд╣рд╛рди рд╕рд░реНрд╡рд▓реЗрдЯ рдЪрд┐рдиреНрд╣ рд╕реЗрдЯ рдХрд░рддреЗ
10 largeIcon рдПрдХ рдореЛрдареЗ рд╕рд░реНрд╡рд▓реЗрдЯ рдЪрд┐рдиреНрд╣ рд╕реЗрдЯ рдХрд░рддреЗ

рдпреЗрдереЗ рдЕрдиреЗрдХ рдордиреЛрд░рдВрдЬрдХ рдореБрджреНрджреЗ рдЖрд╣реЗрдд.

рдкреНрд░рдердо, рддреЗ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ valueрдЖрдгрд┐ рддреЗ urlPatternsрдЕрджрд▓рд╛рдмрджрд▓ рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдЧреБрдгрдзрд░реНрдо рдЖрд╣реЗрдд. рддреЗ рджреЛрдиреНрд╣реА рддреБрдореНрд╣рд╛рд▓рд╛ URL рдЪреА рд╕реВрдЪреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддрд╛рдд рдЬреНрдпрд╛рд╡рд░ рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯрдиреЗ рдореЕрдк рдХреЗрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ.

asyncSupportedрджреБрд╕рд░реЗ рдореНрд╣рдгрдЬреЗ, рд╕рд░реНрд╡рд▓реЗрдЯ HTTP/2 рдкреНрд░реЛрдЯреЛрдХреЙрд▓рд╡рд░ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд┐рдирдВрддреНрдпрд╛рдВрд╡рд░ рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрд▓ рдХреА рдирд╛рд╣реА рд╣реЗ рдкреЕрд░рд╛рдореАрдЯрд░ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ.

рдЖрдгрд┐ рддрд┐рд╕рд░рд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪрд╛ рдЧреБрдгрдзрд░реНрдо рдЖрд╣реЗ initParams, рддреЛ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯрдордзреНрдпреЗ рдареЗрд╡рд▓реЗрд▓реНрдпрд╛ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдЪреА рд╕реВрдЪреА рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ.

рдЙрджрд╛рд╣рд░рдг:

@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 рдлрд┐рд▓реНрдЯрд░ рдореЕрдкрд┐рдВрдЧ рд╕реЗрдЯ рдХрд░рдгреЗ

рд╡рд░ рдирдореВрдж рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдлрд┐рд▓реНрдЯрд░ рд╣реЗ рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯреНрд╕рдЪреЗ рдпреБрдЯрд┐рд▓рд┐рдЯреА рдкреНрд░рдХрд╛рд░ рдЖрд╣реЗрдд рдЖрдгрд┐ рддреЗ рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯреНрд╕рд╕рд╛рд░рдЦреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗрд▓реЗ рдЖрд╣реЗрдд. рдпреЗрдереЗ рднрд╛рд╖реНрдпрд╛рдЪреЗ рдЧреБрдгрдзрд░реНрдо рдЖрд╣реЗрдд @WebFilter:

рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд░реНрдгрди
рез filterName рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рд╡ рдлрд┐рд▓реНрдЯрд░ рдХрд░рд╛ (web.xml рдкреНрд░рдорд╛рдгреЗ)
2 displayName рдорд╛рдирд╡реА рд╡рд╛рдЪрдиреАрдп рдлрд┐рд▓реНрдЯрд░рдЪреЗ рдирд╛рд╡
3 description рдлрд┐рд▓реНрдЯрд░ рд╡рд░реНрдгрди
4 value / urlPatterns рдирдХрд╛рд╢рд╛рд╡рд░ url рдЪреА рд╕реВрдЪреА рд╕реЗрдЯ рдХрд░рддреЗ
рел dispatcherTypes рдбрд┐рд╕реНрдкреЕрдЪрд░ рдкреНрд░рдХрд╛рд░рд╛рдВрдЪреА рд╕реВрдЪреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ
6 servletNames рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡рд▓реЗрдЯрдЪреА рд╕реВрдЪреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ
рен initParams рддреБрдореНрд╣рд╛рд▓рд╛ рдлрд┐рд▓реНрдЯрд░рдЪреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдЕрдиреБрдорддреА рджреЗрддреЗ
8 asyncSupported рдлрд┐рд▓реНрдЯрд░ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕рдкрдгреЗ рдЪрд╛рд▓реВ рд╢рдХрддреЗ рд╣реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ (HTTP/2)
реп smallIcon рдПрдХ рд▓рд╣рд╛рди рдлрд┐рд▓реНрдЯрд░ рдЪрд┐рдиреНрд╣ рд╕реЗрдЯ рдХрд░рддреЗ
10 largeIcon рдПрдХ рдореЛрдард╛ рдлрд┐рд▓реНрдЯрд░ рдЪрд┐рдиреНрд╣ рд╕реЗрдЯ рдХрд░рддреЗ

рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯреНрд╕рдЪреНрдпрд╛ рд╕рд░реНрд╡ рд╡рд┐рдирдВрддреНрдпрд╛ рд░реЛрдЦрдгрд╛рд▒реНрдпрд╛ рдлрд┐рд▓реНрдЯрд░рдЪреЗ рдЙрджрд╛рд╣рд░рдг :

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

рдЕрдиреЗрдХ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рджрд┐рд▓реЗрд▓реНрдпрд╛ рдлрд┐рд▓реНрдЯрд░рдЪреЗ рдЙрджрд╛рд╣рд░рдг :

@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 рд╕рд╛рдареА рджрд┐рд▓реЗрд▓реНрдпрд╛ рдлрд┐рд▓реНрдЯрд░рдЪреЗ рдЙрджрд╛рд╣рд░рдг :

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

рдлрд┐рд▓реНрдЯрд░реНрд╕ рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯреНрд╕рдЪреНрдпрд╛ рдЙрджреНрджреЗрд╢рд╛рдмрджреНрджрд▓ рддреБрдореНрд╣реА рдкреБрдвреАрд▓ рд▓реЗрдХреНрдЪрд░реНрд╕рдордзреНрдпреЗ рдЕрдзрд┐рдХ рдЬрд╛рдгреВрди рдШреНрдпрд╛рд▓.