Servlet

Servlet là một lớp Java chạy trên máy chủ ứng dụng (Servlet Container như Tomcat), được sử dụng để:

  • Nhận và xử lý các yêu cầu HTTP từ client (trình duyệt).
  • Truy xuất hoặc xử lý dữ liệu (ví dụ: từ cơ sở dữ liệu).
  • Tạo ra phản hồi HTML hoặc các định dạng khác gửi về client.

Servlet được cấu hình qua web.xml hoặc dùng annotation @WebServlet.


🔎 Ví dụ xử lý GET trong Servlet

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.*;

public class HelloServlet extends HttpServlet {
  /**
   * Phương thức xử lý yêu cầu GET và trả về lời chào.
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
    // Lấy tham số "name" từ URL query string
    String name = request.getParameter("name");

    // Thiết lập kiểu nội dung phản hồi là HTML
    response.setContentType("text/html");

    // Lấy đối tượng PrintWriter để ghi dữ liệu phản hồi
    PrintWriter out = response.getWriter();
    out.println("<h1>Hello, " + name + "!</h1>");
  }
}

📎 Ví dụ URL:

http://localhost:9999/hello?name=Hiep

⚙️ Ví dụ xử lý POST trong Servlet

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.*;

public class LoginServlet extends HttpServlet {
  /**
   * Phương thức xử lý yêu cầu POST từ form đăng nhập.
   */
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
    // Lấy username và password từ form gửi lên
    String username = request.getParameter("username");
    String password = request.getParameter("password");

    // Kiểm tra thông tin đăng nhập
    if (authenticate(username, password)) {
      // Nếu đúng, tạo session và chuyển hướng đến trang welcome
      HttpSession session = request.getSession(); // tạo hoặc lấy session hiện tại
      session.setAttribute("user", username); // lưu tên người dùng vào session
      response.sendRedirect("welcome"); // chuyển hướng đến Servlet welcome
    } else {
      // Nếu sai, đặt thông báo lỗi vào request
      request.setAttribute("errorMessage", "Sai username hoặc password!");

      // Chuyển tiếp request về lại trang login.jsp để hiển thị thông báo
      RequestDispatcher dispatcher = request.getRequestDispatcher("login.jsp");
      dispatcher.forward(request, response);
    }
  }

  /**
   * Phương thức kiểm tra thông tin đăng nhập (giả lập).
   */
  private boolean authenticate(String username, String password) {
    // Kiểm tra username và password có trùng khớp không (mô phỏng kiểm tra với DB)
    return "admin".equals(username) && "123456".equals(password);
  }
}

📎 Mẫu form HTML gửi bằng POST:

<form action="login" method="post">
  <label>Username:</label> <input type="text" name="username"><br>
  <label>Password:</label> <input type="password" name="password"><br>
  <input type="submit" value="Log in">
</form>

<!-- Hiển thị thông báo lỗi nếu có -->
<p style="color:red;">
  ${errorMessage}
</p>