2.1 Lớp HttpServletRequest

Hầu hết công việc mà servlet của bạn phải thực hiện dựa trên thông tin nhận được từ yêu cầu. Đối tượng chịu trách nhiệm về nó HttpServletRequest, mà bộ chứa sẽ chuyển đến servlet của bạn (đến phương thức servicehoặc các phương thức doGet(), doPost()v.v.)

Đối tượng này có khá nhiều phương thức, vì nó chỉ lưu trữ dữ liệu yêu cầu và thông qua nó, bạn có thể tương tác với vùng chứa.

Các phương pháp có thể được chia thành 2 nhóm lớn:

  • Các phương thức liên quan đến ủy quyền người dùng
  • Các phương thức làm việc với dữ liệu yêu cầu

Tôi sẽ cung cấp các phương thức ủy quyền cho người dùng dưới dạng bảng, nhưng chúng tôi sẽ không phân tích chúng. Thực tế là chúng rất hiếm khi được sử dụng để ủy quyền cho người dùng. Tất cả các khung phổ biến đều sử dụng các cách tiếp cận ủy quyền tiên tiến hơn nhiều của riêng chúng.

Tôi nên liệt kê chúng, nhưng một lần nữa, tôi chưa thấy ai sử dụng chúng.

Phương pháp Sự miêu tả
1 authenticate(HttpServletResponse) Thực hiện xác thực phản hồi
2 changeSessionId() Buộc thay đổi ID phiên
3 getAuthType() Trả về loại xác thực được sử dụng: ASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH
4 getRemoteUser() Trả về thông tin đăng nhập của người dùng
5 getRequestedSessionId() Trả về SessionID của máy khách
6 getSession() Trả về một đối tượng HttpSession
7 getUserPrincipal() Trả về một đối tượng java.security.Principal
số 8 login(username, password) Thực hiện đăng nhập người dùng
9 logout() Đăng xuất phiên người dùng

2.2 Yêu cầu dữ liệu

Nhóm phương pháp thứ hai thú vị hơn nhiều. Chúng tôi có loại dữ liệu nào trong yêu cầu?

  • phương thức http
  • URI
  • Tùy chọn
  • tiêu đề

Hãy xem những phương pháp nào có sẵn để làm việc với chúng:

Phương pháp Sự miêu tả
1 getMethod() Trả về phương thức HTTP: GET, POST, DELETE, ...
2 getRequestURI() Trả về URI yêu cầu: http://codegym.cc/my/data
3 getRequestURL() Trả về URL yêu cầu: http://codegym.cc/my/data
4 getQueryString() Trả về Truy vấn, tức là mọi thứ sau dấu ?
5 getParameterMap() Trả về danh sách các tham số truy vấn
6 getParameter(String name) Trả về giá trị của tham số theo tên của nó
7 getContentType() Trả về nội dung yêu cầu MimeType
số 8 getReader() Trình đọc để đọc nội dung yêu cầu dưới dạng văn bản
9 getInputStream() InputStream để đọc nội dung yêu cầu dưới dạng byte[]
10 getSession() Trả về một đối tượng HttpSession
mười một getCookies() Trả về một mảng các đối tượng Cookie[]
12 getHeaderNames() Trả về danh sách tiêu đề, chỉ tên
13 getHeader(String name) Trả về giá trị tiêu đề theo tên
14 getServletPath() Trả về một phần của URL đề cập đến servlet
15 getContextPath() Trả về một phần của URI chỉ định nội dung của yêu cầu

Và đó thậm chí không phải là tất cả các phương pháp ...

Mặc dù sau khi chúng ta đã nghiên cứu về giao thức HTTP và học cách làm việc với HttpClient, mọi thứ ở đây ít nhiều đã quen thuộc phải không?

Hãy viết một servlet có thể chuyển văn bản và màu sắc tới, và nó sẽ trả về một trang HTML với văn bản đó được viết bằng màu đã chỉ định. Làm thế nào để bạn thích ý tưởng?

Hãy bắt đầu bằng cách viết servlet của chúng ta:

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

Bây giờ chúng ta cần lấy văn bản và màu sắc được người dùng chuyển từ 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");

    }
}

Và cuối cùng, bạn cần xuất văn bản dưới dạng HTML. Chúng ta sẽ đề cập đến điều này trong bài giảng tiếp theo, nhưng ở đây tôi sẽ đưa ra một gợi ý nhỏ:

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();
        }
    }
}