Thứ Tư, 7 tháng 9, 2011

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
Trích:
import javax.servlet.http.HttpServlet;
import javax.servlet.GenericServlet;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 :
Trích:
public void init(){}
protected void processRequest(HttpServletRequest request, HttpServletResponse response){}
public void destroy(){}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {}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 :
Trích:
protected void processRequest(HttpServletRequest request, HttpServletResponse response){}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {}
protected void doPost(HttpServletRequest request, HttpServletResponse response) 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 :
Trích:
<servlet>
<servlet-name>servlet_vua_tao</servlet-name>
<servlet-class> servlet_vua_tao </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> servlet_vua_tao </servlet-name>
<url-pattern>/ servlet_vua_tao </url-pattern>
</servlet-mapping> 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
Trích:
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {


out.println("<html>");
out.println("<head>");
out.println("<title>Chào mừng đến với congdongjava.com</title>"); 
out.println("</head>");
out.println("<body>");
out.println("<h1>Congdongjava.com Nơi khởi đầu của đam mê</h1>");
out.println("</body>");
out.println("</html>");


} finally { 
out.close();
} 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 !

0 nhận xét:

Đăng nhận xét