web概述20

news2025/2/25 9:17:32

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 {
    @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 {

    }
}

输入页面【不是直接访问页面,而是通过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.coloradmin.cn/o/45175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

麦芽糖-聚乙二醇-顺铂 cisplatin-PEG-maltose

麦芽糖-聚乙二醇-顺铂 cisplatin-PEG-maltose 中文名称&#xff1a;麦芽糖-顺铂 英文名称&#xff1a;maltose-cisplatin 别称&#xff1a;生物素修饰麦芽糖 生物素-麦芽糖 麦芽糖-聚乙二醇-顺铂 cisplatin-PEG-maltose 顺铂-PEG-麦芽糖 纯度&#xff1a;95% 存储条件…

电动车充电费到了涨价的时候了,低能源使用成本正在成为过去

电动汽车以省钱成为各个新能源汽车企业吹嘘的宣传点&#xff0c;然而电动汽车车主如今正面临公共充电桩短缺的问题&#xff0c;公共充电桩的建设跟不上电动汽车增长的速度&#xff0c;导致电动汽车车主充电难问题日益突出&#xff0c;解决这个问题就只能通过涨价来解决供应短缺…

ln命令应用

记录&#xff1a;352 场景&#xff1a;在CentOS 7.9操作系统上&#xff0c;使用ln命令创建软链接(symbolic links)和硬链接(hard links)。解决&#xff1a;Too many levels of symbolic links。 版本&#xff1a; 操作系统&#xff1a;CentOS 7.9 1.命令应用 (1)目录创建软…

mybatis-plus,sgg,杨bochao,p5完成

一 MyBatis-Plus简介 增强工具。只做增强不做改。 可以直接在mybatis的基础上整合mybatis-plus。此时并不会影响mybatis的功能&#xff0c;即mybatis原来的功能都在&#xff0c;该怎么用还怎么用。锦上添花的是还能使用mybatis-plus提供的&#xff1a;通用的mapper、通用的ser…

drone+github实现自动化部署

目录drone简介drone与jenkins对比创建oauth2服务器安装drone生成drone的共享密钥配置drone.yml文件安装drone项目配置配置Dockefile配置.drone.yml文件配置阿里云镜像拉取文件drone简介 drone与jenkins对比 创建oauth2 在github中设置第三方app配置。 需要记住id…

[附源码]Python计算机毕业设计Django车源后台管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

微信截图无法发送,也发不出电脑上的图片

微信截图无法发送&#xff0c;也发不出电脑上的图片 现象 今天微信突然出现这个问题&#xff0c;怎么改设置都调不好&#xff0c;卸载重装都不行&#xff0c;最后发现&#xff0c;微信的消息目录中&#xff0c;一些文件无法删除&#xff0c;提示“文件或目录损坏且无法读取”…

上市公司排污费2010-2020重污染行业环境披露水平-原始数据及计算结果

一、重污染行业环境信息披露水平 1、数据来源&#xff1a;见附件 2、时间跨度&#xff1a;2009-2020 3、区域范围&#xff1a;重污染行业的认定主要依据环境保护部2008年6月发布的《上市公司环保核查行业分类管理名录》&#xff08;环办函[2008]373号&#xff09;、《上市公…

PDF转TXT怎么转?看完这篇你就会了

我们在学习工作的时候&#xff0c;经常会使用PDF格式来传输文件&#xff0c;因为PDF具有较强的格式稳定性。可是有时候我们也需要将PDF转成TXT格式&#xff0c;因为有些电子书阅读器比较适合阅读TXT格式的文件。那你们知道PDF怎么转TXT吗&#xff1f;有需要转换PDF格式的小伙伴…

Apollo 应用与源码分析:Monitor监控-软件监控-进程存活监控-process_monitor

目录 流程 代码 分析 获取可以运行的进程的信息 检查HMI 的模块信息 检查被监控的组件 检查其他组件 判断进程状态UpdateStatus 流程 代码 class ProcessMonitor : public RecurrentRunner {public:ProcessMonitor();void RunOnce(const double current_time) overrid…

BUUCTF Misc 被劫持的神秘礼物 刷新过的图片 [BJDCTF2020]认真你就输了 [BJDCTF2020]藏藏藏

被劫持的神秘礼物 下载文件 提示让我们找账号密码 wireshark打开上述文件 可以发现一个POST请求登录接口的HTTP包&#xff0c;追踪http流 数据包中可以发现用户名&#xff1a;admina 密码&#xff1a;adminb 打开md5在线加密 得到flag flag{1d240aafe2…

第二证券|新能源优势突出 青海加速储能产业布局

大唐青海动力开发有限公司工作人员在青海省海南藏族自治州共和县塔拉滩光伏电站巡检。 无论是新动力场站直流侧的储能技能应用&#xff0c;还是同享储能形式试点&#xff0c;近年来&#xff0c;青海储能职业迎来跨越式展开新阶段。业内遍及看好未来储能展开&#xff0c;作为全…

多线程(2)

文章目录前言 &#xff1a;1.Thread类 &#xff1a;1.1 Thread类常见的构造方法1.2 Thread的几个常见属性1.3 中断一个线程1.4 等待一个线程-join()1.5 获取当前线程引用1.6 休眠当前线程2.线程状态前言 &#xff1a; 简单回顾上文知识点 上文我们了解了 线程是为解决并发编程引…

Linux网络编程——IO多路复用

文章目录1&#xff0c;I/O模型2&#xff0c;阻塞I/O 模式2.1&#xff0c;读阻塞&#xff08;以read函数为例&#xff09;2.2&#xff0c;写阻塞3&#xff0c;非阻塞I/O模式3.1&#xff0c;非阻塞I/O模式的实现&#xff08;fcntl()函数、ioctl() 函数&#xff09;3.1.1&#xff…

Apollo 应用与源码分析:Monitor监控-软件监控-channel时间延迟监控

目录 代码 分析 主要结构 判断逻辑 备注 代码 class ChannelMonitor : public RecurrentRunner {public:explicit ChannelMonitor(const std::shared_ptr<LatencyMonitor>& latency_monitor);void RunOnce(const double current_time) override;private:static …

有限元求解:结构应力法如何实现的网格不敏感呢?

作者&#xff1a;云兵老师&#xff0c;仿真秀专栏作者 一、导读 本人从大一时&#xff0c;上第一节力学课就开始接触有限元&#xff0c;那个时候老师曾说&#xff1a;“学会我讲的这门有限元&#xff0c;我可以保证你在毕业时候一定找到工作”。那个时候有限元很火&#xff0…

基于ANSYS Polyflow的逆向挤出模头设计攻略

摘要&#xff1a;内侧灯罩属于复杂截面塑料异型材&#xff0c;目前其挤出模头的设计主要依赖于经验&#xff0c;需要反复试模和修模&#xff0c;使得模具质量难以保证&#xff0c;生产周期长&#xff0c;成本高。 本文采用数值模拟方法对内侧灯罩进行了反向挤出模头设计。首先…

若依框架前后端打包到linux部署,踩坑

前后端分离版下载地址 https://gitee.com/y_project/RuoYi-Vue 打开前端项目 打开readme 初始化依赖 npm install --registryhttps://registry.npmmirror.com启动项目 npm run dev路由模式修改为hash 否则打包后请求路径会和后端冲突 src/router/index.jsexport default ne…

省 市 县 三级联动

大纲 一、导入省市县数据表(t_region) 二、引入jar包 三、导入所需util类&#xff08;整体框架&#xff09; 四、编写代码 1、配置数据库相关信息(数据库名、用户名、密码) config.propreties #oracle9i #driveroracle.jdbc.driver.OracleDriver #urljdbc:oracle:thin:loca…

Linux下redis安装教程

redis安装教程 首先需要安装gcc依赖 yum install -y gcc tcl注&#xff1a;这里如果安装失败可以百度解决 进入/usr/local/src目录&#xff0c;将下载的安装包放在该目录 cd /usr/local/src解压该目录 tar -zxvf redis-6.2.6.tar.gz解压后src下面多了一个redis-6.2.6 进入…