Bài giảng Lập trình Java nâng cao - Bài 2: Servlet - Nguyễn Hữu Thể

pdf 14 trang Gia Huy 17/05/2022 2660
Bạn đang xem tài liệu "Bài giảng Lập trình Java nâng cao - Bài 2: Servlet - Nguyễn Hữu Thể", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_lap_trinh_java_nang_cao_bai_2_servlet_nguyen_huu_t.pdf

Nội dung text: Bài giảng Lập trình Java nâng cao - Bài 2: Servlet - Nguyễn Hữu Thể

  1. CÔNG NGHỆ JAVA Nguyễn Hữu Thể Bài 2: Servlet 1
  2. Nội dung ▪ Servlet init() ▪ web.xml ▪ Annotation ▪ Forward ▪ Redirect 2
  3. Interface Servlet Method Description initializes the servlet. It is the life cycle method of servlet and public void init(ServletConfig config) invoked by the web container only once. provides response for the incoming public void service(ServletRequest request. It is invoked at each request,ServletResponse response) request by the web container. is invoked only once and indicates public void destroy() that servlet is being destroyed. public ServletConfig getServletConfig() returns the object of ServletConfig. returns information about servlet public String getServletInfo() such as writer, copyright, version etc. 3
  4. package com.javatech.tutorial.servlet; VD: InitParamServlet.java public class InitParamServlet extends HttpServlet { private static final long serialVersionUID = 1L; + init(): Khởi tạo giá trị cho private String email; email public InitParamServlet() { } + doGet(): Khởi tạo giá trị cho @Override email2 public void init(ServletConfig config) throws ServletException { super.init(config); // Lấy giá trị của tham số khởi tạo. Cấu hình trong web.xml. this.email = config.getInitParameter("email1"); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Lấy giá trị của tham số khởi tạo theo một cách khác. String email2 = this.getServletConfig().getInitParameter("email2"); ServletOutputStream out = response.getOutputStream(); out.println(" "); out.println(" "); out.println(" Init Param "); out.println(" email1 = " + this.email + " "); out.println(" email2 = " + email2 + " "); out.println(" "); out.println(" "); } 4 }
  5. web.xml JavaTech_Servlet Thiết lập thông tin cấu hình initParamServlet com.javatech.tutorial.servlet.InitParamServlet email1 abc@example.com email2 def@example.com initParamServlet /initParam index.html index.jsp 5
  6. Sử dụng Annotation trong Servlet @WebServlet To declare a servlet. @WebInitParam To specify an initialization parameter. @WebFilter To declare a servlet filter. @WebListener To declare a WebListener 6
  7. @WebServlet: VD1 @WebServlet("/HelloServlet") public class HelloServlet extends HttpServlet { private static final long serialVersionUID = 1L; public HelloServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("Hello, Good afternoon!"); } } 7
  8. package com.javatech.tutorial.servlet; VD2: @WebServlet, @WebInitParam // Có thể cấu hình một hoặc nhiều URL pattern để truy cập vào Servlet này. @WebServlet(urlPatterns = { "/annotationExample", "/annExample" }, initParams = { @WebInitParam(name = "email1", value = "abc@example.com"), @WebInitParam(name = "email2", value = "xyz@example.com") }) public class AnnotationExampleServlet extends HttpServlet { private static final long serialVersionUID = 1L; private String email1; public AnnotationExampleServlet() { } @Override public void init(ServletConfig config) throws ServletException { super.init(config); this.email1 = config.getInitParameter("email1"); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String email2 = this.getServletConfig().getInitParameter("email2"); ServletOutputStream out = response.getOutputStream(); out.println(" "); out.println(" "); out.println(" Servlet with Annotation configuration "); out.println(" emailSupport1 = " + this.email1 + " "); out.println(" emailSupport2 = " + email2 + " "); out.println(" "); 8 out.println(" "); }
  9. } VD2: @WebServlet, @WebInitParam 9
  10. url-pattern − url-pattern = "/any/*" ▪ So khớp với các path phía sau từ /any/ ▪ Ví dụ: − url-pattern = / ▪ Một servlet mặc định, servlet này sẽ được sử dụng để xử lý các request có đường dẫn không khớp với bất kỳ một url-pattern nào của các Servlet khác. ▪ Ví dụ: đường dẫn không tồn tại sẽ gọi url-pattern này 10
  11. Lấy thông tin Servlet Request − Khi máy khách (trình duyệt) thực hiện yêu cầu GET, POST đối với Servlet, ➢Đối tượng HttpServletRequest giữ thông tin có giá trị về máy khách và chính yêu cầu đó. ❖Ví dụ: lấy dữ liệu khác nhau từ một đối tượng Yêu cầu Servlet, như tiêu đề, tham số, đường dẫn và session 11
  12. Forward (Chuyển tiếp) − Chuyển tiếp yêu cầu tới một trang khác (hoặc một servlet khác). − Địa chỉ trên trình duyệt của người dùng vẫn là đường dẫn của trang đầu tiên, nhưng nội dung của trang do trang được chuyển tiếp tới tạo ra. − Trang được chuyển tiếp tới bắt buộc phải là một trang (hoặc Servlet) nằm trong cùng ứng dụng web. forward(ServletRequest request, ServletResponse response) VD: RequestDispatcher rd = request.getRequestDispatcher("pathToResource"); rd.forward(request, response); 12
  13. Redirect (Chuyển hướng) − Chuyển yêu cầu này tới một trang khác và kết thúc nhiệm vụ của nó. − Trang được chuyển hướng tới có thể là trang trong ứng dụng, hoặc có thể là một trang bất kỳ. − Địa chỉ trên trình duyệt của người dùng lúc này sẽ hiển thị đường dẫn của trang khác. void sendRedirect(String url) 13
  14. Forward() và SendRediret() Forward() SendRediret() Chuyển hướng đến tài nguyên khác như Chuyển đến tài nguyên khác trong cùng tên miền khác hoặc các đường dẫn là các một máy chủ để tiếp tục xử lý. máy chủ khác nhau để xử lý. Nhìn bề ngoài chúng ta không thể thấy địa Trong thanh địa chỉ chúng tôi có thể thấy chỉ chuyển tiếp như vậy sẽ bảo mật hơn. địa chỉ chuyển hướng mới. SendRedirect lnó chuyển hướng chậm Sử dụng phương pháp chuyển hơn bởi vì một chuyến đi vòng thêm là cần tiếp forward() thì tốc độ chuyển tiếp đến thiết. Yêu cầu mới được tạo ra cho nên tốc trang xử lý là nhanh hơn. độ xử lý sẽ chậm hơn so với forward. Nhưng khi sử dụng sendRedirect nếu Khi sử dụng forward thì chúng ta có thể chúng ta muốn gửi dữ liệu đi thì phải lưu gửi dữ liệu sang một trang được chuyển trữ các dữ liệu trong phiên làm việc hoặc tiếp đến bằng cách sử đi cùng với URL. dụng request.setAttribute () 14