Bài giảng Lập trình Java nâng cao - Bài 3: MVC - Nguyễn Hữu Thể

pdf 23 trang Gia Huy 17/05/2022 3130
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình Java nâng cao - Bài 3: MVC - Nguyễn Hữu Thể", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_lap_trinh_java_nang_cao_bai_3_mvc_nguyen_huu_the.pdf

Nội dung text: Bài giảng Lập trình Java nâng cao - Bài 3: MVC - Nguyễn Hữu Thể

  1. LẬP TRÌNH JAVA NÂNG CAO Nguyễn Hữu Thể Bài 3: MVC 1
  2. Nội dung ▪ Mô hình lập trình truyền thống (Mô hình 1) ▪ Mô hình MVC (Mô hình 2) ▪ Ứng dụng MVC minh họa 2
  3. Mô hình 1 (Model 1) − Khi thiết kế trang JSP, PHP hay ASP, người lập trình thường đan xen các mã html cùng với các mã JSP, PHP, hay ASP. − Do vậy, có những khó khăn sau có thể gặp phải: ▪ Người thiết kế giao diện cũng cần phải biết ngôn ngữ lập trình. ▪ Việc bảo trì chúng thường rất khó khăn, vì một phần các mã chương trình lẫn lộn với mã html. ▪ Khi có lỗi xảy ra, tìm và định vị lỗi cũng khó khăn. 3
  4. Model 1 - Ví dụ − Minh họa kỹ thuật chuyển dữ liệu sang trang trong JSP. Kiểm tra thông tin đăng nhập, với dữ liệu kiểm tra (username = “cnttk3” và password = “cnttk3”) − JSP xử lý dữ liệu theo Model 1 (2 layer) − Class Data.java: chứa phương thức kiểm tra đăng nhập checkLogin(,) − File JSP: ▪ Login.jsp: giao diện đăng nhập ▪ Process-login.jsp: trang xử lý kết quả đăng nhập, gọi phương thức checkLogin(,) ở class Data, nhận kết quả trả về 4
  5. Model 1 - Ví dụ: Mã nguồn − Data.java: chứa trong package org.dhcl.basic package org.dhcl.basic; public class Data { //Hàm kiểm tra user và pass là chữ cnttk3 public static boolean checkLogin(String user, String pass){ if(user.equals("cnttk3") && pass.equals("cnttk3")) return true; else return false; } } 5
  6. Model 1 - Ví dụ: Mã nguồn − Login.jsp Username: Password: 6
  7. login.jsp Username: Password: process-login.jsp 7
  8. Mô hình MVC (Model 2) − Mô hình 2 hay mô hình MVC (Model-View-Controller) − Tương ứng với một trang JSP, tách thành 3 thành phần: ▪ Model-View-Controller. − Các thành phần trên làm việc như sau: ▪ Model: là các lớp Java có nhiệm vụ: • Nhận các yêu cầu từ Controller hoặc View • Thi hành các yêu cầu (tính toán, truy vấn database, ) • Trả về các kết quả yêu cầu cho Controller hoặc View. ▪ View: JSP hiển thị form nhập, các kết quả trả về từ Model. ▪ Controller: Đồng bộ hoá giữa Model và View. Tức là với một trang JSP này thì sẽ tương ứng với lớp Java nào để xử lý nó và ngược lại, kết quả sẽ trả về trang JSP nào. 9
  9. Mô hình MVC (Model 2) 10
  10. MVC - Ví dụ: − Ứng dụng quản lý dữ liệu của 1 table Users, bao gồm đăng nhập, quản lý dữ liệu: trình bày dữ liệu, thêm mới, xóa dữ liệu, sửa dữ liệu, xóa dữ liệu. − Tạo database: Ví dụ: K3MVC, tạo 1 table Users như sau: create database K3MVC; CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; use K3MVC; create table Users( userid int AUTO_INCREMENT not null primary key, username varchar(30) not null, password varchar(30) not null ); insert into Users (username, password) values ('admin','123456'), ('user1','123456'), ('user2','123456'); 11
  11. Cấu trúc Project 12
  12. Thiết lập file cấu hình kết nối CSDL db.properties driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/k3mvc user=root password= Hệ quản trị CSDL MySQL: • Tên database: “k3mvc”, • Username: “root”, • Password: rỗng 13
  13. package org.dhcl.util; import java.io.*; DbUtil.java: class thư viện kết nối CSDL import java.sql.*; import java.util.Properties; public class DbUtil { private static Connection connection = null; public static Connection getConnection() { //Dùng kết nối đến Database, chuỗi kết nối lưu trong file db.properties if (connection != null) return connection; else{ try{ Properties pro = new Properties(); InputStream inputStream = DbUtil.class.getClassLoader().getResourceAsStream("/db.properties"); pro.load(inputStream); String driver = pro.getProperty("driver"); String url = pro.getProperty("url"); String user = pro.getProperty("user"); String password = pro.getProperty("password"); Class.forName(driver); connection = DriverManager.getConnection(url, user, password); }catch(ClassNotFoundException e) { e.printStackTrace(); }catch(SQLException e) { e.printStackTrace(); }catch(FileNotFoundException e) { e.printStackTrace(); }catch(IOException e) { e.printStackTrace(); } return connection; 14 } }
  14. DbUtil.java //Cách kết nối CSDL thứ 2 (Chọn 1 trong 2 cách kết nối) public static Connection getConnection2() { if (connection != null) return connection; else { try { Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection( "jdbc:mysql://localhost:3306/k3mvc", "root", ""); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return connection; } } 15
  15. User.java: Lớp User package org.dhcl.model; public String getPassword() { public class User { return password; private int userid; } private String username; private String password; public void setPassword(String password) { this.password = password; public int getUserid() { } return userid; } // Constructor có đầy đủ tham số, để khởi tạo dữ liệu cho class public void setUserid(int userid) { public User(int userid, String username, String this.userid = userid; password) { } this.userid = userid; this.username = username; public String getUsername() { this.password = password; return username; } } public User() {// Constructor không tham số public void setUsername(String this.userid = 0; username) { this.username = ""; this.username = username; this.password = ""; } } } 16
  16. UserDao.java public class UserDao { Connection connection = null; public UserDao(){ connection = DbUtil.getConnection(); //Mỗi lần khởi tạo biến đối tượng thuộc class UserDao thì khởi tạo luôn kết nối đến database } public boolean checkLogin(String user, String pass){ try { Statement st = connection.createStatement(); String sql = "select * from Users where username = '"+user+ "' and password = '" + pass + "'"; ResultSet rs = st.executeQuery(sql); if(rs.next()) return true; else return false; } catch (SQLException e) { //Không thể kết nối e.printStackTrace(); return false; } } 17 }
  17. LoginController public class LoginController extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Nhận dữ liệu chuyển đến từ trang login.jsp String username = request.getParameter("username"); String password = request.getParameter("password"); RequestDispatcher view = null; //Kiểm tra user và pass, gọi hàm kiểm tra đăng nhập ở Authenticate.java UserDao u = new UserDao(); if(u.checkLogin(username, password)){ //Gọi success.jsp nếu user và pass đúng view = request.getRequestDispatcher("success.jsp"); User user = new User(); user.setUsername(username); user.setPassword(username); request.setAttribute("user_request", user);//Khởi tạo 1 biến //user_request để lưu trữ thông tin user đăng nhập thành công //cho đối tượng request quản lý, giúp triệu gọi thông tin //đăng nhập ở những trang sau. 18 }
  18. LoginController else //Gọi error.jsp nếu user và pass sai view = request.getRequestDispatcher("error.jsp"); //Gọi chuyển trang đến success.jsp hoặc error.jsp view.forward(request, response); } } } 19
  19. login.jsp Username: Password: 20
  20. success.jsp Đăng nhập thành công error.jsp Thất bại 21
  21. Giao diện thực thi ứng dụng − Giao diện trang login.jsp − Thông báo thành công (gọi trang success.jsp bên trong UserController) 22
  22. − Tiếp tục thực hiện các xử lý cho Users ▪ Quản lý dữ liệu ▪ Thêm ▪ Sửa dữ liệu ▪ Xóa dữ liệu ▪ 23