JavaWeb入门详解(第三篇)web服务器之Tomcat简介
Posted 穆瑾轩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb入门详解(第三篇)web服务器之Tomcat简介相关的知识,希望对你有一定的参考价值。
JavaWeb入门详解(第三篇)web服务器之Tomcat简介
1、web服务器概述
1.1、什么是服务器
服务器:就是安装了服务器软件的计算机。
服务器软件:接收用户请求、处理请求以及响应请求的软件。而web服务器,可以部署web项目,让用户通过浏览器来访问这些项目。
1.2、常见的web服务器
webLogic:oracle公司的,大型的javaEE服务器,支持有所的javaEE规范,收费的。
webSphere:IBM公司的,大型的javaEE服务器,支持有所的javaEE规范,收费的。
JBOSS:JBOSS公司的,大型的javaEE服务器,支持有所的javaEE规范,收费的。
Tomcat:Apache基金组织,中小型的javaEE服务器,支持部分javaEE规范,全面支持serlvet/jsp规范,开源的、免费的。
1.3、什么是javaWeb
Internet上供外界访问的Web资源分为:
静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变。
动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。
静态web资源开发技术:Html、css、img
常用动态web资源开发技术:JSP+Servlet、ASP、php等,在Java中,动态web资源开发技术统称为Javaweb。
在小型的应用系统或者有特殊需要的系统中,可以使用一个免费的Web服务器:Tomcat,该服务器支持全部JSP以及Servlet规范。Tomcat三大功能:
1)web服务器(底层是Socket的一个程序);
2)JSP容器
3)servlet容器
2、Tomcat目录结构
目录/文件 | 说明 |
---|---|
bin | 启动和关闭tomcat的bat文件。startup.bat/shutdown.bat、startup.sh/shutdown.sh用于windows和linux下的启停脚本。 |
conf | 配置文件: Catalina:用于存储针对每个虚拟机的Context配置 context.xml:定义所有web应用均需加载的context配置,如果web应用指定了自己的context.xml,该文件将被覆盖 catalina.properties:Tomcat的环境变量配置 logging.properties:Tomcat的日志配置 server.xml:服务器的核心配置,该文件用于配置和 server 相关的信息, 比如 tomcat启动端口后,配置Host, 配置Context 即web应用 web.xml:该文件配置所有web应用(web应用就相当于是一个 web站点)描述文件,如servlet。 tomcat-users.xml:该文件用户配置tomcat 的用户密码 和 权限。 如:管理员权限配置 <role rolename="manager"/> <user username="admin" password="admin" roles="manager"/> |
lib | 该目录放置运行tomcat 运行需要的jar包 |
logs | 存放日志, 当我们需要去查看日志的时候,很有用!,当我们启动tomcat错误时候,可以查询信息. |
webapps | 该目录下,放置我们的web应用(web 站点), 比如:建立 web1 目录 下面放置我们的html 文件 jsp 文件..图片... 则 web1就被当做一个web应用管理起来(☞ 特别说明tomcat 6.0 以后支持 tomcat 5 版本 还有别的设置) |
work | 该目录用于存放jsp被访问后 生成的对应的 server文件 和.class文件 |
3、web应用组织结构和web.xml文件的作用
web.xml文件为web应用的配置文件,它必须放在web应用目录/WEB-INF目录下 。
4、配置Tomcat
4.1、配置JDK
配置JDK运行环境JAVA_HOME变量配置。Tomcat会通过JAVA_HOME找到所需要的JDK。
注:不同版本的Tomcat对JDK的依赖不同,可以在DOS窗口中使用命令运行。如果版本不匹配可能会出现各种问题甚至无法启动。我使用tomcat:apache-tomcat-9.0.41、JDK:1.8.0_181。
例如:我的环境变量如果配置JDK1.6
就会出现: Unsupported major.minor version 52.0,不受支持的主要版本52.0,也就是说JDK低版本不兼容高版本。
Tomcat 10.0.x supported Java Versions 8 and later JDK编译器内部版本号:J2SE 8 = 52.0,
Tomcat 9.0.x supported Java Versions 8 and later JDK编译器内部版本号:J2SE 8 = 52.0,
Tomcat 8.5.x supported Java Versions 7 and later JDK编译器内部版本号:J2SE 7 = 51.0,
Tomcat 8.0.x supported Java Versions 7 and later JDK编译器内部版本号:J2SE 7 = 51.0,
Tomcat 7.0.x supported Java Versions 6 and later JDK编译器内部版本号:J2SE 7 = 50.0,
Tomcat 6.0.x supported Java Versions 5 and later JDK编译器内部版本号:J2SE 7 = 49.0,
Tomcat 5.5.x supported Java Versions 1.4 and later JDK编译器内部版本号:J2SE 7 = 48.0,
Tomcat 4.1.x supported Java Versions 1.3 and later JDK编译器内部版本号:J2SE 7 = 47.0,
Tomcat 3.3.x supported Java Versions 1.1 and later JDK编译器内部版本号:J2SE 7 = 45.0,
如果我不想修改我本地的JDK环境变量,我们可以修改Tomcat的配置,指定JDK版本:
1)在tomcat的安装目录的bin目录下找到:setclasspath.sh
2)加入如下配置即可:
set JAVA_HOME=D:\\program files\\Java\\jdk1.8.0_181
set JRE_HOME=D:\\program files\\Java\\jdk1.8.0_181\\jre
注:启动tomcat可以通过运行bin下的startup.bat,startup.bat会调用catalina.bat文件,而catalina.bat会调用setclasspath.bat文件来获取JAVA_HOME和JRE_HOME这两个环境变量的值
4.2、在IDE中配置Tomcat服务器
菜单Window下选择Preferences,找到Server,选择Runtime Environments。
配置完成后:
然后在IDE中启动Tomcat即可。我的项目的工作目录是servlet,项目的部署目录我们可以在D:\\servlet.metadata.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps目录下找到,如果访问不了http://localhost:8080/,可以将Tomcat目录下的ROOT替换掉这个。
4.3、直接在Tomcat安装目录中使用
我们将D:\\servlet.metadata.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps下的JspWeb项目直接拷贝到Tomcat的webapps目录下,然后启动(startup.bat):
访问项目:
5、Tomcat整体架构分析
Tomcat本质上就是一款servlet容器,Catalina(Servlet容器)是Tomcat的核心,其他模块都是为Catalina提供支撑的。比如:通过Coyote模块提供链接通信,Jasper 模块提供JSP引擎,Naming提供JDNI服务,Juli提供日志服务。
注:JNDI(Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。
Catalina负责管理Server,而Server代表整个Tomcat容器。Server下面有多个Services,每个服务都包含着多个连接器Connector(Coyote实现)和一个容器组件Container。在Tomcat启动的时候,就会创建一个Catalina的实例。
我们也可以通过Tomcat的配置server.xml文件来窥测Tomcat的设计。当然有时间可以去研究下源码。
<?xml version="1.0" encoding="UTF-8"?>
<!--Server代表整个整个Tomcat容器。只有一个。一个Server元素中可以有一个或多个Service元素。
shutdown属性表示关闭Server的指令
port属性表示Server接收shutdown指令的端口号
Server的主要任务,就是提供一个接口让客户端能够访问到这个Service
-->
<Server port="8005" shutdown="SHUTDOWN">
<!--监听器:
VersionLoggerListener:监听器记录Tomcat、Java和操作系统的信息;
AprLifecycleListener:检查APR库,如果存在则加载。
JasperListener:在Web应用启动之前初始化Jasper,Jasper是JSP引擎,把JVM不认识的JSP文件解析成java文件,然后编译成class文件供JVM使用。
JreMemoryLeakPreventionListener:与类加载器导致的内存泄露有关。
GlobalResourcesLifecycleListener:初始化< GlobalNamingResources>标签中定义的全局JNDI资源;如果没有该监听器,任何全局资源都不能使用。
ThreadLocalLeakPreventionListener:当Web应用因thread-local导致的内存泄露而要停止时,该监听器会触发线程池中线程的更新。
-->
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<!--Service的作用,是在Connector和Engine外面包了一层,把它们组装在一起,对外提供服务。一个Service可以包含多个Connector,但是只能包含一个Engine;
Server中包含一个名称为“Catalina”的Service
Tomcat可以提供多个Service,不同的Service监听不同的端口。
配置多个Service服务,可以实现通过不同的端口号来访问同一台机器上部署的不同Web应用。可以在:Service下面在加<Service name="Catalina2"></Service>
-->
<Service name="Catalina">
<!-- Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;
然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine。
通过配置Connector,可以控制请求Service的协议及端口号。
客户端可以通过8080端口号使用http协议访问Tomcat。protocol属性规定了请求的协议,port规定了请求的端口号,redirectPort表示当强制要求https而请求是http时,重定向至端口号为8443的Connector,connectionTimeout表示连接的超时时间。
-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!--
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
redirectPort="8443" />
-->
<!-- Engine组件在Service组件中有且只有一个;Engine是Service组件中的请求处理组件。Engine组件从一个或多个Connector中接收请求并处理,并将完成的响应返回给Connector,最终传递给客户端。
-->
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<!--Host是Engine的子容器。Engine组件中可以内嵌1个或多个Host组件,每个Host组件代表Engine中的一个虚拟主机。Host组件至少有一个,且其中一个的name必须与Engine组件的defaultHost属性相匹配。
Host组件代表的虚拟主机,对应了服务器中一个网络名实体(IP或域名)。
name属性指定虚拟主机的主机名
unpackWARs指定了是否将代表Web应用的WAR文件解压;如果为true,通过解压后的文件结构运行该Web应用,如果为false,直接使用WAR文件运行Web应用。
-->
<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>
</Engine>
</Service>
</Server>
以上是关于JavaWeb入门详解(第三篇)web服务器之Tomcat简介的主要内容,如果未能解决你的问题,请参考以下文章
SaltStack 入门到精通第三篇:Salt-Minion配置文件详解
JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)Spring整合web开发整合Junit4测试