Tổng quan về Servlet - Servlet in Java Web Application

Discussion in 'Bài viết hướng dẫn JSP' started by tranhuyvc, 19/11/10.

  1. tranhuyvc

    tranhuyvc Administrator Staff Member

    Tổng quan về Servlet - Servlet in Java Web Application

    1. Giới thiệu chung về Servlet

    Ngoài JSP là công nghệ tạo trang web động bằng java chúng ta còn có Servlet. Nhưng khi viết bằng JSP thì code java và các tag html trộn lẫn với nhau, vì vậy khi chương trình mở rộng thì chúng ta rất khó quản lý các đoạn code này, hơn nữa code jsp để bị người khác đọc vì nó nhúm chung với html -> kém bão mật.
    Ngược lại khi viết bằng Servlet thì khác, mọi vấn đề trên sẽ được giải quyết một cách đễ dàng. Vậy Servlet là gì ?
    Mình xin thưa là : nó đơn giản chỉ là một lớp java (*.java) chúng ta phải biên dịch thành file class sau đó sẽ chạy bằng file class này, vì thế code sẽ được bão mật hơn so với cách trên.
    Để viết một Servlett chúng ta đơn giản chỉ cần kế thừa từ một trong hai lớp sau
    2. Tạo một Servlet trong Netbean
    Tạo một Project mới trong Netbean : Chọn File/ New Projecr -> Java Web/ Web Application
    Tạo Servlet: Chọn Project / New / Servlet
    3. Chu kì sống , các phương thức cơ bản trong Servlet
    Servlet có các phương thức cơ bản sau :
    Chu kì sống của Servlet

    Một Servlet khi khởi tạo thì nói sống mãi trong bộ nhớ của server. Luôn lắng nghe và chờ đợi khí người dùng yêu cầu đến nó thì sẽ sẵn dùng chứ không cần khởi tạo một lần nữa.. Servlet chỉ ngừng lại khi chúng ta Stop hay Restart lại server.
    Khi lần đầu tiên được triệu gọi thì phương thức init() sẽ được gọi một lần duy nhất, sau đó nó sẽ thực hiện một trong các phương thức doGet(), doPost() <để không cần phân biệt get hay post chúng ta chỉ cần code trong hàm processRequesst, nó sẽ được triệu gọi dù get hay post>… và các lần gọi sau chúng chỉ thực hiện các hàm này. Phương thức destroy() trái lại với hàm init() nó sẽ được triệu gọi trước khi server restart hay stop và giải phóng các tài nguyên đã cấp phát ở hàm init().
    Trong các phương thức :
    khi chúng ta override thì chúng sử dụng đối tượng HttpServletRequest và HttpServletResponse giống như trang JSP
    Lưu ý : khi có bất cứ sự thay đổi nào trong Servlet chúng ta phải restart lại tomcat thì mới thấy được ảnh hưởng của code đã thay đổi.
    Để có thể chạy Servlet thì chúng ta phải khai báo nó trong file web.xml trong thư mục WEB-INF như sau :
    Mặc định khi tạo Servlet trong Netbean, Netbean đã hỗ trợ chúng ta tự động đăng kí với web.xml nếu bạn chọn Yes thì mặc định file của bạn đã được đăng kí, ở đây mình muốn nói đến trường hợp chưa đăng kí hay sử dụng IDE khác không hỗ trợ tự động đăng kí
    4. In xuống client một trang HTMl đơn giản

    Chúng ta sẽ sử dụng hàm protected void processRequest để gõ code truyển xuống client
    Sử dụng đối tượng của hàm sau để ghi xuống client
    PrintWriter out = response.getWriter();
    Ví dụ :
    out.println("<html>");
    out.println("<head>");
    out.println("<title>Servlet demo1</title>");
    out.println("</head>");
    ……………………….
    Ví dụ đơn giản, các bạn gõ đoạn code sau vào hàm processRequest
    Khi build đoạn Servlet này bạn sẽ nhận được trên màn hình dòng chữ : Congdongjava.com Nơi khởi đầu của đam mê
    Chúc các bạn thành công !
    -------------------------------
    Bài viết của tranhuyvc – http://congdongjava.com
    Ghi gõ nguồn khi sao chép bài này.
  2. huynam990

    huynam990 New Member

    xin lỗi anh vì em post không đúng chỗ, tại vì em ko biết post câu hỏi này vào mục nào nữa.
    em đang phải vẽ biểu đồ cột trên web lấy dữ liệu từ DB ra. anh có project example cho em xem với. hoặc anh có kinh nghiệm thì support em 1 chút ạ!
    Cám ơn anh!
  3. hoithegiantinhlagi

    hoithegiantinhlagi Active Member

  4. rimocchino

    rimocchino Member

    Đọc phần giới thiệu về Servlet của admin tranhuyvc vẫn thấy chưa được rõ lắm

    ad có thể cho ví dụ để rõ hình dung hơn ko ? :)
    bình thường thì code *.java khi chạy thì đều dịch ra file class rồi mà ad

    Ví dụ như trong project kết hợp JSF + Spring, và trong web.xml có định nghĩa như sau :

    PHP:
        <servlet>
            <
    servlet-name>employee</servlet-name>
            <
    servlet-class>
                
    org.springframework.web.servlet.DispatcherServlet
            
    </servlet-class>
            <
    load-on-startup>1</load-on-startup>
        </
    servlet>
    Theo :
    Thì DispatcherServlet :

    => ad có thể giải thích rõ hơn về tác dụng của servlet, cụ thể hơn là DispatcherServlet như ở trên ko ?
  5. Joe

    Joe Moderator

    Hi Rimocchino,
    it seems to me that no one wants to answer your questions:( and because I've promised you long ago to spoonfeed you as you played the "How to read an EXCEPTION" game (http://congdongjava.com/forum/threads/how-to-read-an-exception.16623/) with me...Now I want to pay back my promise;)

    JavaServerPages (JSP) are JAVA sources using Client languages (e.g. html, css, JavaScripts) and run on a WEBSERVER machine (e.g. WebLogic, WebSphere, etc.). When a JSP is requested for the first time it'll be compiled as an extension of HttpServlet, sent to Client and is available during the lifetime of the running WebApp.

    Servlet is JAVA API that runs on the same WEBSERVER machine (with JSP). Its main purpose is to intercept Client request and issues a response accordingly. Different to JSP servlet has to be compiled before use. Meaning: When a servlet is invoked for the first time the server instantiates it and keeps it "alive" (or reuse) during the lifetime of the running WebApp.

    In short:
    JSP is java-embedded html
    PHP:
    <html><body>
    Hello RimocchinoToday is
    <%= new java.util.Date() %>.
    </
    body></html>
    You see here the embedded java code new java.util.Date(). And Servlet is html-embedded java.
    PHP:
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;

    public class 
    HelloRimocchion extends HttpServlet {
      public 
    void doGet(HttpServletRequest request,
                        
    HttpServletResponse responsethrows ServletExceptionIOException {
        
    response.setContentType("text/html");
        
    PrintWriter out response.getWriter();
        
    out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
                                            
    "Transitional//EN\">\n" +
                    
    "<HTML>\n" +
                    
    "<HEAD><TITLE>Hello Rimocchino</TITLE></HEAD>\n" +
                    
    "<BODY>\n" +
                    
    "<H1>Hello Rimocchino</H1>\n" +
                    
    "</BODY></HTML>");
      }
    }
    Here you see the html-embedded codes in out.println("<!DOCTYPE HTML PUBLIC.....")

    If you're smart and deftly enough you can generate some JSPs on the fly using Servlet. The most common use of this dynamic form is the so-called Web-Configurator (e.g. at Car dealer).

    You last question. DispatcherServlet. As its name said, DispatcherServlet intercepts ALL incoming requests (e.g. from Browser) and verify their URI and dispatches them to the correct handlers. Here is the link showing you how DispatcherServlet works http://www.tutorialspoint.com/spring/spring_web_mvc_framework.htm
    rimocchino likes this.
  6. vanhoa8989

    vanhoa8989 New Member

    Hi bạn tranhuyvc
    . Cái này chính là điểm yếu của jsp nên mình hoàn toàn đồng ý với bạn. Nhưng bạn nói
    mình hok đồng ý. Theo mình biết thì jsp chính là servlet. Jsp sẽ được biên dịch thành servlet thông qua jsp translator.
  7. chunhoang

    chunhoang New Member

    Ad co the giai thich them tai sao "hơn nữa code jsp để bị người khác đọc vì nó nhúm chung với html -> kém bão mật." ?
  8. JackV

    JackV Administrator Staff Member

    Đó là cách code không có cấu trúc thôi, nếu bạn làm đúng cấu trúc thì code xử lý (java) riêng, code temmplate hiện thị (html) riêng.
  9. Trần Phú

    Trần Phú New Member

    Java web là gì? Các bạn có thể tham khảo thêm bài viết tại đây nhé.Loạt bài hướng dẫn lập trình web có trong bài này luôn nha các bác.
  10. thehatredman

    thehatredman New Member

    Mình đào mộ chủ đề này 1 chút nhé. Mình thấy trong bài viết có nhắc tới thằng web.xml. Ad có thể giải thích cho mình thằng này dùng để làm gì không? Mình thấy rất nhiều cái khai báo trong này. Đọc nhiều tài liệu thì nó khai báo cả validate dữ liệu, khai báo session, ... rất nhiều thứ. Và dựa vào cơ chế như thế nào.

Chia sẻ trang này