• Thứ Ba, 16/01/2007 13:57 (GMT+7)

    Viêt form đăng nhập bằng Servlet

    Câu hỏi :
    Tôi đang viết 1 form login dùng Servlet, kiểm tra username và password do người dùng nhập vào có tồn tại trong database quản lý không, rồi hiện ra thông báo đăng nhập thành công hay thất bại. Tuy nhiên chương trình chạy không như mong đợi và tôi không biết nó có truy xuất được CSDL hay không. Xin hướng dẫn.
     

    Trả lời :

    - Servlet Java là 1 trong những công nghệ lập trình web chạy ở phía server. Thường ta viết 1 Servlet Java để xử lý nghiệp vụ cho 1 form nhập liệu trong trang web nào đó. Trong trường hợp này Servlet cần ít nhất 2 tác vụ cơ bản là doGet() và doPost() để xử lý yêu cầu từ form gửi về theo method GET hay method POST (nên dùng method gửi thông tin POST cho an toàn). Đoạn code định nghĩa servlet dangnhap1 của bạn nhìn chung là đúng, nhưng vì nó còn các lỗi sau nên chưa chạy được đúng yêu cầu:
     - Chưa có 2 tác vụ doGet() và doPost().
     - Kiểm tra field "adminname" nhưng lại truy xuất file "username".
     Chúng tôi đã hiệu chỉnh các lỗi trên và kiểm tra lại thì Servlet đã chạy tốt. Cụ thể đoạn code miêu tả servlet TestPassServlet của chúng tôi như sau:
     package checkpassword;
     //nhập cảng các package và class cần dùng
     import javax.servlet.*;
     import javax.servlet.http.*;
     import java.util.*;
     import java.sql.*;
     import java.io.*;
     //định nghĩa Servlet theo yêu cầu
     public class TestPassServlet extends HttpServlet {
     //định nghĩa hàm constructor
     public TestPassServlet() {
     try {
     jbInit();
     } catch (Exception ex) {
     ex.printStackTrace();
     }
     }
     //định nghĩa hằng cần dùng
     private static final String CONTENT_TYPE = "text/html; charset=UTF-8";
     
     //định nghĩa tác vụ khởi động thuộc tính
     public void init(ServletConfig config) throws ServletException {
     super.init(config);
     try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); }
     catch(Exception e) { System.out.println("Error in conecting to Database:"+e); }
     }
     
     //định nghĩa tác vụ xử lý HTTP Get request
     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     HttpSession session=request.getSession(true);
     try {
     response.setContentType("text/html");
     PrintWriter out = response.getWriter();
     Connection cn=DriverManager.getConnection("jdbc:odbc:MyDatabase");
     Statement st=cn.createStatement();
     //xác định username do người dùng nhập
     String username="";
     if(request.getParameter("username")!=null)
     username=request.getParameter("username");
     //xác định password do người dùng nhập
     String password="";
     if(request.getParameter("password")!=null)
     password=request.getParameter("password");
     //xây dựng lệnh SQL kiểm tra
     String sql="Select * from Admin where username='"+ username +"' and password='" + password + "'";
     //Kiểm tra database
     ResultSet rs=st.executeQuery(sql);
     //Nếu không có record chứa thông tin phù hợp ==> báo lỗi
     if(!rs.next()) {
     out.println("");
     out.println("dang nhap chua hop le");
     out.println("");
     } else { //nếu hợp lệ, báo OK
     out.println("");
     out.println("Xin chuc mung, ban da dang nhap dung.");
     out.println("");
     }
     } catch(Exception e){ System.out.println(e); }
     }
     
     //định nghĩa tác vụ xử lý HTTP Post request
     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     //thực hiện y như tác vụ doGet()
     doGet(request, response);
     }
     
     //tác vụ dọn dẹp các tài nguyên của Servlet
     public void destroy() {
     }
     
     private void jbInit() throws Exception {
     }
     }
     - Dịch Servlet thành file khả thi *.class.
     - Tạo trang web giao diện chứa form nhập liệu, form này chứa 2 textbox với tên chính xác là username và password (để tương thích với Servlet xử lý), thuộc tính action của form sẽ được thiết lập để miêu tả file Servlet xử lý.
     - Chạy web browser, thử truy xuất trang web giao diện, nhập username và password để kiểm tra xem Servlet có thực hiện kiểm tra đúng với thông tin trong database không.
     Lưu ý đoạn code Java do chúng tôi viết ở trên truy xuất database thông qua tên DSN MyDatabase nên hoàn toàn độc lập với vị trí file database và công nghệ quản lý file database, tuy nhiên file database này cần có table tên là "Admin" chứa danh sách các thông tin người dùng, mỗi người dùng được chứa trong 1 record có ít nhất 2 field: username, password.
     

    Chuyên mục: Lập trình