一、JavaEE简介
1.1 什么是JavaEE
JavaEE(Java Enterprise Edition),Java企业版,是一个用于企业级web开发平台,它是一组Specification。最早由Sun公司定制并发布,后由Oracle负责维护。在JavaEE平台规范了在开发企业级web应用中的技术标准。
在JavaEE平台共包含了13个技术规范(随着JavaEE版本的变化所包含的技术点的数量会有增多)。它们分别是:JDBC、JNDI、EJB、RMI、Servlet、JSP、XML、JMS、Java IDL、JPA、JTA、JavaMail和JAF。
1.2 JavaEE缺点
- JavaEE技术使用时过于复杂了。
- JavaEE技术使用慢,效率过低。
- JavaEE技术较重,很多技术需要依赖服务器中间件。
1.3 开源框架优点
- 高效:开发变得简单,快速,并且有效。
- 成本:很多框架都是免费,并且开发人员编写代码更快,所以客户成本自然 更低。
- 支持:框架有文档支持,团队支持,或者大的社区支持,能迅速帮你解决问 题。
1.4 JavaEE版本
年份 | 版本 | 对JDK的支持 | Servlet版本 | JSP版本 |
1999年12月 | 1.2 | 1.1 and later | 2.2 | 1.1 |
2001年9月 | 1.3 | 1.3 and later | 2.3 | 1.2 |
2003年11月 | 1.4 | 1.4 and later | 2.4 | 2.0 |
2006年5月 | 5.0 | 5 and later | 2.5 | 2.1 |
2009年10月 | 6.0 | 6 and later | 3.0 | 2.2 |
2013年6月 | 7.0 | 7 and later | 3.1 | 2.3 |
2017年8月 | 8.0 | 8 and later | 4.0 | 2.3 |
注意
2017 年 8 月,Java EE 已经正式更名为 Jakarta EE(雅加达)。
二、服务器
2.1 服务器简介
- 硬件服务器的构成与一般的PC比较相似,但是服务器在稳定性、安全性、性能等方面都要求更高,因为CPU、芯片组、内存、磁盘系统、网络等硬件和普通PC有所不同。
- 软件服务器(英文名称Server),也称伺服器。指一个管理资源并为用户提供服务的计算机软件,通常分为文件服务器、数据库服务器和应用程序服务器。运行以上软件的计算机或计算机系统也被称为服务器。
2.2 服务器分类
2.2.1 JavaEE应用服务器(JavaEE Application Server)
应用服务器是Java EE规范的具体实现, 可以执行/驱动基于JavaEE平台开发的web项目。绝大部分的应用服务器都是付费产品。
常见的应用服务:
Weblogic(BEA Oracle 收费)
Webshpere(IBM 收费)
JBoss(RedHad 收费)
Geronimo(Apache 免费)
2.2.2 Web容器(Web Server)
只实现了JavaEE平台下部分技术标准,如Servlet,Jsp,JNDI,JavaMail。Web容器是开源免费的。
Tomcat(Apache 开源免费)
Jetty(Jetty 开源免费)
三、Tomcat
3.1 Tomcat简介
Tomcat服务器是Apache的一个开源免费的Web容器。它实现了JavaEE平台下部分技术规范,属于轻量级应用服务器。
Tomcat版本 | JDK版本 | Servlet版本 | JSP版本 |
10.0.X | 8 and later | 5.0 | 3.0 |
9.0.x | 8 and later | 4.0 | 2.3 |
8.0.x | 7 and later | 3.1 | 2.3 |
7.0.x | 6 and later | 3.0 | 2.2 |
6.0.x | 5 and later | 2.5 | 2.1 |
Tomcat作用
可以在Tomcat中运行我们所编写的Servlet、JSP。
3.2 Tomcat下载与安装
下载地址:Apache Tomcat® - Welcome!
配置环境变量
Tomcat是用Java语言开发的Web容器,所以在使用Tomcat时需要在操作系统中正确配置环境变量。
JAVA_HOME:C:\Program Files\Java\jdk1.8.0_171
PATH:%JAVA_HOME%\bin;
CLASS_PATH:%JAVA_HOME%\lib; (这个一定要补充上,要不然会出现服务器一启动就闪退的情况)
3.3 Tomcat目录结构与介绍
bin
bin目录主要是用来存放tomcat的命令文件,主要有两大类,一类是以.sh结尾的(linux命令),另一类是以.bat结尾的(windows命令)。
conf
conf目录主要是用来存放tomcat的一些配置文件。
lib
lib目录主要用来存放tomcat运行需要加载的jar包。
logs
logs目录用来存放tomcat在运行过程中产生的日志文件。
temp
temp目录用户存放tomcat在运行过程中产生的临时文件。(清空不会对tomcat运行带来影响)
webapps
webapps目录用来存放应用程序,当tomcat启动时会去加载webapps目录下的应用程序。可以以文件夹、war包的形式发布应用。
work
work目录用来存放tomcat在运行时的编译后文件,例如JSP编译后的文件。
3.4 Tomcat的启动与关闭
Tomcat的启动与关闭需要执行bin目录中的命令脚本。
3.4.1 Tomcat启动
- 方式一
运行startup.bat文件。 - 方式二
catlina.bat start
其中catlina.bat是命令文件,start是启动Tomcat参数。
3.4.2 Tomcat关闭
- 方式一
运行shutdown.bat文件。 - 方式二
catlina.bat stop
其中catlina.bat是命令文件,stop是关闭Tomcat参数。 - 方式三
直接关闭掉控制台窗口。
3.4.3 访问Tomcat
访问Tomcat的URL格式:
http://ip:port
访问本机Tomcat的URL格式:
http://localhost:8080
3.5 Tomcat配置文件介绍
Tomcat 的配置文件由4个xml组成,分别是 context.xml、web.xml、server.xml、tomcat-users.xml。每个文件都有自己的功能与配置方法。
context.xml
context.xml 是 Tomcat 公用的环境配置。 Tomcat 服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器 。(其他的文件只要是修改了就要重新启动tomcat)
web.xml
Web应用程序描述文件,都是关于是Web应用程序的配置文件。所有Web应用的 web.xml 文件的父文件。
server.xml
是 tomcat 服务器的核心配置文件,server.xml的每一个元素都对应了 tomcat中的一个组件,通过对xml中元素的配置,实现对 tomcat中的各个组件和端口的配置。
tomcat-users.xml
配置访问Tomcat的用户以及角色的配置文件。
3.6 解决控制台乱码以及修改监听端口
解决控制台乱码
控制台产生乱码的原因是在Tomcat在输出日志中使用的是UTF-8编码,而我们中文的Windows操作系统使用的是GBK编码。由于编码格式不统一,所以出现了乱码。
解决方式:修改conf目录中的logging.properties文件重新指定的编码方式。注意ctrl+s保存。
java.util.logging.ConsoleHandler.encoding = GBK
修改Tomcat监听端口
Tomcat默认监听端口为8080。可以通过修改server.xml文件中的port来改变Tomcat的监听端口。
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
3.7 配置TomcatManager
什么是Tomcat Manager
Tomcat Manager是Tomcat自带的、用于对Tomcat自身以及部署在Tomcat上的应用进行管理的web应用。默认情况下,Tomcat Manager是处于禁用状态的。准确的说,Tomcat Manager需要以用户角色进行登录并授权才能使用相应的功能,不过Tomcat并没有配置任何默认的用户,因此我们需要先进行用户配置后才能使用Tomcat Manager。
配置Tomcat Manager的访问用户
Tomcat Manager中没有默认用户,我们需要在tomcat-users.xml文件配置。Tomcat Manager的用户配置需要配置两个部分:角色配置、用户名及密码配置。
Tomcat Manager中的角色分类
- manager-gui角色:
允许访问HTML GUI和状态页面(即URL路径为/manager/html/*) - manager-script角色:
允许远程访问文本界面和状态页面(即URL路径为/manager/text/*) - manager-jmx角色:
允许访问JMX代理和状态页面(即URL路径为/manager/jmxproxy/*) - manager- status角色:
仅允许访问状态页面(即URL路径为/manager/status/*)
配置用户及角色
修改tomcat-users.xml
<role rolename ="manager-gui"/> <user username ="tomcat" password ="tomcat" roles="manager-gui" />
解除访问限制
进入Tomcat的webapps目录下,打开webapps/manager/META-INF/context.xml文件,修改下面这段配置
<context antiresourcelocking="false" privileged="true"> <!-- 把下面这段注释掉 --> <!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> --> </context>
3.8 Tomcat工作原理
Tomcat是一个能够处理请求并产生响应的应用程序。Tomcat实现了JavaEE平台下的一些技术规范(比如Servlet、JSP技术规范),所以我们可以在Tomcat中运行我们所编写的Servlet、JSP。
3.9 Tomcat组件
conf/server.xml配置文件
<?xml version="1.0" encoding="UTF-8"?> <Server port="8005" shutdown="SHUTDOWN"> <Service name="Catalina"> <!-- 连接器监听端口是 8080,默认通讯协议是 HTTP/1.1 --> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <!-- 名字为 Catalina 的引擎,其默认的虚拟主机是 localhost --> <Engine name="Catalina" defaultHost="localhost"> <!-- 名字为 localhost 的虚拟主机,其目录是 webapps--> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> </Host> </Engine> </Service> </Server>
3.9.1 Server组件
启动一个server实例(也就是启动一个tomcat ,即一个JVM进程),它监听在8005端口以接收shutdown命令。Server的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个Server实例,必须配置它们使用不同的端口。
<Server port="8005" shutdown="SHUTDOWN">
port: 接收shutdown指令的端口,默认为8005;
shutdown:发往此Server用于实现关闭tomcat实例的命令字符串,默认为SHUTDOWN;
也就是说,tomcat(或者说是server组件)一启动会监听两个端口一个是8080用于监听客户端请求,一个是8005监听SHUTDOWN命令关闭tomcat。
使用端口关闭存在远程关闭的风险,可以禁用8005端口,此时只能通过关闭敞口来关闭tomcat。当然这是运维的活!
<Server port="-1" shutdown="SHUTDOWN">
3.9.2 Service组件
Service主要用于关联一个引擎和与此引擎相关的连接器,每个连接器通过一个特定的端口和协议接收请求并将其转发至关联的引擎进行处理。困此,Service要包含一个引擎、一个或多个连接器。
<Service name="Catalina">
name:此服务的名称,默认为Catalina;
3.9.3 Connector组件
支持处理不同请求的组件,一个引擎可以有一个或多个连接器,以适应多种请求方式。默认只开启了处理Http协议的连接器。如果需要使用其他协议,需要在Tomcat中配置该协议的连接器。
在Tomcat中连接器类型通常有4种:
- HTTP连接器
- SSL连接器(也就是https协议链接器)
- AJP 1.3连接器
- proxy连接器
<Connector port="8888" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
port:监听的端口
protocol:连接器使用的协议,默认为HTTP/1.1;
connectionTimeout:等待客户端发送请求的超时时间,单位为毫秒;
redirectPort:如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的端口;
maxThreads:支持的最大并发连接数,默认为200个;
3.9.4 Engine组件
Engine是Servlet处理器的一个实例,即servlet引擎,定义在server.xml中的Service标签中。Engine需要defaultHost属性来为其定义一个接收所有发往非明确定义虚拟主机的请求的Host组件。(Engine就好比是汽车的发动机,Host就相当于是发动机中的刚缸体,里面存放的就是web资源)
name:Engine组件的名称;
defaultHost:Tomcat支持基于FQDN(Fully Qualified Domain Name 全限定域名)的虚拟主机,这些虚拟主机可以通过在Engine容器中定义多个不同的Host组件来实现;但如果此引擎的连接器收到一个发往非明确定义虚拟主机的请求时则需要将此请求发往一个默认的虚拟主机进行处理(也就是当请求的域名无法找到对应的虚拟主机的话,会默认匹配域名为localhost的虚拟主机。),因此,在Engine中定义的多个虚拟主机的主机名称中至少要有一个跟defaultHost定义的主机名称同名;
3.9.5 Host组件
虚拟主机(英语:virtual hosting)或称共享主机(shared web hosting),又称虚拟服务器,是一种在单一主机或主机群上,实现多网域服务的方法,可以运行多个网站或服务的技术。
Host组件位于Engine容器中用于接收请求并进行相应处理的虚拟主机。通过该容器可以运行Servlet或者JSP来处理请求。
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
name:虚拟主机的名称,Tomcat通过在请求URL中的域名与name中的值匹配,用于查找能够处理该请求的虚拟主机。如果未找到则交给在Engine中defaultHost指定的主机处理;
appBase:此Host的webapps目录,即指定存放web应用程序的目录的路径;
autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true;
unpackWARs:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true;(纯Java项目可以打包为jar包,web项目可以打包为war包)
3.9.6 Context组件
Context是Host的子组件,代表指定一个Web应用,它运行在某个指定的虚拟主机(Host)上;每个Web应用都是一个WAR文件,或文件的目录。
<Context path="/test" docBase="D:\bjsxt\itbaizhan.war" />
path:context path既浏览器访问项目的访问路径。
docBase:相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;
如果将web项目部署到webapps目录下的话不需要使用context组件,但是要将项目部署到其他的地方的话,需要使用context组件告诉host组件项目的位置。
3.10 配置虚拟主机(Host)
修改server.xml添加Host配置
<!-- 默认的虚拟主机 --> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> <!-- 虚拟主机1--> <Host name="test1" appBase="webapps1" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> <!-- 虚拟主机2--> <Host name="test2" appBase="webapps2" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host>
修改windows的Host文件
修改Windows系统中的Host文件做域名与IP的绑定。
Host文件位置
C:\Windows\System32\drivers\etc
修改内容
127.0.0.1 test1 127.0.0.1 test2
3.11 配置Context
通过contex组件可以将web应用部署到其他目录中,而不是webapps下。
创建index.html页面。
将index.html资源部署到d盘的demo目录中。
通过test:8888/web/index.html访问虚拟主机,并访问index.html (表示我要访问test虚拟主机中的web文件下的index)。
配置server.xml文件
<Host name="test" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context path="/web" docBase="d:/demo"/> </Host>
name="test" 表示主机的名称叫test
path="/web" 表示资源的访问路径
docBase="d:/demo" 表示资源的位置
修改windows的Host文件
修改Windows系统中的Host文件做域名与IP的绑定。
Host文件位置
C:\Windows\System32\drivers\etc、
修改内容
127.0.0.1 test