โค้ดยิม/หลักสูตรจาวา/โมดูล 3/การปรับแต่งเว็บแอปพลิเคชันด้วยคำอธิบายประกอบ

การปรับแต่งเว็บแอปพลิเคชันด้วยคำอธิบายประกอบ

ระดับ, บทเรียน
มีอยู่

8.1 ข้อมูลเบื้องต้นเกี่ยวกับหมายเหตุประกอบเซิร์ฟเล็ต

ตั้งแต่เวอร์ชัน 7 เป็นต้น มาTomcat เริ่มสนับสนุน ข้อกำหนดเว็บเซิร์ฟเล็ต Servlet API 3.0 โดยเฉพาะอย่างยิ่ง แพ็คเกจที่ปรากฏในนั้นเรียกว่าjavax.servlet.annotation. ประกอบด้วยคำอธิบายประกอบประเภทต่างๆ ที่สามารถใช้เพื่ออธิบายประกอบคลาสเซิร์ฟเล็ต หากคุณใช้คำอธิบายประกอบ ก็ไม่จำเป็นต้องใช้ตัวอธิบายการปรับใช้ (web.xml)

รายการคำอธิบายประกอบที่มีประโยชน์ที่สุด:

คำอธิบายประกอบ คำอธิบาย
1 @WebServlet ประกาศเซิร์ฟเล็ต
2 @WebInitParam ระบุพารามิเตอร์การเริ่มต้น
3 @WebFilter ประกาศตัวกรองเว็บ
4 @WebListener ประกาศผู้ฟังเว็บ
5 @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พารามิเตอร์มากมายที่อนุญาตให้ตั้งค่าคอนฟิกของเซิร์ฟเล็ตที่อธิบายได้อย่างยืดหยุ่นมาก ลองดูที่หลัก:

คุณลักษณะ คำอธิบาย
1 name ชื่อเฉพาะของ Servlet (ใน web.xml)
2 displayName ชื่อเซิร์ฟเล็ตที่มนุษย์อ่านได้
3 description คำอธิบายเซิร์ฟเล็ต
4 value ตั้งค่า URL สำหรับการแมป
5 urlPatterns ระบุรายการ URL ที่จะจับคู่ (ใช้แทนค่า)
6 initParams ให้คุณตั้งค่าพารามิเตอร์เริ่มต้นของเซิร์ฟเล็ต
7 asyncSupported ระบุว่าเซิร์ฟเล็ตสามารถทำงานแบบอะซิงโครนัส (HTTP/2)
8 loadOnStartup หมายเลขลำดับเพื่อควบคุมลำดับความสำคัญการเริ่มต้นของเซิร์ฟเล็ต
9 smallIcon ตั้งค่าไอคอนเซิร์ฟเล็ตขนาดเล็ก
10 largeIcon ตั้งค่าไอคอนเซิร์ฟเล็ตขนาดใหญ่

มีจุดที่น่าสนใจหลายประการที่นี่

ขั้นแรก โปรดทราบว่าvalueและurlPatternsเป็นแอตทริบิวต์ที่ใช้แทนกันได้ ทั้งคู่อนุญาตให้คุณระบุรายการ URL ที่เซิร์ฟเล็ตควรแม็พด้วย

ประการที่สอง พารามิเตอร์asyncSupportedระบุว่าเซิร์ฟเล็ตจะประมวลผลคำร้องขอแบบอะซิงโครนัสผ่านโปรโตคอล HTTP/2 ได้อย่างถูกต้องหรือไม่

และแอตทริบิวต์ที่สำคัญประการที่สามคือinitParamsช่วยให้คุณสามารถตั้งค่ารายการพารามิเตอร์ที่จะวางใน ServletContext

ตัวอย่าง:

@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:

คุณลักษณะ คำอธิบาย
1 filterName กรองชื่อเฉพาะ (ใน web.xml)
2 displayName ชื่อตัวกรองที่มนุษย์อ่านได้
3 description คำอธิบายตัวกรอง
4 value / urlPatterns กำหนดรายการ URL ที่จะแมป
5 dispatcherTypes ระบุรายการ DispatcherTypes
6 servletNames ระบุรายการของเซิร์ฟเล็ตที่จะใช้
7 initParams ให้คุณตั้งค่าพารามิเตอร์เริ่มต้นของตัวกรอง
8 asyncSupported ระบุว่าตัวกรองสามารถทำงานแบบอะซิงโครนัส (HTTP/2)
9 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...
}

คุณจะได้เรียนรู้เพิ่มเติมเกี่ยวกับวัตถุประสงค์ของตัวกรองและเซิร์ฟเล็ตในการบรรยายต่อไปนี้

ความคิดเห็น
  • เป็นที่นิยม
  • ใหม่
  • เก่า
คุณต้องลงชื่อเข้าใช้เพื่อแสดงความคิดเห็น
หน้านี้ยังไม่มีความคิดเห็นใด ๆ