JavaWeb 概述

网站发布和部署一定要依托技术语言吗:

不一定,一个网站可以直接发布和部署,因为因为浏览器能够识别网页只需要两样东西,网络和静态页面,还有一个装在他们的容器,比如 nginx。

静态页面面临的问题:

  • 1:静态网页是固定的,是不可变的。如果一个网站比如腾讯首页,这里需要 1000 文章,那么就必须编写 1000 的 html 页面。

  • 2:难以管理维护,而且需要大量人工去查询和维护。

  • 3:难以修改,如果需要修改某页面中的错别字,就必须要找到这个页面,再进行修改才可以生效。

JavaWeb 技术解决了什么问题:

JSP + Servlet 解决静态网页的动态渲染问题,MySQL 解决数据存储的问题。

JavaWeb 技术是如何解决的:

  • 1:将所有的静态页面的数据进行结构化,存储到 MySQL 数据库中。

  • 2:JavaWeb 对 MySQL 的服务器提供客户端支持,Java可以通过数据库驱动去连接 MySQL 服务,去实现数据的维护工作,也就是 CRUD。

  • 3:Java 通过 JDBC 查询数据后把数据放到对象中,如果是多个数据就放到集合中。

  • 4:将存储数据的对象,通过 Servlet 放入到作用域中。

  • 5:通过 EL 表达式或者标签等技术,将作用域中的对象的数据提取出来渲染到 JSP 模板中。

具体的执行过程是怎么样的:

查询数据库数据 → Serlvet 放入到作用域中(request、session、application、pageContext)→ JSP 模板通过 EL 表达式 + 标签 → 将其作用域中存储的对象取出来动态替换。

查询数据库数据 → SpringMVC 放入到作用域中(ModelMap、Model、ModelAndView、request)→ Freemarker / Thymeleaf 模板通过 EL 表达式 + 标签 → 将其作用域中存储的对象取出来动态替换。

这个具体的执行过程其实就是经典 MVC 的开始架构设计模式。

MVC 架构设计提出的意义:

1:分层架构

2:解耦

3:各司其职(单一职能原则)

MVC 设计模式的由来

MVC 模式的概念:

MVC 模式并不是 JavaWeb 项目中独有的,MVC 是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),是一种软件设计的典范。

MVC 模式的详解:

控制器 Controller:控制请求的处理逻辑,对请求进行处理,负责请求转发,

视图 View:用户看到并与之交互的界面,比如 HTML(静态资源),JSP(动态资源)等等。

模型 Model:一种企业规范,也就是业务流程、状态的处理以及业务规则的规定。业务流程的处理过程对其他层来说是不透明的,模型接受视图数据的请求,并返回最终的处理结果。业务模型的设计可以说是 MVC 的核心。

MVC 模式的应用:

MVC 模式被广泛用于 Java 的各种框架中,比如早期的 Struts2 框架和目前市面上主流的 SpringMVC 框架都用到了这种思想。

JavaWeb 的经典三层架构

JSP Model1 第一代:

JSP Model1 是 JavaWeb 早期的模型,它适合小型 Web 项目,开发成本低。Model1 第一代时期,服务器端只有 JSP 页面,所有的操作都在 JSP 页面中,连访问数据库的 API 也在 JSP 页面中完成。也就是说,所有的东西都耦合在一起,对后期的维护和扩展极为不利。

"""

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<sql:query var="user" sql="select * from user">
${user.id} == ${user.nickname}
</sql:query>
</body>
</html>

"""

JSP Model1 第二代:

JSP Model1 第二代有所改进,把业务逻辑的内容放到了 JavaBean 中,而 JSP 页面负责显示以及请求调度的工作。虽然第二代比第一代好了些,但还让 JSP 做了过多的工作,JSP 中把视图工作和请求调度(控制器)的工作耦合在一起了。

"""

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<%
Connection connection = null;
PreparedStatement preparedStatement = connection.prepareStatement("sql");
ResultSet resultSet = preparedStatement.executeQuery();
resultSet.next();
User user = new User();
user.setId(1);
user.setNickname("xpy");
pageContext.setAttribute("user",user);
%>
${user.id}===${user.nickname}
<jsp:useBean id="user" type="com.kuangstudy.bean.User" scope="page">
<jsp:getProperty name="user" property="id"/>
<jsp:getProperty name="user" property="nickname"/>
</jsp:useBean>
</body>
</html>

"""

JSP Model2:

  • JSP Model2 模式已经可以清晰的看到 MVC 完整的结构。

  • JSP:视图层,用来与用户打交道。负责接收用来的数据,以及显示数据给用户。

  • Servlet:控制层,负责找到合适的模型对象来处理业务逻辑,转发到合适的视图。

  • JavaBean:模型层,完成具体的业务工作,例如开启、转账等。

JSP Model2 适合多人合作开发大型的 Web 项目,各司其职,互不干涉,有利于开发中的分工,有利于组件的重用。但是 Web 项目的开发难度加大,同时对开发人员的技术要求也提高了。

"""

@WebServlet("/test")
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
try {
Connection connection = null;
PreparedStatement preparedStatement = connection.prepareStatement("sql");
ResultSet resultSet = preparedStatement.executeQuery();
resultSet.next();
User user = new User();
user.setId(1);
user.setNickname("xpy");
request.setAttribute("user", user);
request.getRequestDispatcher("index.jsp").forward(request,response);
}catch (Exception ex){
ex.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}

"""

"""

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
${user.id}===${user.nickname}
<jsp:useBean id="user" type="com.kuangstudy.bean.User" scope="page">
<jsp:getProperty name="user" property="id"/>
<jsp:getProperty name="user" property="nickname"/>
</jsp:useBean>
</body>
</html>

"""

JavaWeb和MVC三层架构的更多相关文章

  1. MVC三层架构编程(Dao、service、servlet 之间的关系)

    木哈哈~先开心一会儿,人生的第一篇博客aaa.我一定好好写.不过之前也没怎么看别人写过,还是有点小激动呢,加油.好好总结,会总结的宝宝才会有提高! 今天想总结一下mvc三层架构模型编程,宝宝学习不怎么 ...

  2. Angular JS从入门基础 mvc三层架构 常用指令

    Angular JS从入门基础  mvc模型 常用指令 ★ 最近一直在复习AngularJS,它是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为核心 ...

  3. JavaWeb学习之三层架构实例(三)

    引言 通过上一篇博客JavaWeb学习之三层架构实例(二)我们基本上已经实现了对学生信息列表的增删改查操作(UI除外),但是不难看出,代码冗余度太高了,尤其是StudentDao这个类,其中的增删改查 ...

  4. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  5. MVC三层架构搭建

    MVC三层架构搭建 项目主要是用三层来搭建项目,三层分为表现层,数据层和业务层.项目用了目前比较流行的IOC架构.目前流行的IoC 框架有AutoFac,Unity,Spring.NET等,项目中选用 ...

  6. JavaWeb学习之三层架构实例(二)

    引言 这个实例是上一个实例JavaWeb学习 三层架构实例(一)的加强版,实现的是在前端对数据库中student表的 增.删.改.查 操作.关于三层组成云云,这里就不再叙述. 实例 效果图 先来看一下 ...

  7. Asp.Net MVC三层架构之autofac使用教程

    开发环境:vs2015..net4.5.2.mvc5.ef6 Autofac简介 IOC控制反转(Inversion of Control,缩写为IOC),Autofac是一个开源的依赖注入框架,Au ...

  8. MVC三层架构模式编程思想 JSP-Servlet-JavaBean

    MVC(Mdodel-View-Controller)编程模式.把一个Java应用分成三层:模型层.视图层.控制层,各层分别实现各层的功能,整个过程见下图就一目了然了. watermark/2/tex ...

  9. MVC——三层架构笔记、1

    三层架构MVC笔记1. DAL——数据访问层:(专门与数据库交互,增删查改的方法都在这:需引用MODEL层) BLL——业务逻辑层:(页面与数据库之间的桥梁:需引用DAL.MODEL层) MODEL— ...

  10. JSP--JSP语法--指令---九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构

    一.JSP 原理:JSP其实就是一个servlet. Servlet负责业务逻辑处理,JSP只负责显示.开发中,JSP中不能有一行JAVA代码 二.JSP语法 1. JSP模板元素:JSP中HTML标 ...

随机推荐

  1. Selenium 打包为.exe执行

    前言:不依赖环境执行,拓展UI自动化使用的场景 一.项目结构介绍 case:测试用例次存放目录 config:主要存放yaml文件配置 ele:元素的定位以及执行动作 tools:HTMLTestRu ...

  2. Python-pytest-repeat的简单使用

    前言: 一.简介 pytest-repeat是pytest的插件,重复执行单个用例,或多个测试用例,并指定重复次数. 二.安装 1.执行如下命令 pip3 install pytest-repeat ...

  3. 【OpenAI】私有框架代码生成实践

    作者:京东零售 牛晓光 根据现有调研和实践,由OpenAI提供的ChatGPT/GPT-4模型和CodeX模型能够很好的理解和生成业界大多数编程语言的逻辑和代码,其中尤其擅长Python.JavaSc ...

  4. 京东APP百亿级商品与车关系数据检索实践

    导读 本文主要讲解了京东百亿级商品车型适配数据存储结构设计以及怎样实现适配接口的高性能查询.通过京东百亿级数据缓存架构设计实践案例,简单剖析了jimdb的位图(bitmap)函数和lua脚本应用在高性 ...

  5. #Python assign赋值,新增列操作

  6. 音视频八股文(7)-- 音频aac adts三层结构

    AAC介绍 AAC(Advanced Audio Coding)是一种现代的音频编码技术,用于数字音频的传输和存储领域.AAC是MPEG-2和MPEG-4标准中的一部分,可提供更高质量的音频数据,并且 ...

  7. 2022-08-30:给你一个字符串化学式 formula ,返回 每种原子的数量 。 原子总是以一个大写字母开始,接着跟随 0 个或任意个小写字母,表示原子的名字。 如果数量大于 1,原子后会跟着数

    2022-08-30:给你一个字符串化学式 formula ,返回 每种原子的数量 . 原子总是以一个大写字母开始,接着跟随 0 个或任意个小写字母,表示原子的名字. 如果数量大于 1,原子后会跟着数 ...

  8. 2021-04-27:如果一个字符相邻的位置没有相同字符,那么这个位置的字符出现不能被消掉。比如:“ab“,其中a和b都不能被消掉 。如果一个字符相邻的位置有相同字符,就可以一起消掉。比如:“abbb

    2021-04-27:如果一个字符相邻的位置没有相同字符,那么这个位置的字符出现不能被消掉.比如:"ab",其中a和b都不能被消掉 .如果一个字符相邻的位置有相同字符,就可以一起消 ...

  9. 问题解决:TNS-12543: TNS:destination host unreachable

    环境: 11.2.0.3 ADG (db11g\db11gadg\db11gcas) 在自己先前克隆后的环境互相tnsping报错. tnsping 本机ok,tnsping其他机器均报错: [ora ...

  10. Python Numpy 切片和索引(高级索引、布尔索引、花式索引)

    张量(Tensor).标量(scalar).向量(vector).矩阵(matrix) Python Numpy 切片和索引(高级索引.布尔索引.花式索引) Python NumPy 广播(Broad ...