当前位置: 首页 > article >正文

JSP经典设计模式流程分析:JSP+JavaBean设计模式+MVC设计模式

JSP两种经典设计模式

Model1设计模式:JSP+JavaBean

架构图

 什么是JavaBean

  • JavaBean是一种JAVA语言写成的可重用组件,它遵循特定的编程规范,如类必须是公共的、具有无参构造函数,并提供getter/setter方法等。
  • 这里的JavaBean不单单指的是实体类,实际上包括除了JSP的所有Java编写的代码,如果是实体类,则表示实体模型;如果是Service则表示业务模型
  • 也就是说,JavaBean实际上是一种模型思想

这里的JSP设计模式指的是,由JSP完成前端页面+Servlet处理请求并响应的操作;由JavaBean(剩余的java代码)完成业务和数据库数据处理等操作

 为什么需要分层

  •  JSP开发的弊端
    • 业务处理的代码与JSP代码混在一起.不易于阅读,不易于代码维护,降低了程序的可维护性,可扩展性,同时不利于分工合作
 <form method="post" action="doLogin.jsp">
      <table>
         <tr>
    	<td>用户名称:<input type="text" name="user"/></td>
         </tr>
…
<%
    String uname=request.getParameter("user");
    String upwd=request.getParameter("pwd");
…
%>

Model2模式:(采用MVC设计模式)

  • Servlet:控制程序流程
  • JavaBean:实现业务逻辑层
  • JSP:负责数据显示

优点:

  • 层次关系更加清晰
  • 各组件分工更加明确

缺点:

  • 增加了编写的复杂度

MVC: 模型-视图-控制器: (Model-View-Controller)

 MVC

  • 模型:
    • 对应的组件是JavaBean.代表应用程序的数据以及用于访问,控制和修改这些数据的业务规则.
  • 视图:
    • 对应的组件是JSP或HTML.视图是用户看到并与之交互的界面.(它从模型中获取数据并指定这些数据应该如何表现)
  • 控制器:
    • 用的组件是Servlet.控制器负责转发请求,对请求进行处理.

MVC架构图

MVC执行流程:

1.客户端向服务器发送请求

2.服务器把请求分发给Servlet控制器

3.Servlet控制器获取用户输入的数据,并调用JavaBean进行

4.Servlet根据处理的结果选择一个JSP视图来响应用户.

5.JSP视图显示处理的数据(如果存在数据) 

 三层开发遵循的原则

  • 上层依赖其下层,依赖关系不跨层
    • 表示层不能直接访问数据访问层
    • 上层调用下层的结果,取决于下层的实现
  • 下一层不能调用上一层
  • 下一层不依赖上一层
    • 上层的改变不会影响下一层
    • 下层的改变会影响上一层得到的结果
  • 在上一层中不能出现下一层的概念
    • 分工明确,各司其职

分层开发的特点

  • 下层不知道上层的存在
    • 仅完成自身的功能
    • 不关心结果如何使用
  • 每一层仅知道其下层的存在,忽略其他层的存在
    • 只关心结果的取得
    • 不关心结果的实现过程
    • JSTL通常会与EL表达式合作实现JSP页面的编码

分层开发的优势

  • 职责划分清晰
  • 无损替换
  • 复用代码
  • 降低了系统内部的依赖程度

总结

  • JSP两种经典设计模式:
    • model1:JSP+JavaBean
    • model2:Jsp+Servlet+JavaBean
  • MVC设计模式:
    • M(JavaBean)+V(JSP)+C(Servlet)
  • 使用MVC的优点与缺点:
    • 优点:职责划分清晰,无损替换,复用代码,降低了系统内部的依赖程度
    • 缺点:增加编写的复杂度,不适合中小型系统

http://www.kler.cn/a/304821.html

相关文章:

  • DevOps工程技术价值流:加速业务价值流的落地实践与深度赋能
  • 「Py」Python基础篇 之 Python都可以做哪些自动化?
  • Android中桌面小部件的开发流程及常见问题和解决方案
  • 2024版本IDEA创建Sprintboot项目下载依赖缓慢
  • 九州未来再度入选2024边缘计算TOP100
  • 在 Ubuntu 上安装 `.deb` 软件包有几种方法
  • 串口接收不到数据之电阻虚焊bug分析思路
  • springboot和springcloud区别
  • 解锁定位服务:Flutter应用中的高德地图定位
  • Oracle(126)如何使用闪回表(Flashback Table)?
  • mac电脑打不开rar文件怎么办 rar文件怎么转换成zip并打开
  • 【主机入侵检测】Wazuh规则详解
  • 自定义EPICS在LabVIEW中的测试
  • [实践应用] 深度学习之损失函数
  • 远超想象的复杂
  • InternVL2- dockerfile环境变量持久化使用`ENV`而不是`RUN export`来设置环境变量,以确保环境变量在容器运行时仍然可用
  • python画图|3D参数化图形输出
  • MySQL 事务的 ACID 特性与应用
  • 分布式事务学习笔记(二)Seata架构、TC服务器部署、微服务集成Seata
  • Facebook的虚拟现实计划:未来社交的全新视角
  • 使用 LangChain 和 Neo4j 构建智能图数据库查询系统
  • SQL注入(数据库)简介
  • 【CVPR2024】Scaling Up Video Summarization Pretraining with Large Language Models
  • AI 加持的云端 IDE——三种方法高效开发前后端聊天交互功能
  • Machine Learning Specialization 学习笔记(2)
  • 响应式网站和自适应网站有什么区别?