Thảo luận Java Servlets
Hi xin chào tất cả các bạn.
Hôm này mình lập một topic liên quan về java web. Và trong phần này mình sẽ chỉ tập trung vào vấn đề cơ bản nhất của java web, mà hầu ai cũng đã biết không ít thì nhiều.
Tuy nói là vấn đề cơ bản nhưng rất dễ nhầm lẫn
Các vấn đề mình muốn thảo luận trong phần này:
- Servlets - Life Cycle
- Request và Response
Xin xem đoạn code sau (chỉ là phần khung sường):
@WebServlet(urlPatterns = { "/FirstServlet", "/FirstServlet.dnh" })
public class FirstServlet extends HttpServlet {
@Override
public void init() throws ServletException {
System.out.println("FirstServlet: init page");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("FirstServlet: process get Request");
//xử lý...
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("FirstServlet: process post Request");
//xử lý...
}
@Override
public void destroy() {
System.out.println("FirstServlet: destroy");
super.destroy();
}
}
Servlets - Life Cycle
Ở đây ta có 4 phương thức cơ bản:
-
Init: sẽ được gọi duy nhất một lần khi Servlets được tạo ra.
-> Servlets tạo ra khi nào? .Servlets tạo ra khi người dùng đầu tiên gửi Request đầu tiên ứng với Servlets đó tới server.
vd:
* Servlets xxx = chưa tạo.
* A là người dùng dầu tiên gửi Request lần đầu tới Server ứng với Servlets xxx -> Servlets xxx được tạo
* A gửi tiếp Request lần đầu tới Server ứng với Servlets xxx -> Servlets xxx không được tạo
* B là người đùng sau gửi Request tới Server ứng với Servlets xxx -> Servlets xxx không được tạo -
doGet or doPost: sẽ được gọi khi có Request gửi tới server
-
destroy: sẽ được gọi duy nhất một lần khi kết thúc Life Cycle
-> Vấn đề là khi nào kết thúc Life Cycle. Nói thật phần này mình chưa khẳng định nên không dám chém bừa. Tuy nhiên có 1 trường hợp kết thúc Life Cycle là khi stop server
Đây là hình mô tả Life Cycle của Servlets:
(Hình được sử dụng ở trang www.tutorialspoint.com)
Demo chạy thực nghiệm:
Lần đầu gửi request:
Log:
FirstServlet: init page
FirstServlet: process get Request
Lần gửi request sau có log:
FirstServlet: process get Request
Từ lần sau trở đi function init không còn được gọi lại
Thực hiện stop server có log:
FirstServlet: destroy
Lúc này đã kết thúc Life Cycle
Request và Response
-
Request: là thông tin gửi từ phía client lên server
* Một Request có rất nhiều thông tin hơn vẻ về ngoài của nó. vi du bạn gõ một đường link url tức là bạn đang gửi 1 request lên server. và các thông tin như:
* Request URL
* Request Method: GET, POST, PUT, DELETE, v.v
* Request Header: Encoding, data type v.v
* Thông tin Cookie
* Thông tin Session
* Thông tin connection.
* Data Form: Thông tin submit form v.v
* v.v Và còn rất nhiều thông tin khác -
Response: là thông tin server trả về cho client. và tất nhiên có rất nhiều thông tin Response trả về cho client"
- Response Status: vd status 200, 302, 400, v.v
- Response Header: Data type, Data context v.v
- Data: nội dung vd: page html, file resources v.v
- Và tất nhiên có rất nhiều thông tin khác
Đây là một hình minh họa cho 1 request get cực kỳ đơn giản bằng gõ link trực tiếp, Nhưng thông tin không ít chút nào