第一章 JavaEE应用和开发环境

发布时间 2023-06-06 18:59:07作者: hqq的进阶日记

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/
image
出现上图说明启动成功。

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
image

再次访问:
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按照新增的用户名和密码登录后:
image

说明:
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 就会报错。