JSP 中的 MVC(架构)

什么是 MVC?

MVC 是一种将业务逻辑、表示和数据分离开的架构。在 MVC 中,

  • M 代表模型 (Model)
  • V 代表视图 (View)
  • C 代表控制器 (Controller)。

MVC 是一种系统化的应用程序使用方式,流程从视图层开始,发出请求,在控制器层处理,然后发送到模型层插入数据并获取成功或失败的消息。MVC 架构图如下所示。

MVC Architecture
MVC 架构图

模型层

  • 这是数据层,包含系统的业务逻辑。
  • 它包含应用程序的所有数据。
  • 它还表示应用程序的状态。
  • 它包含与数据库有连接的类。
  • 控制器连接模型并获取数据,然后发送到视图层。
  • 模型也连接数据库,并将数据存储在其连接的数据库中。

视图层

  • 这是表示层。
  • 它包含 HTML、JSP 等。
  • 它通常表示应用程序的用户界面。
  • 它用于显示从控制器获取的数据,而控制器又从模型层类获取数据。
  • 此视图层在应用程序的用户界面上显示数据。

控制器层

  • 它充当视图和模型之间的接口。
  • 它拦截来自视图层的所有请求。
  • 它接收来自视图层的请求,处理请求,并对请求进行必要的验证。
  • 此请求会进一步发送到模型层进行数据处理,一旦请求被处理,它会将所需信息发送回控制器,并由视图相应地显示。

MVC 架构的优点

MVC 的优点是:

  • 易于维护
  • 易于扩展
  • 易于测试
  • 导航控制集中化

使用 MVC 架构的 JSP 应用程序示例

在此示例中,我们将展示如何在 JSP 中使用 MVC 架构。

  • 我们以一个包含两个变量“email”和“password”的表单为例,这构成了我们的视图层。
  • 一旦用户输入电子邮件和密码并单击提交,该操作将被传递到 mvc_servlet,其中传递了电子邮件和密码。
  • 此 mvc_servlet 是控制器层。在 mvc_servlet 中,请求被发送到充当模型层的 bean 对象。
  • 电子邮件和密码值被设置到 bean 中并存储以备将来使用。
  • 从 bean 中获取值并在视图层显示。

Mvc_example.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>MVC Guru Example</title>
</head>
<body>
<form action="Mvc_servlet" method="POST">
Email: <input type="text" name="email">
<br />
Password: <input type="text" name="password" />
<input type="submit" value="Submit" />
</form>
</body>
</html>

代码解释

视图层

代码第 10-15 行:在这里,我们使用了一个表单,它有两个字段作为参数“email”和“password”,此请求需要转发到控制器 Mvc_servlet.java,该控制器在 action 中传递。传递方法是 POST 方法。

Mvc_servlet.java

package demotest;

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;

/**
 * Servlet implementation class Mvc_servlet
 */
public class Mvc_servlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Mvc_servlet() {
        super();
        // TODO Auto-generated constructor stub
    }


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String email=request.getParameter("email");  
        String password=request.getParameter("password");
        
        TestBean testobj = new TestBean();
        testobj.setEmail(email);
        testobj.setPassword(password);
        request.setAttribute("gurubean",testobj);
        RequestDispatcher rd=request.getRequestDispatcher("mvc_success.jsp");  
        rd.forward(request, response); 
	}

}

代码解释

控制器层

代码第 14 行:mvc_servlet 继承自 HttpServlet。

代码第 26 行:由于使用的方法是 POST,因此请求进入 servlet 的 doPost 方法,该方法处理请求并将其保存到 bean 对象 testobj 中。

代码第 34 行:使用 request 对象,我们将属性设置为 gurubean,它被赋值为 testobj。

代码第 35 行:在这里,我们使用 request dispatcher 对象将成功消息传递到 mvc_success.jsp。

TestBean.java

package demotest;

import java.io.Serializable;

public class TestBean implements Serializable{
	
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	private String email="null";
	private String password="null";


}

代码解释

模型层

代码第 7-17 行:它包含 Test Bean 类成员 email 和 password 的 getter 和 setter。

代码第 19-20 行:它在 bean 类中将 string 类型的成员 email 和 password 定义为。

Mvc_success.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@page import="demotest.TestBean"%>
<!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>Guru Success</title>
</head>
<body>
<%  
TestBean testguru=(TestBean)request.getAttribute("gurubean");  
out.print("Welcome, "+testguru.getEmail());  
%>
</body>
</html>

代码解释

代码第 12 行:我们使用 request 对象获取属性,该属性已在 servlet 的 doPost 方法中设置。

代码第 13 行:我们正在打印欢迎消息和已保存在 bean 对象中的电子邮件 ID。

输出

当您执行上述代码时,您会得到以下输出

当您单击 mvc_example.jsp 时,您会看到包含电子邮件和密码以及提交按钮的表单。

一旦您在表单中输入电子邮件和密码,然后单击提交。

JSP Application Design

单击提交后,输出如下所示。

JSP Application Design

输出

当您在屏幕上输入电子邮件和密码并单击提交时,详细信息会保存在 TestBean 中,然后从 TestBean 中获取到下一个屏幕上以获取成功消息。

摘要

在本文中,我们了解了 MVC,即模型-视图-控制器架构。

JSP 扮演着数据表示和控制器角色。它是模型和视图之间的接口,而模型同时连接控制器和数据库。主要的业务逻辑存在于模型层。