Bài đăng nổi bật

Hướng dẫn thay đổi thư mục root mặc định của Docker trên Linux

Hoàn cảnh: người viết gặp một trường hợp như này Được team hạ tầng cấp cho một máy chủ gồm 2 phân vùng lưu trữ, 1 phân vùng 20GB được gắn và...

11 tháng 12, 2013

Một số tài nguyên đáng chú ý trên mạng (Update 12/12/2013)

Do dạo này có nhiều việc phải làm, nên để thuận tiện cho việc theo dõi cũng như cập nhật tài liệu (khi nào có điều kiện tôi sẽ viết thành bài riêng cho từng tài liệu), tôi liệt kê một số liên kết tham khảo để bạn đọc có thể tự tìm hiểu thêm.
Lưu ý các hạng mục được sắp xếp theo thứ tự nhóm công việc.
1 - Nhóm thư điện tử.

2 - Nhóm quản trị hệ thống Linux
3 - Nhóm NoSql:
  • Hướng dẫn cài đặt hadoop và hbase:
    •  Phần mềm:
    • Hướng dẫn cài đặt: Hướng dẫn cài đặt Hadoop - Hbase
    • Lưu ý: Hbase và Hadoop phải có sự tương thích về phiên bản, không hiểu sao vấn đề tương thích ngược của hai phần mềm này Apache làm rất kém.

03 tháng 12, 2013

Vòng đời của một servlet trong


1. Vòng đời một servlet trong java
Vòng đời một servlet được kiểm soát bởi container mà servlet được triển khai. Khi một request được gắn với một servlet, container sẽ thực hiện các bước sau:
a. Nếu một thể hiện (instance) của servlet không tồn tại, container sẽ:
  • Tải lớp servlet
  • Tạo một thể hiện của lớp servlet
  • Khởi tạo thể hiện của servlet bằng cách gọi hàm init.
b. Gọi hàm service, và chuyển tham số đầu vào là đối tượng request và response.

2. Nếu container muốn loại bỏ servlet, nó sẽ gọi hàm destroy.
Kiểm soát các sự kiện trong vòng đời của servlet.
Bạn có thể giám sát và thực hiện các công việc dựa vào việc lắng nghe các sự kiện trong vòng đời của servlet. Bảng dưới đây là danh sách các sự kiện có thể được giám sát và thực thi. Khi một sự kiện lắng nghe (Listener method) được gọi, nó sẽ phát sinh ra các tham số sự kiện bao gồm các thông tin tương ứng với từng sự kiện. Ví dụ với các hàm trong HttpSessionListener sẽ được chuyển tham số HttpSessionEvent, được bao hàm trong HttpSession.


Object

Event

Listener Interface and Event
Class

Web context (see Accessing the Web Context)

Initialization and destruction

javax.servlet.ServletContextListener and

ServletContextEvent

Attribute added, removed, or replaced

javax.servlet.ServletContextAttributeListener and

ServletContextAttributeEvent

Session
(See Maintaining Client State)

Creation, invalidation, activation, passivation, and timeout

javax.servlet.http.HttpSessionListener, javax.servlet.http.HttpSessionActivationListener, and

HttpSessionEvent

Attribute added, removed, or
replaced

javax.servlet.http.HttpSessionAttributeListener and

HttpSessionBindingEvent

Request

A servlet request has started being processed by web components

javax.servlet.ServletRequestListener and

ServletRequestEvent

Attribute
added, removed, or replaced

javax.servlet.ServletRequestAttributeListener and

ServletRequestAttributeEvent


Dưới đây là một ví dụ:
import database.BookDBAO;
import javax.servlet.*;
import util.Counter;

import javax.ejb.*;
import javax.persistence.*;

public final class ContextListener
    implements ServletContextListener {
    private ServletContext context = null;

    @PersistenceUnit
    EntityManagerFactory emf;

    public void contextInitialized(ServletContextEvent event) {
        context = event.getServletContext();
        try {
            BookDBAO bookDB = new BookDBAO(emf);
            context.setAttribute("bookDB", bookDB);
        } catch (Exception ex) {
            System.out.println(
                "Couldn’t create database: " + ex.getMessage());
        }
        Counter counter = new Counter();
        context.setAttribute("hitCounter", counter);
        counter = new Counter();
        context.setAttribute("orderCounter", counter);
    }

    public void contextDestroyed(ServletContextEvent event) {
        context = event.getServletContext();
        BookDBAO bookDB = context.getAttribute("bookDB");
        bookDB.remove();
        context.removeAttribute("bookDB");
        context.removeAttribute("hitCounter");
        context.removeAttribute("orderCounter");
    }
}
3. Định nghĩa lớp lắng nghe các sự kiện:
Có thể định nghĩa các lớp lắng nghe sự kiện thông qua listener của phần định nghĩa trong project.
Có thể dùng netbean để định nghĩa, theo các bước sau:
  • Mở ứng dụng.
  • Chọn WEB-INF
  • Bấm kép vào web.xml
  • Bấm tab General.
  • Mở phần Web Application Listener.
  • Chọn Add.
  • Trong cửa sổ Add, chỉ tới lớp đã định nghĩa
  • Chọn Ok
Kiểm soát lỗi của servlet
Bất cứ khi nào xảy ra lỗi trong servlet, hệ thống , container sẽ sinh ra một trang mặc định với nội dung: A Servlet Exception Has Occurred
Nhưng ta có thể định nghĩa lại nội dung trang trả về mặc định này. Xem thêm tại Mapping Errors to Error Screens