2.1 คลาส HttpServletRequest

งานส่วนใหญ่ที่เซิร์ฟเล็ตของคุณต้องทำตามข้อมูลที่ได้รับจากคำขอ วัตถุรับผิดชอบมันHttpServletRequestซึ่งคอนเทนเนอร์จะส่งไปยังเซิร์ฟเล็ตของคุณ (ไปยังเมธอดserviceหรือเมธอดdoGet()ฯลฯdoPost())

อ็อบเจกต์นี้มีเมธอดค่อนข้างน้อย เนื่องจากมันเพียงแค่เก็บข้อมูลคำขอ และคุณสามารถโต้ตอบกับคอนเทนเนอร์ผ่านมันได้

วิธีการแบ่งได้เป็น 2 กลุ่มใหญ่ๆ คือ

  • วิธีการที่เกี่ยวข้องกับการให้สิทธิ์ผู้ใช้
  • วิธีการทำงานกับข้อมูลคำขอ

ฉันจะให้วิธีการอนุญาตผู้ใช้ในรูปแบบของตาราง แต่เราจะไม่วิเคราะห์พวกเขา ความจริงก็คือพวกเขาไม่ค่อยใช้เพื่ออนุญาตผู้ใช้ เฟรมเวิร์กยอดนิยมทั้งหมดใช้แนวทางการอนุญาตขั้นสูงของตนเอง

ฉันควรจะแสดงรายการพวกเขา แต่อีกครั้ง ฉันไม่เห็นใครใช้พวกเขา

วิธี คำอธิบาย
1 authenticate(HttpServletResponse) ดำเนินการตรวจสอบการตอบสนอง
2 changeSessionId() บังคับให้เปลี่ยนรหัสเซสชัน
3 getAuthType() ส่งกลับประเภทการรับรองความถูกต้องที่ใช้: ASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH
4 getRemoteUser() ส่งคืนการเข้าสู่ระบบของผู้ใช้
5 getRequestedSessionId() ส่งกลับ SessionID ของไคลเอนต์
6 getSession() ส่งกลับวัตถุ HttpSession
7 getUserPrincipal() ส่งคืนวัตถุ java.security.Principal
8 login(username, password) ดำเนินการเข้าสู่ระบบของผู้ใช้
9 logout() ออกจากระบบเซสชันผู้ใช้

2.2 ขอข้อมูล

วิธีการกลุ่มที่สองนั้นน่าสนใจกว่ามาก เรามีข้อมูลประเภทใดบ้างในคำขอ

  • วิธีการ http
  • ยูอาร์ไอ
  • ตัวเลือก
  • ชื่อเรื่อง

มาดูกันว่ามีวิธีใดบ้างสำหรับการทำงานกับพวกเขา:

วิธี คำอธิบาย
1 getMethod() ส่งคืนเมธอด HTTP: GET, POST, DELETE, ...
2 getRequestURI() ส่งคืนคำขอ URI: http://codegym.cc/my/data
3 getRequestURL() ส่งคืน URL คำขอ: http://codegym.cc/my/data
4 getQueryString() ส่งคืน Query เช่น ทุกอย่างหลังจาก ?
5 getParameterMap() ส่งคืนรายการพารามิเตอร์การค้นหา
6 getParameter(String name) ส่งกลับค่าของพารามิเตอร์ตามชื่อ
7 getContentType() ส่งคืนเนื้อหาคำขอ MimeType
8 getReader() Reader เพื่ออ่านเนื้อหาคำขอเป็นข้อความ
9 getInputStream() InputStream เพื่ออ่านเนื้อหาคำขอเป็นไบต์ []
10 getSession() ส่งกลับวัตถุ HttpSession
สิบเอ็ด getCookies() ส่งกลับอาร์เรย์ของวัตถุ Cookie[]
12 getHeaderNames() ส่งกลับรายชื่อชื่อเรื่องเท่านั้น
13 getHeader(String name) ส่งกลับค่าส่วนหัวตามชื่อ
14 getServletPath() ส่งคืนส่วนของ URL ที่อ้างถึงเซิร์ฟเล็ต
15 getContextPath() ส่งกลับส่วนของ URI ที่ระบุเนื้อหาของคำขอ

และนั่นไม่ใช่วิธีการทั้งหมดด้วยซ้ำ...

แม้ว่าหลังจากที่เราได้ศึกษาโปรโตคอล HTTP และเรียนรู้วิธีทำงานกับ HttpClient แล้ว ทุกอย่างก็คุ้นเคยไม่มากก็น้อยใช่ไหม

ลองเขียนเซิร์ฟเล็ตที่สามารถส่งข้อความและสีได้ และมันจะส่งคืนหน้า HTML ที่มีข้อความนั้นเขียนด้วยสีที่ระบุ คุณชอบแนวคิดนี้อย่างไร

เริ่มต้นด้วยการเขียนเซิร์ฟเล็ตของเรา:

public class ColorTextServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
          //write your code here
    }
}

ตอนนี้เราต้องรับข้อความและสีที่ส่งจาก URI โดยผู้ใช้:

public class ColorTextServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {

        // Getting the parameter “text” and “color” from request
        String text= request.getParameter("text");
        String color = request.getParameter("color");

    }
}

และสุดท้าย คุณต้องแสดงผลข้อความเป็น HTML เราจะพูดถึงเรื่องนี้ในการบรรยายครั้งต่อไป แต่ในที่นี้ ผมจะให้คำแนะนำเล็กน้อย:

public class ColorTextServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {

        // Get the "text" and "color" parameters from the request
        String text = request.getParameter("text");
        String color = request.getParameter("color");


        // Print the HTML as a response to the browser
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out =  response.getWriter();
        try {
            out.println("<html>");
            out.println("<head> <title> ColorTextServlet </title> </head>");
            out.println("<body>");
            out.println("<h1 style="color:"+color+">"+text+"</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}