JSP 中的 MVC(架构)
什么是 MVC?
MVC 是一种将业务逻辑、表示和数据分离开的架构。在 MVC 中,
- M 代表模型 (Model)
- V 代表视图 (View)
- C 代表控制器 (Controller)。
MVC 是一种系统化的应用程序使用方式,流程从视图层开始,发出请求,在控制器层处理,然后发送到模型层插入数据并获取成功或失败的消息。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 时,您会看到包含电子邮件和密码以及提交按钮的表单。
一旦您在表单中输入电子邮件和密码,然后单击提交。
单击提交后,输出如下所示。
输出
当您在屏幕上输入电子邮件和密码并单击提交时,详细信息会保存在 TestBean 中,然后从 TestBean 中获取到下一个屏幕上以获取成功消息。
摘要
在本文中,我们了解了 MVC,即模型-视图-控制器架构。
JSP 扮演着数据表示和控制器角色。它是模型和视图之间的接口,而模型同时连接控制器和数据库。主要的业务逻辑存在于模型层。


