web概述20

news/2024/11/16 13:01:41/

MVC模式

MVC全名是Model View Controller是模型视图控制器的缩写,是一种软件设计典范,是一种架构型的模式,本身不引入新功能,只是帮助将开发的结构组织的更加合理。

它使用一种业务逻辑、数据、界面显示分离的方法,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

最典型的MVC就是 JSP + servlet + javabean 的模式,经常用于请求-响应模型开发中,适用于交互频繁的大中型应用中。

  • Model模型:javabean实现,封装业务逻辑和业务数据
  • View视图:采用 JSP+JSTL 实现,收集客户动作和显示业务数据
  • Controller控制器:采用Servlet实现,流程控制

优点:

  • 1、视图层和业务层分离,耦合度低。
  • 2、多个视图能共享一个模型,重用性高。
  • 3、使开发和维护用户接口的技术含量降低,缩短开发周期,便于分工合作。
  • 4、分离视图层和业务逻辑层也使得应用更易于维护和修改。

缺点:

  • 1、模型和视图要严格的分离,调试繁琐困难。
  • 2、增加系统结构和实现的复杂性,总体难度提高,不适合小中型应用程序。
  • 3、视图与控制器间的过于紧密的连接并且降低了视图对模型数据的访问

JSP和Servlet

Servlet是一个实现了Servlet接口的类,具备Java类的所有特性,能够很好地组织业务逻辑代码访问,但是在Java源文件中,因为是通过字符串拼接的方式生成动态HTML内容,这样就容易导致代码维护困难、可读性差,不能支持所见即所得的开发。

JSP将网页逻辑与网页设计的显示分离,可以规避了Servlet在生成HTML内容方面的劣势,但是在HTML中混入大量、复杂的业务逻辑编码非常繁琐,同时基本不具备代码的可重用性。

JSP究其本质就是Servlet,JSP是包含java代码的HTML网页,Servlet是包含html标签的java类。在具体应用开发中可以考虑协同使用,以达到扬长避短的目的。一般使用Servlet作流程控制,jsp作页面显示和收集客户动作,最终实现显示逻辑和流程控制的分离。

应用开发架构

纯JSP开发:非常简单高效,特别适合微型应用开发,但是代码基本上不具备重用性,开发效率低,难于维护

JSP Model1:简单高效,适合小型项目的开发。但是JSP的职责过于繁重,职责分工不明确。在后期的维护工作非常的苦难
在这里插入图片描述

JSP Model2:职责清晰,适合大型项目,但是分层过多,不适合小型项目的开发

在这里插入图片描述

MVC的适用性

  • 它清晰地分离了表达和内容,明确了角色的定义以及开发者与网页设计者的分工。事实上,项目越复杂,使用Model 2体系结构的好处就越大
  • MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。

具体开发

登录流程:url–>打开输入数据的页面【jspmodel2要求以servlet为核心】

@WebServlet(name = "LoginServlet", value = "/login.do")
public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.getRequestDispatcher("login.jsp").forward(request,response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}

输入页面【不是直接访问页面,而是通过Servlet跳转页面】

<form action="login.do" method="post"><input name="username"/><input type="password" name="password"/><input type="submit" value="登录系统"/>
</form>

由Servlet接收提交的数据

  • 接收提交数据 request.getParameter(“username”):String
  • 提交数据的校验
  • 调用业务类执行相应的业务逻辑处理
  • 根据业务处理执行结果跳转不同的页面显示
@WebServlet(name = "LoginServlet", value = "/login.do")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
request.getRequestDispatcher("login.jsp").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
String username=request.getParameter("username");
String password=request.getParameter("password");
Map<String,String> errs=new HashMap<>();
if(username==null || username.trim().length()<1){
errs.put("username","用户名称不能为空!");
}
if(password==null || password.trim().length()<1){
errs.put("password","用户口令不能为空!");
}
if(errs.size()>0){
request.setAttribute("errors",errs);
request.getRequestDispatcher("login.jsp").forward(request,response);
return;
}
IUserDao userDao=new UserDaoImpl();
User user=new User();
user.setUsername(username);
user.setPassword(password);
boolean bb= userDao.login(user);
if(bb){
HttpSession session=request.getSession();
session.setAttribute(Constants.LOGIN_INFO,user);
response.sendRedirect("show.do");
}else{
request.setAttribute("msg","登录失败!请重试");
request.getRequestDispatcher("login.jsp").forward(request,response);
}
}
private DateFormat df=new SimpleDateFormat("yyyy-MM-dd");//错误的,线程不安全
}

http://www.ppmy.cn/news/70.html

相关文章

掌握这十个Linux命令,秒变Linux老手

前言 在Linux下&#xff0c;完成一个事情往往有N种方法。Linux的一大哲学就是"一个工具只做一样事情"&#xff0c;通过不同工具的组合使用&#xff0c;完成不同的需求。熟练掌握好常用命令&#xff0c;有时事半功倍&#xff0c;起到出其不意的效果。不仅大大提升你的…

Go定时器使用

概述 在软件开发场景&#xff0c;难免会用到定时器&#xff0c; 在go语言中&#xff0c;我们一般使用标准库time就可以实现很多定时器功能 定时器种类 单次定时器: 创建后只触发一次周期定时器: 每隔一段指定的时间触发一次 单次定时器 创建方法 方法一&#xff1a;使用 …

zabbix监控Nginx

目录 一、环境准备 二、部署Nginx被监控端 三、自定义Nginx监控key 四、给目标主机创建监控项 一、环境准备 搭建zabbix基础环境 zabbix基础环境部署参照&#xff1a;zabbix基础环境部署_桂安俊kylinOS的博客-CSDN博客 以下实验部署均基于上述环境 二、部署Nginx被监控端…

【Canvas】js用canvas绘制一个钟表时钟动画效果

学习JavaScript的看过来&#xff0c;有没有兴趣用Canvas画图呢&#xff0c;可以画很多有趣的事物&#xff0c;自由发挥想象&#xff0c;收获多多哦&#xff0c;旋转角度绘图这个重点掌握到了吗&#xff0c;这里有一个例子&#xff0c;如何用canvas画钟表时钟动图效果&#xff0…

防火墙原理讲解——练习实验

♥️作者&#xff1a;小刘在C站 ♥️每天分享云计算网络运维课堂笔记&#xff0c;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放。 目录 一防火墙基础 二防火墙配置 三防火墙的高级应用 四.实验图纸 五.实验命令 一防火…

快速上手 TypeScript

快速上手 TypeScript ypeScript 简称 TS &#xff0c;既是一门新语言&#xff0c;也是 JS 的一个超集&#xff0c;它是在 JavaScript 的基础上增加了一套类型系统&#xff0c;它支持所有的 JS 语句&#xff0c;为工程化开发而生&#xff0c;最终在编译的时候去掉类型和特有的语…

考虑车轮纵向滑动的无人自行车平衡控制实现

摘要: 针对无人自行车在出现车轮纵向滑动下的平衡控制问题,提出一种将自行车车轮纵向滑动引入控制器的方法来实现在一定程度车轮纵向滑动下的无人自行车平衡运动控制。首先引入一种自行车线性变参数(linearparameter-varying,LPV)动力学模型,其次将卡尔曼滤波算法估算的自行…

基于样本平衡策略的多源迁移学习方法及其在乙烯精馏塔质量指标预测的应用

摘要: 基于数据驱动的工业过程建模需要依赖大量的标记良好的数据集,但与目标任务直接相关的标注数据往往是有限的。因此,可以利用与其具有相关性的辅助训练数据进行建模以实现任务迁移。然而,样本的不平衡问题一定程度上影响了迁移学习的性能表现。因此,提出了一种基于样本…