Tạo ứng dụng theo mô hình MVC với Java/Jsp/Servlet

Trong hướng dẫn này chúng ta sẽ học cách tạo một ứng dụng MVC đơn giản bằng cách sử dụng java servlets và jsp.

MVC là gì?

MVC tức là ModelViewController là một mô hình tách biệt các mối quan tâm hữu ích.

  • Model đại diện cho đối tượng POJO, kết nối  và tương tác với database để lấy dữ liệu.
  • View thể hiện đây là nơi người dùng có thể nhìn thấy được và dữ liệu được trình bày dưới dạng trực quan.Tại đây, View chỉ có nhiệm vụ hiển thị dữ liệu!
  • Controller  hay nói cách khác là bộ điều khiển là thành phần chịu trách nhiệm truyền thông giữa Model và View.

Tạo ứng dụng theo mô hình MVC với JavaJspServlet

Giải thích mô hình MVC

Với mô hình trên, khi có một người dùng truy cập vào ứng dụng web.Tất nhiên sẽ về phía server sẽ nhận một request từ phía client. Lúc này Client à user theo mô hình trên. Ví dụ khi các bạn truy cập vào blog itphutran và đang đọc bài viết này, thì sẽ gửi một yêu cầu đến server xử lý. Controller lúc này sẽ nhận yêu cầu từ client, có thể tương tác với database (Model) nếu có,xử lý thuật toán và nghiệp vụ. Trong trường hợp có tương tác với cơ sở dữ liệu thì model thực hiện tương tác với database lấy đúng dữ liệu yêu cầu và trả lại cho controller.Controller lúc này lấy dữ liệu đó trả về lại cho view.View lúc này có nhiệm vụ hiển thị dữ liệu và trình duyệt biên dịch.Lúc này các bạn có thể nhìn thấy bài viết này.

Tạo ứng dụng theo mô hình MVC

Chúng ta sẽ hiểu,cài đặt và làm phần này theo mô hình mvc trong java.Bằng cách tạo một ứng dụng đăng nhập mẫu sẽ hiển thị một thông báo tên người dùng chào mừng và nếu đăng nhập thất bại thì nó sẽ chuyển hướng đến trang báo lỗi. Đây là những gì chúng ta sẽ tạo ra.

  • Login.jsp: – sẽ nhập tên người dùng và mật khẩu
  • Success.jsp: – Nếu đăng nhập thành công, thì trang này sẽ được hiển thị
  • Error.jsp: – Nếu đăng nhập không thành công thì trang này sẽ được hiển thị.
  • LoginController.java: – Đây là phần điều khiển của ứng dụng liên lạc với mô hình
  • Authenticator.java: Có logic nghiệp vụ để xác thực
  • User.java: Lưu trữ tên người dùng và mật khẩu cho người dùng.

Yêu cầu:

  • IDE Eclipse
  • Máy chủ Apache tomcat
  • JSTL jar

Tạo một dự án Web bằng cách vào Dynamic web project click File -> New -> Dynamic Web Project.

Điền vào các chi tiết như tên dự án, máy chủ. Nhập tên dự án của bạn là “MVCDemo”. Bạn sẽ nhận được cấu trúc thư mục sau cho dự án.

 

Tạo success.jsp, error.jsp và login.jsp và LoginController servlet, Authenticator class, User class trong các packages. Đặt jstl.jar trong thư mục WEB-INF / lib.

 

Bây giờ chúng ta có cấu trúc của dự án, đặt mã này vào các file tương ứng.

LoginController 

package mvcdemo.controllers;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import mvcdemo.model.Authenticator;
import mvcdemo.model.User;

import sun.text.normalizer.ICUBinary.Authenticate;

public class LoginController extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public LoginController() {
		super();
	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		String username = request.getParameter("username");
		String password = request.getParameter("password");
		RequestDispatcher rd = null;

		Authenticator authenticator = new Authenticator();
		String result = authenticator.authenticate(username, password);
		if (result.equals("success")) {
			rd = request.getRequestDispatcher("/success.jsp");
			User user = new User(username, password);
			request.setAttribute("user", user);
		} else {
			rd = request.getRequestDispatcher("/error.jsp");
		}
		rd.forward(request, response);
	}

}

Authenticator.java

class responsible for authentication of userJava

package mvcdemo.model;
 
public class Authenticator {
 
	public String authenticate(String username, String password) {
		if (("itphutran".equalsIgnoreCase(username))
				&& ("password".equals(password))) {
			return "success";
		} else {
			return "failure";
		}
	}
}

User.java

package mvcdemo.model;
 
public class User {
 
	private String username;
	private String password;
 
	public User(String username, String password){
		this.username = username;
		this.password = password;
	}
 
	public String getUsername() {
		return username;
	}
 
	public void setUsername(String username) {
		this.username = username;
	}
 
	public String getPassword() {
		return password;
	}
 
	public void setPassword(String password) {
		this.password = password;
	}
 
}

 

error.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<form action="LoginController" method="post">
		Enter username : <input type="text" name="username"> <BR>
		Enter password : <input type="password" name="password"> <BR>
		<input type="submit" />
	</form>
</body>
</html>

success.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<title>Insert title here</title>
</head>
<body>
 
	Welcome ${requestScope['user'].username}. 
 
</body>
</html>

và file web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>MVCDemo</display-name>
   <servlet>
    <description></description>
    <display-name>LoginController</display-name>
    <servlet-name>LoginController</servlet-name>
    <servlet-class>mvcdemo.controllers.LoginController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LoginController</servlet-name>
    <url-pattern>/LoginController</url-pattern>
  </servlet-mapping>
</web-app>

Bây giờ hãy thử và chạy ứng dụng :

Start server tomcat của bạn và nhấn url : http://localhost:8080/MVCDemo/login.jsp.

Bạn sẽ có thể xem trang này :

 

Nhập tên người dùng là “itphutran” và mật khẩu là “password”. Bạn sẽ thấy thông báo “Welcome itphutran”.

Để bạn đọc dễ hiểu hơn, hãy nhìn vào sơ đồ thể hiện bên dưới  :

  1. Đầu tiên, người dùng truy cập vào trang login.jsp và điền vào dữ liệu và gửi biểu mẫu.
  2. LoginController  được gọi khi người dùng nhấn nút submit  và xử lý vì thuộc tính action của form = “LoginController”.
  3. Trong LoginController , kiểm tra valid từ người dùng và thiết lập thông tin của người dùng.
  4. rd.forward(request, response);  chuyển tiếp sang trang jsp.Tại trang success.jsp in thông tin username bằng cách sử dụng biểu thức Expression Language trong JSP Welcome ${requestScope[‘user’].username}.

 

 

Ưu và nhược điểm của mô hình mvc :

Lợi thế đáng chú ý của mẫu mvc là:

  • MVC làm cho ứng dụng trở nên trong sáng, giúp lập trình viên phân tách ứng dụng thành ba lớp một cách rõ ràng. Điều này sẽ rất giúp ích cho việc phát triển những ứng dụng xét về mặt lâu dài cho việc bảo trì và nâng cấp hệ thống.
  • MVC hiện đang là mô hình lập trình tiên tiến bậc nhất hiện nay, điều mà các framework vẫn đang nổ lực để hướng tới sự đơn giản và yếu tố lâu dài cho người sử dụng.

khuyết điểm mô hình mvc là:

  • Mặc dù, MVC tỏ ra lợi thế hơn nhiều so với cách lập trình thông thường. Nhưng MVC luôn phải nạp, load những thư viện đồ sộ để xử lý dữ liệu. Chính điều này làm cho mô hình trở nên chậm chạp hơn nhiều so với việc code tay thuần túy.
  • MVC đòi hỏi người tiếp cận phải biết qua OOP, có kinh nghiệm tương đối cho việc thiết lập và xây dựng một ứng dụng hoàn chỉnh. Sẽ rất khó khăn nếu OOP của người sử dụng còn yếu.
  • MVC tận dụng mảng là thành phần chính cho việc truy xuất dữ liệu. Nhất là với việc sử dụng active record để viết ứng dụng. Chúng luôn cần người viết phải nắm vứng mô hình mảng đa chiều.

Hy vọng điều này sẽ giúp bạn làm thế nào để tạo ra ứng dụng MVC bằng cách sử dụng java servlets và jsp.Nếu cảm thấy có ích, bạn có thể share để mọi người cùng học tập và tìm hiểu.

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest
0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận
x