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