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包

https://cloud.tencent.com/developer/article/2089251?from=15425&areaSource=102001.1&traceId=PZFuqM1DGNNYtJkCywMDB

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应用和开发环境的更多相关文章

  1. Java 学习笔记 第一章:Java语言开发环境搭建

    第一章:Java语言开发环境搭建 第二章:常量.变量和数据类型 第三章:数据类型转换.运算符和方法入门 1.Java虚拟机——JVM JVM(Java Virtual Machine ):Java虚拟 ...

  2. 第一章 andriod studio 安装与环境搭建

    原文 http://blog.csdn.net/zhanghefu/article/details/9286123 第一章   andriod studio 安装与环境搭建 一.Android Stu ...

  3. 第一节:ASP.NET开发环境配置

    第一节:ASP.NET开发环境配置 什么是ASP.NET,学这个可以做什么,学习这些有什么内容? ASP.NET是微软公司推出的WEB开发技术. 2002年,推出第一个版本,先后推出ASP.NET2. ...

  4. 第二章:搭建Android开发环境

    通过对本章节内容的阅读,了解了Android底层开发所需要的各种开发工具,以及在Linux环境下怎样搭建Android底层开发环境,在Linux系统上开发Android应用程序,需要安装Linux版本 ...

  5. Java第一天:安装搭建Java开发环境

    Java是面向对象的语言.它是通过虚拟机的运行机制来实现“跨平台”的. 这里不多说其他的,进入正题先,学习任何语言前的第一步都是要先搭建好开发环境,Java开发环境搭建如下: 1.到官网 http:/ ...

  6. 第一章:起步(python环境搭建)

    Python 环境搭建 学习python的第一步,就是要学习python开发环境的配置,在配置好python开发环境后,你需要再安装一款比较趁手的编辑器,事实上,python解释器本身就可以进行一些编 ...

  7. 第一篇博客 Python开发环境配置

    本文主要介绍Windows7环境下安装并配置Anaconda+VSCode作为Python开发环境. 目录 Anaconda与包管理配 Anaconda安装 添加环境变量 Anaconda安装错误及解 ...

  8. openwrt教程 第一章 物联网&amp;openwrt开发概述

    1.1 我们的宗旨 互联网.移动互联网的时代已经过去,物联网的时代已经来临!2014年,是物联网元年,2016年,物联网将达到高潮!为了迎接该潮流,我们工作室(F403科技创意室:http://f40 ...

  9. 第一章 Java Web应用开发技术

    Java Web应用开发是基于JavaEE(JavaEnterprise Edition)框架的,而JavaEE是建立在Java平台上的企业级应用解决方案.JavaEES框架提供的Web开发技术主要支 ...

  10. 第一章 Burp Suite 安装和环境配置

    Burp Suite是一个集成化的渗透测试工具,它集合了多种渗透测试组件,使我们自动化地或手工地能更好的完成对web应用的渗透测试和攻击.在渗透测试中,我们使用Burp Suite将使得测试工作变得更 ...

随机推荐

  1. AI绘画| 迪士尼风格|可爱头像【附Midjourney提示词】

    Midjourney案例分享 图片预览 迪士尼风格|可爱头像 高清原图及关键词Prompt已经放在文末网盘,需要的自取 在数字艺术的新时代,人工智能绘画已经迅速崭露头角.作为最先进的技术之一,AI绘画 ...

  2. AI绘画:Stable Diffusion 终极炼丹宝典:从入门到精通

    本文收集于教程合集:AIGC从入门到精通教程汇总 我是小梦,以浅显易懂的方式,与大家分享那些实实在在可行之宝藏. 历经耗时数十个小时,总算将这份Stable Diffusion的使用教程整理妥当. 从 ...

  3. ETL之apache hop系列4-hop开发数据增量同步功能

    ETL增量数据抽取CDC 概念:Change Data Capture,变化的数据捕获,也称:[增量数据抽取](名词解释) CDC是一种实现数据的增量抽取解决方案,是实现[ETL整体解决方案]中的一项 ...

  4. Empowering Long-tail Item Recommendation through Cross Decoupling Network (CDN)

    Empowering Long-tail Item Recommendation through Cross Decoupling Network (CDN) 来源: KDD'2023 Google ...

  5. 利用接口测试框架实现web状态的监控

    之前,我们已经说明了如何实现一个我们的接口测试框架RATF,当然这个框架不止可以用于管理我们的接口测试代码,我们还可以用他来对我们的web进行简单粗暴的监控. 原理: 1. 通过使用配置文件,对要监控 ...

  6. jquery实现表格导出Excel

    使用jQuery,jszip.js,FileSaver.js,excel-gen.js插件直接将网页中的table表格导出到本地Excel文件,而不需要经过后台. 导出结果: 实现步骤: 1.进入相关 ...

  7. EXE一机一码打包加密大师1.4.0更新-支持导出注册机

    EXE一机一码打包加密大师可以对EXE文件进行加密处理,可以让EXE支持一机一码功能,也可以支持静态打开密码功能, 方便开发人员想用户收费. 详细软件使用说明可以查看下面的说明文档: EXE一机一码打 ...

  8. js原生 toggle函数编写

    工作中遇到了需要动态切换slide下拉框展示与隐藏,同时需要切换元素上附加的样式,以下脚本为实现此功能的实践. //元素点击时切换隐藏与展示逻辑 var slidsDownShow = documen ...

  9. 【matplotlib基础】--样式表

    Matplotlib库 由于诞生的比较早,所以其默认的显示样式很难符合现在的审美,这也是它经常为人诟病的地方. 不过,经过版本更迭之后,现在 Matplotlib 已经内置了很多样式表,通过使用不同的 ...

  10. 关于关闭Sublime Text自动更新提示

    Sublime Text默认提示自动更新,实在让人烦不胜烦,那么有没有办法解决嘞,那当然是有的,下面就教你如何关闭Sublime Text自动更新提示 首先注册,不注册的话,一切操作都没有用:(注册码 ...