Thứ Tư, 16 tháng 7, 2014

Framework and Struts

Framework and Struts 2

I. Framwork

1.Tổng quan về Framework

- Framework ( khung làm việc) là một tập hợp các class, interface giúp chúng ta làm được ứng dụng một cách nhanh và dễ dàng.

-Một framework tốt nên cung cấp, hỗ trợ các hành vi chung, khái quái mà có thể được tận dụng qua nhiều loại ứng dụng, dự án khác nhau.

- Các class và interface trong java cũng được xem như là framwork, nhưng những class, interface này nó là các thư viện thực tế.

2. Vai trò của framework.

Có 4 vai trò chủ yếu của framework.

- Framework cho phép tạo và sử dụng các tên miền riêng.

- Cho phép ứng dụng có khả năng mở rộng dễ dàng.

- Cho phép tái sử dụng thiết kế.

- Cho phép chạy trực tiếp và tái sử dụng

3. Đặc điểm của một framework.

- Bao gồm các thành phần hoặc các lớp khác nhau, cái mà magn đến sự trìu tượng của một khái niệm cụ thể.

- Cung cấp một khuôn mẫu có tổ chức của một ứng dụng.

- Cung cấp định nghĩa những thành phần hoặc các lớp nào làm việc cùng nhau để cung ứng một giải pháp cho vấn đề.

- Các lớp và các thành phần có thể được sử dụng.

4. Ưu điểm và nhược điểm

a. Ưu điểm.

- Phát triển ứng dụng nhanh.

- Khả năng mở rộng tốt.

- khả năng tái sử dụng cao.


b. Nhược điểm

- Ứng dụng sẽ có dung lượng nặng do chứa các class cũng như các interface không dùng đến nhưng vẫn có trong ứng dụng

II. Struts.

1. Tổng quan về Struts framework?

- Struts là một framework mã nguồn mở dành cho ứng dụng web bằng ngôn ngữ java và được phát triển trên mẫu thiết kế MVC (mô hình MVC). Struts nó được phát triển để giải quyết rất nhiều các vấn đề liên quan đến các ứng dụng Web hướng business đòi hỏi hiệu năng cao sử dụng Java servlet và JSP.

2. Kiến trúc của Struts 2 Framework.



Hình 1.
Như đã nói ở phần tổng quan về Struts 2 framework thì ở hình 1 ta có sơ đồ kiến trúc của Struts framework.

Khi phía client gửi request đến thì Controller sẽ xác định request và gửi request đó đến một action được quy định sẵn để xử lý và điền dữ liệu vào model. Sau khi xử lý xong thì action sẽ chuyển đến View và trang View này sẽ kéo dữ liệu đã được điền vào model để trả về phía người dùng và hiển thị dữ liệu lên.

3. Ưu điểm và nhược điểm của Struts framework.

a. Ưu điểm

- Giúp tách những thứ có liên quan với nhau. Cụ thể là khi biết một mỗi một View sẽ được phụ trách bởi một Action, không lẫn lộn với nhau.

- Nới lỏng sự liên kết giữa các thành phần của website.

- Dễ dàng cho việc kiểm thử.

- Khi chúng ta đã tách hầu hết các thành phần trong website thì các thành phần sẽ phát triển một cách riêng biệt, điều này sẽ làm cho dễ dàng trong việc phát triển, mở rộng do tính module hoá.

- Có một cái rất hay trong struts 2 đó là việc chuẩn hoá các quy tắc viết vì thế chúng ta không phải động não để nghĩ ra cách viết, cách set, get đã được chuẩn hoá và chúng ta cứ thế sử dụng.

b. Nhược điểm
- Cần sử dụng khá thành thạo JSP và Servlet.

Thứ Ba, 15 tháng 7, 2014

Install Strut2 Plugin For Netbean

I. Strut Framework là gì?

Struts là một framework phục vụ việc phát triển các ứng dụng Web trên Java. Nó sử dụng mẫu thiết kế Model-View-Controller (MVC), Struts giải quyết rất nhiều các vấn đề liên quan đến các ứng dụng Web hướng business đòi hỏi hiệu năng cao sử dụng Java servlet và JSP. Struts cơ bản định hình lại cách các Web programmer nghĩ về và cấu trúc một ứng dụng Web.


II. Các bước để cài đặt Struts 2 Plugin:

Bước 1: Download struts 2.
Search


Download Strut 2

Sau khi download ta tiến hành giải nén và khởi chạy netbean sau đó vào Tools > Plugins


Tiếp đó ta chọn tab Downloaded.


Sau đó ta chọn Add Plugins rồi chọn đến thư mục và chọn tất cả những file có trong thư mục tải về.


Tiếp đó ta tiến hành cài đặt theo trình cài đặt của netbeans.

Thứ Hai, 14 tháng 7, 2014

JSP Model 2

Sau khi nhận ra sự bất cập của JSP Model 1 thì Sun Micro System đã cung cấp Model 2.
Model này gần giống với mô hình MVC.

Ở mô hình này thì các Servlet được đóng vai trò như các controller và có nhiệm vụ lấy và xử lý tất cả các thông tin về trình duyệt, trong quá trình xử lý nếu như cần xử dụng thông tin từ Java Bean thì nó sẽ khởi tạo đối tượng của Java Bean và sau đó dữ liệu đã được xử lý sẽ được truyền qua cho trang JSP để hiển thị. Lúc này thì trang JSP chỉ đóng vai trò là hiển thị thông tin mà các Servlet truyền sang qua forward.

Ở trong mô hình này thì phần model sẽ có nhiệm vụ lưu trữ thông tin hoặc chui xuống cơ sở dữ liệu để lấy về dữ liệu phục vụ cho việc xử lý.



Ưu điểm:
- Giúp cho việc tái sử dụng code trở nên dễ dàng hơn.
- Giúp cho dự án có khả năng mở rộng cao hơn
- Một dự án có thể thể được phát triển bởi nhiều đội, nhóm độc lập. Ví dụ như nhóm phát triên giao diện thì không cần quan tâm đến code Java, còn người làm coder thì không cần quan tâm đến việc phát triển giao diện.
- Do cấu trúc có thể tái sử dụng code nên sẽ nhẹ và chạy mượt hơn, tránh được việc chồng chéo, khai báo code nhiều lần.

- Nhược điểm:
- Chỉ phù hợp cho việc phát triển những ứng dụng lớn do cấu trúc phức tạp.

Demo

Đầu tiên các bạn tạo một project mới với tên Module1_MVC . Sau đó chèn thư viện sqljdbc4.jar (thư viện chứa driver kết nối cơ sở dữ liệu) và jstl 1.2.2.jar (là thư viện cho phép dùng foreach trang trang jsp).



Tiếp theo ta tạo 2 trang jsp là index.jsp và ViewAllProduct.jsp với trang index.jsp là trang chứa đường dẫn đến trang ViewAllProduct.jsp.

Bước tiếp theo ta tạo một lớp Java là Product đặt nó trong package awasj.entity. và viết các dòng mã sau vào trang này:


package awasj.entity;

/**
 *
 * @author Nguyen Minh An
 */
public class Product {
    private int pId;
    private String pName;
    private String pType;
    private String pPrice;

    public Product(int pId, String pName, String pType, String pPrice) {
        this.pId = pId;
        this.pName = pName;
        this.pType = pType;
        this.pPrice = pPrice;
    }

    public Product(String pName, String pType, String pPrice) {
        this.pName = pName;
        this.pType = pType;
        this.pPrice = pPrice;
    }

    
    public int getpId() {
        return pId;
    }

    public void setpId(int pId) {
        this.pId = pId;
    }

    public String getpName() {
        return pName;
    }

    public void setpName(String pName) {
        this.pName = pName;
    }

    public String getpType() {
        return pType;
    }

    public void setpType(String pType) {
        this.pType = pType;
    }

    public String getpPrice() {
        return pPrice;
    }

    public void setpPrice(String pPrice) {
        this.pPrice = pPrice;
    }
}

Tiếp đó ta tạo một lớp java tên là DataAccess và đặt nó trong package awasj.DBConnection. Ta viết vào đó như dưới đây:

package DBConnection;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Nguyen Minh An
 */
public class DataAccess {

    public static Connection getConnection() throws SQLException {
        String url = "jdbc:sqlserver://localhost:1433;databaseName=ORDER_PRODUCT";
        String username = "LUCKY";
        String password = "123456";

        try {
            Connection conn = null;
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            conn = DriverManager.getConnection(url, username, password);
            return conn;
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(DataAccess.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;

    }
}

Ta cần phải tạo một lớp chứa nghiệp vụ Bussiness, ta tạo một lớp với tên là ProductManagement và code như dưới đây:


public class ProductManagement {
    public static List<Product> getAllProduct() {
        List<Product> list = new ArrayList<>();
        try {
            Connection conn = DataAccess.getConnection();
            PreparedStatement ps = conn.prepareCall("select * from PRODUCT");
            ResultSet res = ps.executeQuery();
            while (res.next()) {
                int pId = res.getInt("pId");
                String pName = res.getString("pName");
                String pType = res.getString("pType");
                String pPrice = res.getString("pPrice");
                Product p = new Product(pId, pName, pType, pPrice);
                list.add(p);
            }
            return list;
        } catch (Exception ex) {
            Logger.getLogger(ProductManagement.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }


Và cuối cùng ta tạo một servlet với tên là ViewAllProduct (chính là tên servlet trong thẻ a nằm trong trang index.jsp). ở trang này ta sẽ lấy lên danh sách các sản phẩm và đưa chúng vào request sau đó gửi sang trang ViewAllProduct.jsp qua RequestDisparcher.

        List<Product> listpr = ProductManagement.getAllProduct();
        request.setAttribute("listproduct", listpr);

        RequestDispatcher rd = request.getRequestDispatcher("ViewAllProduct.jsp");
        rd.forward(request, response);



Và cuối cùng ở trang ViewAllProduct.jsp ta code như sau vào phần body của trang.

<h1>All Product</h1>

        <table>
            <tr>
                <td>pId</td>
                <td>Tên sản phẩm</td>
                <td>hãng sản phẩm</td>
                <td>Giá sản phẩm</td>
            </tr>
            <c:forEach items="${listproduct}" var="p">
                <tr>
                    <td><c:out value="${p.pId}" /></td>
                    <td><c:out value="${p.pName}"/></td>
                    <td><c:out value="${p.pType}"/></td>
                    <td><c:out value="${p.pPrice}"/></td>
                    <td><a href="AddOrder">Add Product</a></td>
                </tr>
            </c:forEach>
        </table>


Các bạn có thể download demo tại đây



JSP Model 1

Trong những phiên bản đầu tiên của JSP thì Sun Micro System có đưa ra 2 mô hình khuyến cáo.

Mô hình 1 : (Hay còn được gọi là mô hình truyền thống)

Trang JSP sẽ xử lý toàn bộ tất cả các công việc bao gồm nhận thông tin từ người dùng, Validate dữ liệu và phản hồi thông tin sau đó hiển thị kết quả phản hồi. Nếu như trang jsp cần tới dữ liệu thì nó sẽ được lấy thông qua những Java Beans.




Ưu điểm của mô hình này :
- Đơn giản về mặt kiến trúc.
- Dễ dàng trong việc phát triển những ứng dụng nhỏ, không phức tạp.

Nhược điểm:
- Khả năng mở rộng dự án thấp.
- Khả năng tái sử dụng code thấp.
- Không phù hợp khi phát triển trên những dự án lớn, phức tạp.

Module 1:

Tạo một database như hình dưới:


CREATE DATABASE ORDER_PRODUCT
GO
USE ORDER_PRODUCT
GO
CREATE TABLE PRODUCT(
pId int primary key identity,
pName nvarchar(200),
pType nvarchar(200),
pPrice varchar(100)
)
INSERT INTO PRODUCT VALUES ('Z10','SONY','20000')
INSERT INTO PRODUCT VALUES ('X3','NOKIA','30000')
INSERT INTO PRODUCT VALUES ('D8','APPLE','70000')
INSERT INTO PRODUCT VALUES ('Y10','SAMSUNG','50000')


Trong NetBeans ta tạo mới một project và tạo ra 2 trang jsp với tên là Order.jsp và index.jsp.

Tiếp theo tạo một lớp java thường với tên Product và đặt nó trong package awasj.entity sau đó ta viết vào như dưới.



package awajs.demo.data;

/**
 *
 * @author MinhAn
 */
public class Product {
    private int id;
    private String name;
    private String type;
    private int price;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public Product(int id, String name, String type, int price) {
        this.id = id;
        this.name = name;
        this.type = type;
        this.price = price;
    }
    public Product(){
    
    }
}

Tiếp theo ta tạo một lớp và đặt tên nó là ConnectionUtil đặt nó trong package awasj.dataaccess trong đây ta sẽ chứa kết nối và các phương thức cho việc truy cập dữ liệu.


package awajs.demo.conn;

import awajs.demo.data.Product;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Minhan
 */
public class ConnectionUtil {
    public static Connection conn;
    public ConnectionUtil(){
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            
            String url = "jdbc:sqlserver://localhost:1433;databaseName=ORDER_PRODUCT";
            String user = "sa";
            String pw = "123456";
            conn = DriverManager.getConnection(url, user, pw);
        } catch (Exception ex) {
            Logger.getLogger(ConnectionUtil.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    public List<Product> getAllProduct(){
        try {
            String sql = "select * from PRODUCT";
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            List<Product> listOfProduct = new LinkedList<Product>();
            while(rs.next()){
                listOfProduct.add(new Product(rs.getInt("pId"), rs.getString("mName"), rs.getString("pType"), rs.getInt("pPrice")));
            }
            return listOfProduct;
            
            
        } catch (Exception ex) {
            Logger.getLogger(ConnectionUtil.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
        
    }
    public Product getProductById(int id){
        try {
            String sql = "Select * from tblproduct where pId=?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1,id);
            ResultSet rs = ps.executeQuery();
            Product p = new Product();
            while(rs.next()){
                p.setId(rs.getInt("pId"));
                p.setName(rs.getString("pName"));
                p.setType(rs.getString("pType"));
                p.setPrice(rs.getInt("pPrice"));
            }
            return p;
            
        } catch (Exception ex) {
            Logger.getLogger(ConnectionUtil.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
}

Tiếp đó ta tạo một lớp với tên OrderBean và đặt nó trong Package awasj.bean . Ta viết các phương thức cũng như khai báo các biến như sau:


package awajs.demo.model;

import awajs.demo.data.Product;
import java.util.LinkedList;
import java.util.List;


public class OrderBean {

    private List<Product> listOfProduct = new LinkedList<Product>();

    public void setProduct(Product p) {
        listOfProduct.add(p);
    }

    public List<String> getProducts() {
        List<String> name = new LinkedList<String>();
        for (Product p : listOfProduct) {
            name.add(p.getName());
        }
        return name;
    }

    public int getTotalPrice() {
        int price = 0;
        int totalprice = 0;
        for (Product p : listOfProduct) {
            price = p.getPrice();
            if (price >= 40000) {
                price = price - price * 10 / 100;
            }
            totalprice = totalprice + price;
        }
        return totalprice;
    }
}

Kế tiếp ta tạo một lớp ProductBean và viết một phương thức ở trong lớp này như dưới:


package awajs.demo.model;

import awajs.demo.conn.ConnectionUtil;
import awajs.demo.data.Product;
import java.util.List;

/**
 *
 * @author Minhan
 */
public class productBean {
    public List<Product> getAllProduct(){
        ConnectionUtil cu = new ConnectionUtil();
        return cu.getAllProduct();    
    }
}

Ở trang Order.jsp ta viết vào như dưới:


<h1>Product List</h1>
       <%
           int id = Integer.parseInt(request.getParameter("id"));
           ConnectionUtil conn = new ConnectionUtil();
           Product p = conn.getProductById(id);
       %>
       <jsp:useBean class="awajs.demo.model.OrderBean" id="order" scope="session"/>
       <jsp:setProperty name="order" property="product" value="<%=p%>"/>
       <p>Your Products<jsp:getProperty name="order" property="products"></jsp:getProperty></p>
        <p>ToTal : <jsp:getProperty name="order" property="totalPrice"></jsp:getProperty> </p>
       <a href="index.jsp">Continue</a>

Và ở trang index.jsp.


<jsp:useBean class="awajs.demo.model.productBean" id="finder"/>
        <table>
            <tr>
                <th>ID</th>
                <th>Product Name</th>
                <th>Product Type</th>
                <th>Price</th>
                <th>Buy</th>
            </tr>
            <c:forEach items="${finder.allProduct}" var="product">
                <tr>
                    <td><c:out value="${product.id}"/></td>
                    <td><c:out value="${product.name}"/></td>
                    <td><c:out value="${product.type}"/></td>                   
                    <td><c:out value="${product.price}"/></td>                  
                    <td><a href="Order.jsp?id=${product.id}">Add</a></td>
                </tr>

            </c:forEach>
        </table>
Các bạn có thể tải bản DEMO ở đây

Buiding Web Application Using JDBC

I. Xây dựng ứng dụng web sử dụng JDBC.

Bước 1: Nếu trên máy chúng ta chưa có thư viện "sqljdbc4.jar"  thì chúng ta phải download để có cài đặt và sử dụng. Các bạn có thể download ở đây (lưu ý là chọn ngôn ngữ trước khi download)

Bước 2: Sau khi download xong, chúng ta sẽ tiến hành giải nén và được một file là "sqljdbc4.jar". và tiến hành add vào thư viện của project như dưới.

Phải chuột vào thư mục libraries và chọn Add JAR/Folder và chọn file sqljdbc4.jar đã tải về và giải nén vừa xong.



Bước 3: Mở SQL SERVER lên và tạo ra một cơ sở dữ liệu mới như dưới đây:

CREATE DATABASE USINGJDBC
GO
USE USINGJDBC
GO
CREATE TABLE PRODUCT(
pId int identity primary key,
pName nvarchar(200),
pDescribe nvarchar(300)
)
insert into PRODUCT values('Ipad','Sieu mong')
insert into PRODUCT values('Iphone','dep tuyet voi')
insert into PRODUCT values('Ipod','nghe nhac sieu hay')



Bước 4. Tạo một project mới.

Bước 5: Ta tạo ra một class với tên DataAccess và đặt nó trong package "wpjs.db", sau đó thêm vào những dòng code dưới đây.

        String url = "jdbc:sqlserver://localhost:1433;databaseName=tên database";
        String username = "tên username trong sql server";
        String password = "password trong sql server";
        
        try {
            Connection conn = null;
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            conn = DriverManager.getConnection(url, username, password);
            return conn;
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(DataAccess.class.getName()).log(Level.SEVERE, null, ex);
        }


        return null;

Ok. Vậy là xong phần khởi tạo kết nối đến cơ sở dữ liệu. Tiếp theo ta sẽ tạo một lớp Product và tạo ra các thuộc tính dưới đây và sau đó insert hàm khởi tạo và setter, getter cho nó.



package jsf.entity;

public class Product {
    private int pId;
    private String pName;
    private String pDescribe;

    public Product(int pId, String pName, String pDescribe) {
        this.pId = pId;
        this.pName = pName;
        this.pDescribe = pDescribe;
    }

    public Product(String pName, String pDescribe) {
        this.pName = pName;
        this.pDescribe = pDescribe;
    }

    public int getpId() {
        return pId;
    }

    public void setpId(int pId) {
        this.pId = pId;
    }

    public String getpName() {
        return pName;
    }

    public void setpName(String pName) {
        this.pName = pName;
    }

    public String getpDescribe() {
        return pDescribe;
    }

    public void setpDescribe(String pDescribe) {
        this.pDescribe = pDescribe;
    }    
    
}

Tiếp tục ta tạo một trang jsp với một form cho phép người dùng nhập vào key word để tiến hành tìm kiếm.


<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <form>
            <input type="text" name="keyword" />
            <input type="submit" />
            
        </form>
    </body>
</html>


Tiếp đó ta tạo một lớp java thường và viết phương thức cho việc tìm kiếm và trả về kết quả.

private List<Product> listpro = new ArrayList<Product>();

    public static List<Product> searchProduct(String keyword) {
        try {
            Connection conn = DataAccess.getConnection();
            PreparedStatement ps = conn.prepareCall("select * from Product where pName like '" + keyword + "'");
            ResultSet res = ps.executeQuery();
            List<Product> list = new ArrayList<>();
            while (res.next()) {                
                int id = res.getInt("pId");
                String pName = res.getString("pName");
                String pDescribe = res.getString("pDescribe");
                Product p = new Product(id, pName, pDescribe);
                list.add(p);
            }
            return list;
            
        } catch (SQLException ex) {
            Logger.getLogger(ProductManagement.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

Giờ ta chỉ gọi nó ra trong trang Servlet và hiển thị nó lên thôi.




Thứ Bảy, 12 tháng 7, 2014

MVC DESIGN PATTERN

I. Tại sao phải dùng đến mẫu thiết kế phần mềm và mô hình MVC

a. Tại sao phải dùng đến mẫu thiết kết phần mềm (Design Pattern)

* Vấn đề.

- Có khi nào bạn tưởng tượng rằng mã nguồn của một dự án lớn sẽ rối rắm như thế nào nếu như bạn đặt lớp, các phương thức, tên biến một cách cẩu thả và thiếu sự quy hoạch chưa? Đối với tôi điều đó thật sự là khủng khiếp khi mà dự án mình làm dở dang mà rất lâu sau đó mới tiếp tục phát triển. Tôi tin rằng nếu như vậy thì trí nhớ của bạn sẽ phải khóc than vì những dòng code loạn xạ, khai báo mọi nơi, thiếu đi sự quy hoạch.

* Giải quyết.

- Để giải quyết vấn đề này người ta phải cần đến mẫu thiết kế trong việc phát triển phần mềm quy mô lớn, khi đó các đoạn mã của bạn sẽ được sắp xếp, khai báo một cách có quy hoạch, điều này sẽ khiến cho việc tái sử dụng code trở nên dễ dàng hơn, việc dùng mẫu thiết kế sẽ giúp cả nhóm làm việc với khả năng ăn ý cao hơn, từ đó dẫn đến phát triển dự án nhanh hơn, chất lượng hơn (Vì dễ dàng tái sử dụng và mở rộng).

b. Mô hình MVC.

- MVC là một trong những mẫu thiết kế cực kì phổ biến. Nó là viết tắt của Model, View và Controller. Ta có thể hiểu rằng ứng dụng của chúng ta sẽ được chia làm 3 tầng và mỗi một tầng sẽ đóng những vai trò khác nhau. Cụ thể thì:

+ Model : Đây là thành phần chứa tất cả các nghiệp vụ logic, phương thức xử lý, truy xuất database, đối tượng mô tả dữ liệu như các Class (entity), hàm xử lý...

+ View:  Đảm nhận việc hiển thị thông tin, tương tác với người dùng, nơi chứa tất cả các đối tượng GUI như input, images, checkbox ...Hiểu một cách đơn giản thì, nó là tập hợp các form hoặc các file HTML.

+ Controller: Giữ nhiệm vụ nhận điều hướng các yêu cầu từ người dùng và gọi đúng những phương thức xử lý chúng... Chẳng hạn thành phần này sẽ nhận request từ url và form để thao tác trực tiếp với Model.

* Ưu điểm

- Dễ dàng tuỳ biến, tính tái sử dụng cao.
- Thể hiện tính chuyên nghiệp trong lập trình, phân tích thiết kế. Do được chia thành các thành phần độc lập nên giúp phát triển ứng dụng nhanh, đơn giản, dễ nâng cấp, bảo trì..

* Nhược điểm

Đối với dự án nhỏ việc áp dụng mô hình MC gây cồng kềnh, tốn thời gian trong quá trình phát triển. Tốn thời gian trung chuyển dữ liệu của các thành phần.


II. Cách thức hoạt động của mô hình MVC.



Người dùng gửi yêu cầu đến cho Controller khi muốn thay đổi View, Controller sẽ xác định yêu cầu và điều hướng tới cho model.

----- >>> Khi Modelnhận được request sẽ tiến hành xử lý sau đó kết quản của xử lý đươc gửi đến và hiển thị ở View.

Awajs Overview

I. Nội dung của môn.

- Mẫu thiết kế mô hình MVC (Mô hình MVC).

- Struts framework

- JSF framework

2 frameworks này sẽ giúp cho người lập trình viên phát triển giao diện nhanh chóng, và khá dễ dàng, bạn sẽ không cần phải tốn công như khi làm với JSP.

Tóm lại: Sau khi kết thúc cái môn này, làm xong Assignment chúng ta sẽ biết cách xây dựng một ứng dụng theo mô hình MVC sử dụng 2 frameworks là Struts và JSF.

II. Những việc phải làm trong môn này.

Giống như hầu hết các môn thì một thứ bắt buộc đó là chúng ta phải hoàn thành bài Assignment của môn. Về phần học tập thì chúng ta sẽ tiến hành học tập theo phương pháp học tập mới. Môn này sẽ được chia nhỏ thành các nội dung khác nhau kèm theo video hướng dẫn. Việc của sinh viên là phải làm theo hướng dẫn trong video và tiến hành delivery để chứng minh là mình đã học nội dung đó bằng những việc như viết blog, làm video (vlog) về những nội dung mình đã học được.