JSP 中的 MVC(Archi结构

⚡ 智能摘要

JSP 中的 MVC 将应用程序关注点分离为模型层、视图层和控制器层,其中 JSP 渲染视图,Servlet 充当控制器, JavaBeans 封装了模型,从而实现了简洁、可测试、可维护的 Web 应用程序。

  • 🧱 关注点分离: 模型包含数据和业务逻辑,视图渲染用户界面,控制器在它们之间路由请求。
  • 📐 JSP角色: JSP 页面为视图层渲染动态标记,而 Servlet 则在控制器层处理请求。
  • 🔀 请求流程: 浏览器提交表单,Servlet 验证输入,并填充数据。 Java然后,Bean 将控制权转发给 JSP 视图以获取响应。
  • 可维护性胜出: JSP 中的 MVC 架构使 Web 应用程序更容易维护、扩展、单元测试和集中导航。
  • 🧪 工作示例: 登录表单提交到 Mvc_servlet,Mvc_servlet 将电子邮件和密码存储在 TestBean 中,然后转发到 mvc_success.jsp。
  • 🤖 人工智能现代化: AI 助手现在可以帮助将传统的 JSP MVC 代码重构为 Spring MVC,并按需生成控制器、DTO 和测试。

JSP 中的 MVC(Archi结构

什么是MVC?

MVC 代表模型-视图-控制器(Model-View-Controller)。它是一种软件设计模式,将应用程序分为三个相互关联的层:业务逻辑层、表示层和数据层。在 MVC 中:

  • M 代表模型
  • V 代表视图
  • C 代表控制器

MVC 是一种系统化的应用程序构建方式,其流程从视图层开始。用户发起请求,请求在控制器层处理,然后发送到模型层以插入或获取数据。模型随后返回成功或失败的响应,视图层将该响应呈现给用户。MVC 架构图如下所示:

MVC Archi质地
MVC Archi结构图

为什么要使用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 后,你会看到一个包含电子邮件和密码字段以及“提交”按钮的表单。

在表单中输入电子邮件地址和密码,然后点击“提交”按钮后:

JSP 应用程序设计

点击“提交”后,输出结果如下所示:

JSP 应用程序设计

当您在屏幕上输入电子邮件地址和密码并点击“提交”后,这些信息将保存到 TestBean 中。下一个屏幕会从 TestBean 中获取这些信息,以显示成功消息。 JSP 它扮演着呈现数据和提供视图的角色,而Servlet则扮演着控制器的角色。 JavaBean 充当模型。主要业务逻辑包含在模型层中。

常见问题

JSP 中的 MVC 是一种设计模式,它将 Web 应用程序分为三层:模型(数据和业务逻辑)、视图(呈现 UI 的 JSP 页面)和控制器(处理请求和路由响应的 Servlet)。

JSP 主要属于视图层,因为它负责为用户渲染动态 HTML。在 JSP 模型 2 模式中,Servlet 扮演控制器的角色。 JavaBeans 扮演模型角色,保持ping 不包含业务逻辑的JSP。

模型 1 将业务逻辑、数据访问和表示直接放在 JSP 页面中。模型 2 遵循 MVC 架构:Servlet 充当控制器, JavaBean 构成模型,JSP 文件渲染视图。推荐使用模型 2。

MVC 架构提高了可维护性、可测试性和团队效率。每一层都独立演进,业务逻辑脱离了 JSP 文件,导航集中在 Servlet 中,单元测试无需启动 Web 容器即可覆盖模型。

浏览器向 Servlet 提交表单。Servlet 验证输入,创建或更新数据。 Java它将 Bean 对象存储为请求属性。然后,它将控制权转发到 JSP 页面,该页面读取 Bean 对象并渲染响应。

AI编码助手分析遗留的Servlet和JSP文件,例如trac将业务逻辑嵌入到干净的服务中,生成 Spring MVC 控制器和 DTO,并生成 JUnit 测试。这加快了从 JSP Model 2 向现代框架的迁移,减少了手动重写。

AI 工具搭建 Spring MVC 控制器,生成请求映射ping他们会建议添加验证注解,编写 Thymeleaf 模板,并创建集成测试。他们还会检测安全问题,例如控制器方法中缺少 CSRF 保护或不安全的输入处理。

总结一下这篇文章: