JSP 中的 MVC(Archi结构
⚡ 智能摘要
JSP 中的 MVC 将应用程序关注点分离为模型层、视图层和控制器层,其中 JSP 渲染视图,Servlet 充当控制器, JavaBeans 封装了模型,从而实现了简洁、可测试、可维护的 Web 应用程序。
什么是MVC?
MVC 代表模型-视图-控制器(Model-View-Controller)。它是一种软件设计模式,将应用程序分为三个相互关联的层:业务逻辑层、表示层和数据层。在 MVC 中:
- M 代表模型
- V 代表视图
- C 代表控制器
MVC 是一种系统化的应用程序构建方式,其流程从视图层开始。用户发起请求,请求在控制器层处理,然后发送到模型层以插入或获取数据。模型随后返回成功或失败的响应,视图层将该响应呈现给用户。MVC 架构图如下所示:

为什么要使用MVC ArchiJSP中的结构?
跳伞前ping 要了解 JSP 中的 MVC 架构是如何工作的,首先需要理解开发者为什么采用这种模式。将业务逻辑、数据库调用和 HTML 混合在单个 JSP 页面中,很快就会产生难以维护的意大利面条式代码。MVC 通过为每个关注点赋予单独的层来解决这个问题:
- Code 因为每个文件只负责一个功能,所以更容易阅读。
- 团队可以并行开发视图、控制器和模型,而不会发生冲突。
- 单元测试直接针对模型,不涉及 JSP 渲染。
- 互换ping 使用 JSP 视图来处理 JSON 响应或其他模板引擎非常简单。
JSP 中的 MVC 工作原理
在基于 JSP 的 MVC 应用程序中,每一层都映射到一个特定的层。 Java 技术方面,JSP 文件渲染视图,Servlet 充当控制器, JavaBean 封装了模型。以下各节将解释每一层的职责。
模型层
- 这是数据层,其中包含系统的业务逻辑。
- 它包含了应用程序的所有数据。
- 它还代表应用程序的状态。
- 它由 Java连接到 Bean 或 POJO 的 数据库.
- 控制器与模型通信以获取数据,并将其转发到视图层。
- 该模型连接到数据库并将数据持久化到数据库中。
查看图层
- 这是应用程序的表示层。
- 它由HTML、JSP、CSS和 Java脚本。
- 它通常显示应用程序的用户界面。
- 它显示从控制器获取的数据,而控制器又从模型层类获取数据。
- 视图层在应用程序的用户界面上呈现数据,但不包含业务逻辑。
控制器层
- 它充当视图 (View) 和模型 (Model) 之间的接口。
- 它会拦截所有来自视图层的请求。
- 它接收来自视图层的请求,处理这些请求,并对请求执行验证。
- 请求被转发到模型层进行数据处理。请求处理完毕后,模型层会将结果连同所需信息一起发送回控制器,然后视图层会将这些信息显示出来。
MVC的优点 Archi质地
MVC 的优点是:
- 易于维护
- 易于扩展
- 易于测试
- 导航控制集中
- 层间松耦合使重构更安全
- 多个团队成员可以并行开发。
使用 MVC 的 JSP 应用程序设计示例 Archi质地
在这个例子中,我们将展示如何在 JSP 应用程序中使用 MVC 架构。
- 我们以一个包含两个变量“email”和“password”的表单为例,这两个变量代表我们的视图层。
- 用户输入电子邮件和密码并点击提交后,该操作将传递给 Mvc_servlet,电子邮件和密码将传递给该 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>
代码说明:
视图层:
Code 第 10-15 行: 这里我们收到一个表单,它有两个参数字段:“email”和“password”。这个请求需要转发给控制器 Mvc_servlet.java,该控制器通过 action 属性传递。请求使用的 HTTP 方法为 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); } }
代码说明:
控制器层:
Code 线14: Mvc_servlet 继承自 HttpServlet。
Code 线26: 由于使用的方法为 POST,请求进入 Servlet 的 doPost 方法,该方法处理请求并将其保存到 bean 对象中,命名为 testobj。
Code 线34: 我们使用请求对象,设置属性“gurubean”,并将其值赋给 testobj。
Code 线35: 这里我们使用 RequestDispatcher 对象将成功消息转发到 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"; }
代码说明:
模型层:
Code 第 7-17 行: 它包含了电子邮件和密码的获取器和设置器,它们是 TestBean 类的成员。
Code 第 19-20 行: 它在 bean 类中定义了成员的电子邮件地址和密码(字符串类型)。
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>
代码说明:
Code 线12: 我们正在使用 Servlet 的 doPost 方法中设置的请求对象来检索属性。
Code 线13: 我们正在打印保存在 bean 对象中的欢迎信息和电子邮件地址。
输出
执行上述代码时,您将获得以下输出:
打开 mvc_example.jsp 后,你会看到一个包含电子邮件和密码字段以及“提交”按钮的表单。
在表单中输入电子邮件地址和密码,然后点击“提交”按钮后:
点击“提交”后,输出结果如下所示:
当您在屏幕上输入电子邮件地址和密码并点击“提交”后,这些信息将保存到 TestBean 中。下一个屏幕会从 TestBean 中获取这些信息,以显示成功消息。 JSP 它扮演着呈现数据和提供视图的角色,而Servlet则扮演着控制器的角色。 JavaBean 充当模型。主要业务逻辑包含在模型层中。



