小黑子的java项目开发理解

小黑子的理解

  • 一、基于Maven模板构建的三种常见Java项目——基于maven
  • 二、通常的java目录结构
    • utils层 工具包
    • model层(pojo层)
    • exceptions层 报错包
    • dao层(mapper层)[impl包—查询数据库]
    • service层 定义接口 [impl—实现事务]
    • controller层 [处理前台发送的请求]
    • Web层
  • 三、软件分层架构简单理解
    • 分层架构
    • 经典三层架构
    • MVC
      • 三层架构和MVC的区别与联系
  • 四、jar包和war包区别及理解

一、基于Maven模板构建的三种常见Java项目——基于maven

新建Maven project项目时,需要选择archetype。archetype的意思就是模板原型的意思,原型是一个Maven项目模板工具包。原型将帮助作者为用户创建Maven项目模板,规范了项目的结构。根据所创建项目的不同,常见的三种模板有:

  • maven-archetype-quickstart
  • maven-archetype-webapp
  • cocoon-22-archetype-webapp

二、通常的java目录结构

  • src/main/java 项目的源代码所在的目录
    src/main/resources 项目的资源文件所在的目录
    src/main/filters 项目的资源过滤文件所在的目录
    src/main/webapp 如果是web项目,则该目录是web应用源代码所在的目录,比如html文件和web.xml等都在该目录下。
  • src/test/java 测试代码所在的目录
    src/test/resources 测试相关的资源文件所在的目录
    src/test/filters 测试相关的资源过滤文件所在的目录

目录实例图:
在这里插入图片描述

从一个用户访问一个网站的情况来看,对应着项目代码结构来分析,可以贯穿整个代码分层:
在这里插入图片描述

utils层 工具包

在这里插入图片描述

utils包作为一个工具类包,工具类:可以动态地生成DAO的实现类(或者说可以动态生成DAO的代理类)

model层(pojo层)

  • model层即数据库实体层,也被称为entity层,pojo层。
    在这里插入图片描述

  • 是用于存放实体的类的

  • 类中定义了多个类属性,并与数据库表的字段保持一致,一般数据库一张表对应一个实体类,类属性同表字段一一对应。

  • 主要用于定义与数据库对象应的属性,提供get/set方法,tostring方法,有参无参构造函数。

exceptions层 报错包

作为一个报错包,可自定义创建报错类,见名知意
在这里插入图片描述

dao层(mapper层)[impl包—查询数据库]

  • dao层即数据持久层,也被称为mapper层,叫数据持久层,先设计接口,然后在配置文件中进行配置其实现的关联。

  • dao层的作用为访问数据库,向数据库发送sql语句,完成数据的增删改查任务。

  • 数据持久化操作就是指,把数据放到持久化的介质中,同时提供增删改查操作,比如数据通过hibernate插入到数据库中

  • 一般都是在dao层下写给接口,然后在impl包下实现类连接接口,然后重写方法

service层 定义接口 [impl—实现事务]

  • service层即业务逻辑层。
  • service层的作用为完成功能设计。
  • service层调用dao层接口,接收dao层返回的数据,完成项目的基本功能设计。
  • 业务逻辑层,完成功能的设计 和dao层一样都是先设计接口,再创建要实现的类,然后在配置文件中进行配置其实现的关联。
  • 接下来就可以在service层调用dao层的接口进行业务逻辑应用的处理。
  • service的impl是把mapper和service进行整合的文件 封装Service层的业务逻辑有利于业务逻辑的独立性和重复利用性。

controller层 [处理前台发送的请求]

  • controller层即控制层,控制业务逻辑service

  • controller层的功能为请求和响应控制,负责前后端交互。

  • controller层接受前端请求,调用service层,接收service层返回的数据,最后返回具体的页面和数据到客户端

  • controller层主要调用Service层里面的接口控制具体的业务流程,控制的配置也要在配置文件中进行

Web层

主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等

三、软件分层架构简单理解

什么是架构分层?

分层架构是将软件模块按照水平切分的方式分成多个层,一个系统由多层组成,每层由多个模块组成。同时,每层有自己独立的职责,多个层次协同提供完整的功能。比如,我们经常提到的MVC架构,就是一种非常典型非常基础的分层方式

系统架构分层之后,往往需要达到以下目标:

  • 高内聚:分层设计可以简化系统设计,让不同层专注做某一模块的事;
  • 低耦合:层与层之间通过接口或API来交互,依赖方不用知道被依赖方的细节;
  • 复用:分层之后可以做到代码或功能的复用;
  • 扩展性:分层架构可以让代码更容易横向扩展

分层架构

在这里插入图片描述
一般分层架构由以下组成:

  • 表示层:
    • 也说是客户端层,不论是App还是Web或者其他,指客户直接接触到的页面
  • 接口层:
    • 一般是两种服务形式,即“RPC(采用Service提供RPC接口服务)”和“HTTP(通过Web封装成Http接口服务)”。这层一般不抛出异常,否则会导致client会出现不可控的错误,以通过标准的ErrorCode&ErrorMeg提示为主,一般还会有流量控制和权限等控制监控在这层
  • 业务层:
    • 所有的业务实现放在这层,一般可以按照业务类型分类也便于识别管理;事务也放在这层,一般推荐只放在这层统一管理
  • 持久层:
    • 主要有数据库的entity映射类,只提供简单CRUD的dao操作类,接口mapper类,一些连接中间件的封装util工具类;这层推荐严格禁止事务,异常可以统一封装一个
  • 数据层:
    • 数据层指存储,根据业务选择的数据存储基础设施,传统的关系型数据库Mysql、Oracle,Nosql数据库Redis、ES、Mongodb等。不同的数据库采用的connect方式不同,需要在持久层独立封装一个独立Util类进行集中管理

经典三层架构

三层架构 ,通常就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)

在这里插入图片描述

  • 表现层(PL):

    • 通俗讲就是展现给用户的界面,对应项目中的Web层包含Servlet和Controller等
    • 负责处理用户交互和展示数据的部分。它包括用户界面(UI)、前端逻辑以及与用户交互的各种元素。在Web应用中,通常表现层由HTML、CSS、JavaScript等组成
  • 业务逻辑层(BLL):

    • 也称作领域层,负责系统业务逻辑的处理,对应项目中Service和ServiceImpl等
    • 它包括处理用户请求、验证数据、执行业务规则、数据转换等操作。在传统的三层架构中,业务逻辑层通常包含业务逻辑和数据访问逻辑
  • 数据访问层(DAL):

    • 该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等,对应项目中的Dao
    • 它隐藏了底层数据存储细节,并提供高层次的接口供业务逻辑层使用
    • 它包括处理用户请求、验证数据、执行业务规则、数据转换等操作。在传统的三层架构中,业务逻辑层通常包含业务逻辑和数据访问逻辑

在开源技术框架中,表现层实现的代表作品是Struts1/2、Spring MVC,业务层实现的代表作品是Spring,持久层实现的代表作品是Hibernate和Mybatis

MVC

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,虽然MVC并不是严格意义上的三层架构,但可以与传统的三层架构进行对比

  1. 模型(Model):

    • 表示应用程序的数据和业务逻辑,负责处理数据的读取、存储、转换和验证等操作。在传统的三层架构中,模型可以对应于业务逻辑层和数据访问层。
    • 分为两类,一类称为数据承载Bean,一类称为业务处理Bean。数据承载Bean是指实体类,专门承载业务数据的,如Student、User等。而业务处理Bean则是指Service或Dao对象,专门用于处理用户提交请求的
  2. 视图(View):

    • 表示应用程序的用户界面,负责展示数据和与用户进行交互。视图通常与表现层相对应。
  3. 控制器(Controller):

    • 作为模型和视图之间的协调者,接收用户的输入请求,根据用户请求的类型和数据,进行相应的业务处理,并决定如何更新模型和视图。控制器通常对应于业务逻辑层
    • 用于将用户请求转发给相应的Model进行处理,并处理Model的计算结果向用户提供响应

标准的MVC交互模型如下图:
在这里插入图片描述
Web MVC标准架构,如下图所示:
在这里插入图片描述

三层架构和MVC的区别与联系

MVC严格说是三层架构中的UI层,也就是说,MVC把三层架构中的UI层再度进行了分化,分成了控制器、视图、实体三个部分,控制器完成页面逻辑,通过实体来与界面层完成通话,而C层直接与三层中的BLL进行对话。

三层架构和MVC可以共存。三层架构是基于业务逻辑来分的,而MVC是基于页面来分的。MVC是表现模式(Presentation Pattern),三层架构是典型的架构模式(Architecture Pattern)。

三层架构的分层模式是典型的上下关系,上层依赖于下层。但MVC作为表现模式是不存在上下关系的,而是相互协作关系。即使将MVC当作架构模式,也不是分层模式。MVC和三层架构基本没有可比性,是应用于不同领域的技术。

四、jar包和war包区别及理解

jar包:

  • jar是类的归档文件
  • JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件,为 J2EE 应用程序创建的jar文件是 EAR 文件(企业 jar文件),jar文件格式以流行的 ZIP 文件格式为基础

war包

  • war包是一个Web应用程序
  • 一个web程序进行打包便于部署的压缩包,里面包含我们web程序需要的一些东西,其中包括web.xml的配置文件,前端的页面文件,以及依赖的jar。便于我们部署工程,直接放到tomcat的webapps目录下,直接启动tomcat即可。

其区别:

  1. jar是java普通项目打包,通常是开发时要引用通用类,打成jar包便于存放管理。当你使用某些功能时就需要这些jar包的支持,需要导入jar包。

  2. war是java web项目打包,web网站完成后,打成war包部署到服务器,目的是为了节省资源,提供效率。

  3. jar文件(扩展名为. Jar,Java Application Archive)包含Java类的普通库、资源(resources)、辅助文件(auxiliary files)等。通常是开发时要引用的通用类,打成包便于存放管理。简单来说,jar包就是别人已经写好的一些类,然后对这些类进行打包。可以将这些jar包引入到你的项目中,可以直接使用这些jar包中的类和属性,这些jar包一般放在lib目录下。

  4. war文件(扩展名为.War,Web Application Archive)包含全部Web应用程序。在这种情形下,一个Web应用程序被定义为单独的一组文件、类和资源,用户可以对jar文件进行封装,并把它作为小型服务程序(servlet)来访问。 war包是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中。以Tomcat来说,将war包放置在其\webapps\目录下,然后启动Tomcat,这个包就会自动解压,就相当于发布了。war包是Sun提出的一种web应用程序格式,与jar类似,是很多文件的压缩包。war包中的文件按照一定目录结构来组织。根据其根目录下包含有html和jsp文件,或者包含有这两种文件的目录,另外还有WEB-INF目录。通常在WEB-INF目录下含有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的servlet类和jsp,或者servlet所依赖的其他类(如JavaBean)。通常这些所依赖的类也可以打包成jar包放在WEB-INF下的lib目录下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145653.html

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

相关文章

Backblaze发布2023中期SSD故障数据质量报告

作为一家在2021年在美国纳斯达克上市的云端备份公司,Backblaze一直保持着对外定期发布HDD和SSD的故障率稳定性质量报告,给大家提供了一份真实应用场景下的稳定性分析参考数据。 本文我们主要看下Backblaze最新发布的2023中期SSD相关故障稳定性数据报告。…

施耐德电气:勾勒未来工业愿景,赋能中国市场

9月19日,第23届中国国际工业博览会(简称“工博会”)在上海隆重召开。作为全球能源管理和自动化领域的数字化转型专家,施耐德电气在工博会现场全方位展现了自身对未来工业的全新视野与深刻见解,不仅展示了其贯通企业设计…

ubuntu 18.04安装libjasper-dev 亲测可行

情况: ubuntu 18.04 LTS安装OpenCV 3.4.16之前,需要安装几个依赖项: sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get instal…

计算机网络 - 应用层

计算机网络 - 应用层 计算机网络 - 应用层 域名系统文件传送协议动态主机配置协议远程登录协议电子邮件协议 1. SMTP2. POP33. IMAP 常用端口Web 页面请求过程 1. DHCP 配置主机信息2. ARP 解析 MAC 地址3. DNS 解析域名4. HTTP 请求页面 域名系统 DNS 是一个分布式数据库&a…

python -m pip install --upgrade pip失败

显示这样的报错: You are using pip version 9.0.1, however version 23.2.1 is available. You should consider upgrading via the python -m pip install --upgrade pip command. 换源安装 python -m pip install --upgrade pip -i https://pypi.douban.com/s…

基于SpringBoot的服装生产管理系统的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 登录界面的实现 系统主界面的实现 用户管理模块的实现 人事安排管理模块的实现 工资管理模块的实现 考勤管理模块的实现 样板管理模块的实现 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 本协力服装厂服装生…

TensorFlow-Federated简介与安装

1、简介 TensorFlow Federated(TFF)是一个用于机器学习和其他分布式数据计算的开源框架。TFF 的开发旨在促进联邦学习 (FL)的开放研究和实验。联邦学习是一种机器学习方法,其中一个共享的全局模型在许多参与的客户之间…

【GDB】用 python 扩展 gdb

用 python 扩展 GDB .gdbinit 文件中实现自定义命令 mv 代码如下 define mvif $argc 2delete $arg0# 注意新创建的断点编号和被删除断点的编号不同break $arg1elseprint "输入参数数目不对,help mv 以获得用法"end end# (gdb) help mv 会输出以下帮助文…

centos 6使用yum安装软件

1. 执行以下命令,查看当前操作系统 CentOS 版本。 cat /etc/centos-release返回结果如下图所示,则说明当前操作系统版本为 CentOS 6.9。 2. 执行以下命令,编辑 CentOS-Base.repo 和CentOS-Epel.repo文件。 vim /etc/yum.repos.d/CentOS-Bas…

Scrapy-应对反爬虫机制

参考自https://blog.csdn.net/y472360651/article/details/130002898 记得把BanSpider改成自己的项目名,还有一个细节要改一下,把代码user换成user_agent 禁止Cookie 在Scrapy项目中的settings文件,可以发现文件中有以下代码: COOKIES_ENA…

【软件评测】Apowersoft 傲软抠图AI智能换背景工具软件

现如今的数字图像处理已经成为人们生活中不可或缺的一部分,而图像抠图作为其中的重要环节,更是被广泛应用于设计、摄影、广告等领域。为了满足用户的需求,Apowersoft推出了一款傲软抠图AI智能换背景工具,宣称能够自动抠图并智能替…

如何使用ArcGIS Pro制作标准地图样式国界

相信大家都浏览过标准地图服务提供的标准地图,不知道你有没有想过尝试制作里面的国界,这里为大家介绍一下制作方法,希望能对你有所帮助。 制作已定国界 在地图数据内,国界分为已定国界、未定国界和海岸线,我们先对已定…

k8s--storageClass自动创建PV

文章目录 一、storageClass自动创建PV1.1 安装NFS1.2 创建nfs storageClass1.3 测试自动创建pv 一、storageClass自动创建PV 这里使用NFS实现 1.1 安装NFS 安装nfs-server: sh nfs_install.sh /mnt/data03 10.60.41.0/24nfs_install.sh #!/bin/bash### How to i…

overleaf杂谈-Springer文献格式问题

目录 overleaf写作问题记录1.Latex中的%问题(文本变成灰色)2.Springer文献格式问题2.1 新建reference.bib2.2 谷歌学术搜索文章并引用2.3 复制BibTex2.4 复制进reference.bib2.5 在sn-article.tex的\end{document}前添加语句2.6 引用文献2.7 Springer模板…

docker 安装本地starrocks测试环境

安装文档 Quick start: Deploy StarRocks with Docker deploy_in_docker StarRocks Docs Quick start: Deploy StarRocks with Docker deploy_in_docker StarRocks Docs 镜像版本 https://hub.docker.com/r/starrocks/allin1-ubuntu/tags?page1 docker安装starrocks

最新AI智能写作系统ChatGPT源码/支持GPT4.0+GPT联网提问/支持ai绘画Midjourney+Prompt+MJ以图生图+思维导图生成

一、AI创作系统 SparkAi系统是基于很火的GPT提问进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT系统?小编这里写一个详细图文教程吧&#x…

Python Cartopy地图投影【3】

上两期文章见: Python Cartopy地图投影【1】 第一期文章内容纲要: step1: 开始地图投影 step2: GeoAxes 的常用方法 2.1 add_feature:添加海岸线、河流、湖泊等地理特征 2.2 gridlines:添加网格线以及相应标签等 Python Cartopy地…

怎么修改jupyter lab 的工作路径而不是直接再桌面路径打开

要修改Jupyter Lab的工作路径,你可以按照以下步骤操作: 打开终端或命令提示符窗口。 输入 jupyter lab --generate-config 命令来生成Jupyter Lab的配置文件。 找到生成的配置文件,通常会位于 ~/.jupyter/jupyter_notebook_config.py。 使…

常用数学分布

正态分布(高斯分布) 若随机变数 X X X 服从一个期望 μ \mu μ,标准差 的正态分布 σ \sigma σ,则记为 X ≈ N ( μ , σ 2 ) X \approx N(\mu,\sigma^2) X≈N(μ,σ2),其密度函数为: f ( x ) 1 σ …

唤醒手腕 Matlab 游戏编程常用技术知识点详细教程(更新中)

Figure 窗口初始化 figure 使用默认属性值创建一个新的图窗窗口。生成的图窗为当前图窗。f figure(___) 返回 Figure 对象。可使用 f 在创建图窗后查询或修改其属性。figure(f) 将 f 指定的图窗作为当前图窗,并将其显示在其他所有图窗的上面。 figure(n) 查找 Nu…