第一章 JavaEE应用和开发环境
1.1 java EE应用概述
1、java EE的分层模型
数据库--【提供持久化服务】--》Domain Object层 --【封装】--〉DAO层--【提供数据访问服务】--》业务逻辑层--【提供业务逻辑实现】--〉MVC的控制器层--【显示】--》前端
优点:松耦合
2、Java EE应用的组件
- 1)前端组件:主要负责收集用户输入数据,或者向客户显示系统状态。JSP、FreeMarker、JQuery、Angular、JSON、HTML5+CSS
- 2)控制器组件:对于java EE 的MVC框架而言,框架负责提供一个核心控制器,而核心控制器负责拦截用户请求,并将请求转发给用户实现的控制器组件。而这些用户实现的控制器则负责处理调用业务逻辑方法,处理用户请求。
- 3)业务逻辑组件:核心组件,实现系统的业务逻辑。通常,一个业务逻辑方法对应一次用户操作。一个业务逻辑方法应该是一个整体。因此要求对业务逻辑方法增加事务性。业务逻辑方法仅仅负责实现业务逻辑,不应该进行数据库访问。因此业务逻辑组件中不应该出现原始的MyBatis、JDBC等API。
- 4)DAO组件:Data Access Object,也被称为数据访问对象,这种类型的对象比较缺乏变化,每个DAO组件都提供Domain Object基本的创建、查询、更新、删除等操作,这些操作对应于数据表的CRUD等原子操作。当然,如果采用不同的持久层访问技术,DAO组件的实现会完全不同,为了分离业务逻辑组件的实现与DAO组件的实现,程序应该为每个DAO组件都提供接口,业务逻辑层组件面向DAO接口编程,这样才能提供更好的解耦。
- 5)领域对象组件:Domain Object 抽象了系统的对象模型,通常而言,这些领域对象的状态都必须保存在数据库里,因此,每个领域对象通常对应一个或多个数据表,领域对象需要提供对数据记录访问的方式。
3、Java EE 应用的结构和优势
系统后期维护、扩展需要成本,软件系统需要很好的伸缩性。
优势:松耦合,让应用之间的耦合停留在接口层次,而不是代码层次。
4、常用的Java EE 服务器
轻量级java EE 架构:Spring MVC+Spring+MyBatis,只需要简单的web服务器就可以运行,不需要专业的java EE服务器支持
常见的Web服务器:
1)Tomcat
2)Jetty:可做嵌入式服务器
3)Resin
常见的Java EE服务器:
1)JBoss
2)GlassFish
3)WebLogic和WebSphere
1.2 轻量级Java EE应用相关技术
1、JSP、Servlet 4.x、Java Bean及替代技术
JSP:最早的Java EE规范之一,充当Java EE的表现层,简单易用,只负责简单的显示逻辑,无法直接访问数据的底层状态。
Servlet:和JSP完全统一,JSP必须被Web服务器编译为Servlet,真正在Web服务器内运行的是Servlet。JSP相当于草稿,真正提供HTTP服务的是Servlet。Servlet包含JSP。
Java Bean:传输数据,中间层的组件会将应用底层的状态信息封装成JavaBean集,这些JavaBean也被称为DTO(Data Transfer Object,数据传输对象),并将DTO集传到JSP页面,从而让JSP可以显示应用的底层状态。
替代:FreeMarker、Velocity充当表现层技术,可以替代JSP
2、Spring MVC及替代技术
Spring 3以前:简单的对传统MVC框架进行模仿。
Spring3之后:Spring MVC 一个脱胎换骨重生的MVC框架:
功能丰富而强大的注解;简单而强大的请求映射和参数绑定;基于AOP的异常处理机制;以ConversionService为中心的类型转换;基于JSR 303的声明式数据校验。
替代:目前Spring MVC是最优秀的Java Web MVC框架。
3、MyBatis及替代技术
传统的java应用访问数据库:JDBC,JDBC采用的是一种基于SQL的操作方式,这种操作方式和java语言的面向对象特征不太一致,所以java EE需要一种技术(ORM,Object Relation Mapping,对象关系映射)让java以面向对象的方式操作关系数据库。
两种开源、轻量级的ORM框架:MyBatis、Hibernate。
MyBatis:半自动框架,将SQL语言映射为对象集,也被称为SQL Mapping工具,SQL需要手动编写。出于性能考虑选择。
Hibernate:全自动框架,将普通的java对象(POJO)映射成持久化类,允许应用程序以面向对象的方式操作POJO,该框架负责将这种操作转换成底层的SQL操作。不需要手动编写SQL。
替代:TopLink、OJB替代Hibernate,资料少文档少,需要勇气。
4、Spring及替代技术
Spring没有太多新东西
1)抽象大量的java EE常用代码,将它们抽象成一个框架,通过使用Spring可以大幅度提高开发效率。
2)充满了各种设计模式的应用,如单例模式、工厂模式、抽象工厂模式、命令模式、职责链模式、代理模式等。
3)提供了一个设计优良的MVC框架:Spring MVC,使用Spring 可以直接使用Spring MVC框架;但是没有持久层框架,所以可以和各种持久层框架无缝贴合。
目前无较好的替代解决方案。
5、使用框架的好处
1)可维护性、复用
1.3 Tomcat的下载和安装
1、下载安装Tomcat
参考博客:
https://blog.csdn.net/weixin_39149333/article/details/124623579
tomcat 9
tar.gz
安装目录:/Users/huqiqi/Library/tomcat/bin
2、配置Tomcat环境变量:
修改文件:
huqiqi@hqqMAC ~ % vim ~/.bash_profile
在文件中增加一行
PATH=$PATH:/Users/huqiqi/Library/tomcat/bin
生效环境变量:
huqiqi@hqqMAC ~ % source ~/.bash_profile
3、启动Tomcat:
cd /Users/huqiqi/Library/tomcat/bin
huqiqi@hqqMAC bin % startup.sh
Using CATALINA_BASE: /Users/huqiqi/Library/tomcat
Using CATALINA_HOME: /Users/huqiqi/Library/tomcat
Using CATALINA_TMPDIR: /Users/huqiqi/Library/tomcat/temp
Using JRE_HOME: /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
Using CLASSPATH: /Users/huqiqi/Library/tomcat/bin/bootstrap.jar:/Users/huqiqi/Library/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
huqiqi@hqqMAC bin %
启动成功会提示如上图:Tomcat started。
打开网页输入:http://localhost:8080/
出现上图说明启动成功。
4、停止tomcat
shutdown.sh
5、Tomcat配置服务端口
/Users/huqiqi/Library/tomcat/conf/server.xml
修改端口为:8888
<!--Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000"
-->
<Connector port="8888" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000"
/>
再次启动:
报错:zsh:command not found
解决:
最新系统的macbook把zsh作为默认shell,而环境变量添加到了bash中,把 bash shell 中.bash_profile 全部环境变量加入zsh shell里就可以了。
1)复制
cat ~/.bash_profile
2)放到.zshrc
vim ~/.zshrc
:wq // 保存
source ~/.zshrc // 使生效
关闭terminal后,重启tomcat
再次访问:
http://localhost:8888/
6、列出web应用根目录下的所有页面
/Users/huqiqi/Library/tomcat/conf/web.xml
修改:listings参数的值为true
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
7、进入控制台
Manager App:点击后需要输入密码
配置文件增加角色、用户名和密码:
/Users/huqiqi/Library/tomcat/conf/tomcat-users.xml
<tomcat-users>
<!-- 增加一个角色,指定角色名-->
<role rolename="manager-gui"/>
<!-- 增加一个用户,指定用户名、密码、角色-->
<user username="manager" password="manager" roles="manager-gui"/>
</tomcat-users>
Manager App按照新增的用户名和密码登录后:
说明:
webapps路径是Web应用的存放位置,而Manager App控制台对应的web应用也放在该位置。
/Users/huqiqi/Library/tomcat/webapps/manager/WEB-INF/web.xml 放的是Manager应用的配置文件
普通开发者需要访问匹配:/html/、/status/的资源,所以为该用户分配一个manager-gui角色即可。
8、部署web应用
四种方式:
方式1:利用Tomcat的自动部署
将web应用复制到Tomcat的webapps目录下,系统会把该应用部署到Tomcat中。方式2:利用控制台部署
输入后点击部署,Tomcat的webapps目录下会多一个【Context路径】中写的文件夹,和【WAR文件或文件夹路径】中写的文件夹完全相同。本质还是方式1,利用tomcat的自动部署。
- 方式3:增加自定义的web部署文件
1)在conf下新建 Catalina/localhost 目录
2)该目录下新建一个名字任意的XML文件(该文件就是部署web应用的配置文件,作为web应用的虚拟路径)
举例:conf/Catalina/localhost/dd.xml,文件内容如下:
启动Tomcat,tomcat将会把 G:/publish/codes/01/aa 路径下的WebDome文件夹部署成Web应用。http://<server_address>:/dd
- 方式4:修改server.xml 文件部署web应用
修改conf下的server.xml 文件,会破坏tomcat的系统文件,不建议采用。
9、配置tomcat数据源
两种:
1)全局数据源:所有web应用都能访问,需要修改server.xml 文件,会破坏tomcat的系统文件,不建议采用。
2)局部数据源:只能在单个的web应用中访问
两种方式都需要提供特定数据库的JDBC驱动,需要将MySql的JDBC驱动程序复制到Tomcat的lib路径下。
操作:
i:查看mysql的版本:
huqiqi@hqqMAC ~ % mysqladmin -V
mysqladmin Ver 8.0.23 for macos10.15 on x86_64 (MySQL Community Server - GPL)
huqiqi@hqqMAC ~ %
版本为:8.0.23
ii:下载相同版本的mysql数据库的jdbc驱动jar包
iii:解压后将jar包复制到tomcat的lib路径下
/Users/huqiqi/Library/tomcat/lib/mysql-connector-java-8.0.23.jar
iv:给web应用增加局部数据源
修改 conf/Catalina/localhost/dd.xml文件:
以上就是数据源的各种信息。
1.6 Maven的安装与使用
Maven 是 Apache 软件基金会的一个开源项目,是一个优秀的项目构建工具,它用来帮助开发者管理项目中的 jar,以及 jar 之间的依赖关系、完成项目的编译、测试、打包和发布等工作。
1、maven的settings.xml文件
mac 电脑settings文件的位置并不在显示的地方:
/Users/huqiqi/.m2/settings.xml
打开.m2/对应的文件夹是没有settings.xml文件的
正确的路径
/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/conf/settings.xml
2、settings.xml文件配置
1)mirror -- 阿里云镜像,解决优化镜像下载地址问题
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
2)jdk 版本及工程编码,解决默认用jdk1.5 乱码问题
<profile>
<id>jdk18</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</profile>
3)localRepository -- 本地仓库地址,maven包管理地址
<localRepository>/Users/huqiqi/.m2/repository</localRepository>
3、maven的优点
1)原来的项目中需要的jar包必须手动“复制”、”粘贴” 到WEB-INF/lib 项目下,而借Maven,可以将jar包仅仅保存在“仓库”中,有需要使用的工程只需要“引用”这个文件,并不需要重复复制到工程中。
2)原来的项目中所需要的jar包都是提前下载好的,而Maven在联网状态下会自动下载所需要的jar包。首先在本地仓库中找,找不到就在网上进行下载。
3)原来的项目中一个jar包所依赖的其他jar包必须手动导进来,而Maven会自动将被依赖的jar包导进来。
4)原来的项目一个项目就是一个工程,而借助Maven可以将一个项目拆分成多个工程。
4、maven工程仓库官网
http://mvnrepository.com/
可以下载自己所需开发jar包
5、maven pom
POM(Project Object Model,项目对象模型)是 Maven 的基本组件,它是以 xml 文件的形式存放在项目的根目录下,名称为 pom.xml。
POM 中定义了项目的基本信息,用于描述项目如何构建、声明项目依赖等等。
当 Maven 执行一个任务时,它会先查找当前项目的 POM 文件,读取所需的配置信息,然后执行任务。在 POM 中可以设置如下配置:
- 项目依赖
- 插件
- 目标
- 构建时的配置文件
- 版本
- 开发者
- 邮件列表
在创建 POM 之前,首先要确定工程组(groupId),及其名称(artifactId)和版本,在仓库中这些属性是项目的唯一标识。一旦在 pom.xml 文件中配置了所依赖的 jar,Maven 会自动从构件仓库中下载相应的构件。
6、maven坐标
Maven 坐标一套规则,它规定:世界上任何一个构件都可以使用 Maven 坐标并作为其唯一标识,Maven 坐标包括 groupId、artifactId、version、packaging 等元素,只要用户提供了正确的坐标元素,Maven 就能找到对应的构件。
任何一个构件都必须明确定义自己的坐标,这是 Maven 的强制要求,任何构件都不能例外。我们在开发 Maven 项目时,也需要为其定义合适的坐标,只有定义了坐标,其他项目才能引用该项目生成的构件。
Maven 坐标主要由以下元素组成:
- groupId: 项目组 ID,定义当前 Maven 项目隶属的组织或公司,通常是唯一的。它的取值一般是项目所属公司或组织的网址或 URL 的反写,例如 net.biancheng.www。
- artifactId: 项目 ID,通常是项目的名称。
- version:版本。
- packaging:项目的打包方式,默认值为 jar。
以上 4 个元素中 groupId、artifactId 和 version 是必须定义的,packaging 是可选的。
7、maven仓库
本地仓库+远程仓库
当 Maven 根据坐标寻找构件时,它会首先查看本地仓库,若本地仓库存在此构件,则直接使用;若本地仓库不存在此构件,Maven 就会去远程仓库查找,若发现所需的构件后,则下载到本地仓库使用。如果本地仓库和远程仓库都没有所需的构件,则 Maven 就会报错。
第一章 JavaEE应用和开发环境的更多相关文章
- Java 学习笔记 第一章:Java语言开发环境搭建
第一章:Java语言开发环境搭建 第二章:常量.变量和数据类型 第三章:数据类型转换.运算符和方法入门 1.Java虚拟机——JVM JVM(Java Virtual Machine ):Java虚拟 ...
- 第一章 andriod studio 安装与环境搭建
原文 http://blog.csdn.net/zhanghefu/article/details/9286123 第一章 andriod studio 安装与环境搭建 一.Android Stu ...
- 第一节:ASP.NET开发环境配置
第一节:ASP.NET开发环境配置 什么是ASP.NET,学这个可以做什么,学习这些有什么内容? ASP.NET是微软公司推出的WEB开发技术. 2002年,推出第一个版本,先后推出ASP.NET2. ...
- 第二章:搭建Android开发环境
通过对本章节内容的阅读,了解了Android底层开发所需要的各种开发工具,以及在Linux环境下怎样搭建Android底层开发环境,在Linux系统上开发Android应用程序,需要安装Linux版本 ...
- Java第一天:安装搭建Java开发环境
Java是面向对象的语言.它是通过虚拟机的运行机制来实现“跨平台”的. 这里不多说其他的,进入正题先,学习任何语言前的第一步都是要先搭建好开发环境,Java开发环境搭建如下: 1.到官网 http:/ ...
- 第一章:起步(python环境搭建)
Python 环境搭建 学习python的第一步,就是要学习python开发环境的配置,在配置好python开发环境后,你需要再安装一款比较趁手的编辑器,事实上,python解释器本身就可以进行一些编 ...
- 第一篇博客 Python开发环境配置
本文主要介绍Windows7环境下安装并配置Anaconda+VSCode作为Python开发环境. 目录 Anaconda与包管理配 Anaconda安装 添加环境变量 Anaconda安装错误及解 ...
- openwrt教程 第一章 物联网&openwrt开发概述
1.1 我们的宗旨 互联网.移动互联网的时代已经过去,物联网的时代已经来临!2014年,是物联网元年,2016年,物联网将达到高潮!为了迎接该潮流,我们工作室(F403科技创意室:http://f40 ...
- 第一章 Java Web应用开发技术
Java Web应用开发是基于JavaEE(JavaEnterprise Edition)框架的,而JavaEE是建立在Java平台上的企业级应用解决方案.JavaEES框架提供的Web开发技术主要支 ...
- 第一章 Burp Suite 安装和环境配置
Burp Suite是一个集成化的渗透测试工具,它集合了多种渗透测试组件,使我们自动化地或手工地能更好的完成对web应用的渗透测试和攻击.在渗透测试中,我们使用Burp Suite将使得测试工作变得更 ...
随机推荐
- vs2022离线安装教程
因特殊需要,要离线安装vs2022的环境,完成配置后将安装过程记录. 第一步:下载visual Studio 引导程序以创建布局 在微软的官网下载合适的引导程序. 官网地址:创建基于网络的安装 - V ...
- 推荐一个react上拉加载更多插件:react-infinite-scroller
在开发网页和移动应用时,经常需要处理大量数据的展示和加载.如果数据量非常大,一次性全部加载可能会导致页面卡顿或崩溃.为了解决这个问题,我们可以使用无限滚动(Infinite Scroll)的技术.Re ...
- idea如何显示出分支名
如图所示 配置修改 idea安装目录下bin/idea.properties文件,新增2行配置 project.tree.structure.show.url=false ide.tree.horiz ...
- Redis系列内容完整版
@ 目录 Redis系列之_Redis介绍安装配置 第一章 redis初识 1.1 Redis是什么 1.2 Redis特性(8个) 1.3 Redis单机安装 1.3.1下载安装 1.3.2三种启动 ...
- OKR 是什么?
OKR OKR 是什么? OKR(Objectives and Key Results)目标与关键结果管理法,起源于英特尔,后在谷歌发扬光大. OKR 是一套协助组织进行目标管理的工具和方法,旨在促进 ...
- Tarjan强连通分量详解
1.简介: 在阅读下列内容之前,请务必了解 图论相关概念 中的基础部分. 强连通的定义是:有向图 G 强连通是指,G 中任意两个结点连通. 强连通分量(Strongly Connected Compo ...
- nfls10.1
T1 大水题,用位运算更加便捷求解. T2 看出来有环了,但是没往基环树上想,寄. 暴力分,有部分分是基础树,可以跑一遍深搜,根节点的选择是 k 种颜色,剩下的是 k - 1 种颜色.还有暴力是可以二 ...
- 一场3天前的cf
啊 这次的cf其实水的(指前4题) 题面就不给了awaT1其实就是一个贪心,其实手模一下就好了.可以发现,先让小的那个变大,然后在后面一直让小的加上大的统计一下次数就是答案了.因为如果是这样算的话,两 ...
- 使用go语言开发hive导出工具
前言 新版 hive 提供了 beeline 工具,可以执行SQL并导出数据,不过操作还是有点复杂的,团队里有些同学不会Linux的基本操作,所以我花了亿点点时间写了个交互式的命令行工具方便使用. 效 ...
- 数据结构与算法 | 深搜(DFS)与广搜(BFS)
深搜(DFS)与广搜(BFS) 在查找二叉树某个节点时,如果把二叉树所有节点理理解为解空间,待找到那个节点理解为满足特定条件的解,对此解答可以抽象描述为: 在解空间中搜索满足特定条件的解,这其实就是搜 ...