Tomcat(1)基础入门

354 阅读9分钟

1. 基本概念

概念: Tomcat是Apache软件基金会的Jakarta项目中的一个核心项目产品,是一个开源的,运行时占用的系统资源很小的轻量级Web容器:

  • 目录结构:
    • bin:存放windows或Linux平台上启动和关闭Tomcat的脚本文件。
    • conf:存放Tomcat容器的各种全局配置文件,其中最重要的是 server.xmlweb.xml
    • lib:存放Tomcat执行时的一些jar包文件。
    • logs:存放Tomcat执行时的日志文件。
    • temp:存放Tomcat的临时文件。
    • webapps:Tomcat的主要Web发布目录。
    • work:存放JSP编译后产生的class文件。
  • 启动Tomcat:点击 bin/startup.bat 文件:
    • tomcat9版本启动日志会有中文乱码问题,建议将 conf\logging.properties 中的 java.util.logging.ConsoleHandler.encoding 修改为 GBK,兼容控制台。
  • 关闭Tomcat:点击 bin/shutdown.bat 文件。
  • 端口占用问题:使用CMD命令行解决:
    • netstat -ano | findstr 8080:查看占用 8080 端口的进程的PID(最后一列)。
    • tasklist | findstr PID:通过PID查询进程信息。
    • taskkill /f /t /pid PID:通过PID强制关闭进程(/f),及其子进程(/t)。

服务器其实是web容器和EJB程序的总称,但Tomcat没有EJB,所以只能勉强算一个服务器。

2. IDEA整合

流程: 利用IDEA创建动态WEB项目并整合Tomcat:

  1. 点击 File - New - New Project - Java Enterprise 创建企业版Java项目。
  2. Application Server 后方点击 New - Tomcat Server 添加 Tomcat
  3. 勾选 Web Application(4.0),填写工程名和位置,点击 ok 完成WEB项目创建。
  4. index.jsp 替换成 index.html,填入 Hello World... 文本。
  5. 点击右上角 Edit Configurations...,选择 Tomcat Server/Tomcat
    • 若没有,点击 + - Tomcat Server - Local 进行添加。
  6. 切换到 Deployment 选项卡,点击 + - Artifact... 部署项目。
    • 建议在底部 Application context 中修改项目发布名,开头的 / 不能省略。
  7. 切换到 Server 选项卡进行Tomcat配置:
    • 勾选 After launch:Tomcat启动后自动以指定浏览器访问指定的URL。
    • 勾选 with JavaScript debugger:浏览器自动使用开发者模式进行访问。
    • 选择 On "Update" actionUpdate classes and resources 以开启热部署。
    • 选择 On frame deactivationUpdate classes and resources 以开启热部署。
  8. 点击 ok,完成部署,使用debug方式启动Tomcat。

热部署生效的前提是使用Debug方式启动Tomcat,且项目部署的方式是 Artifact...

源码: /tomcat9/

  • web: index.html

3. 配置文件

概念: 配置文件的意义,是组织各个业务层模块,conf/server.xml 是Tomcat最重要的配置文件,其中的每一个标签都对应了Tomcat中的一个组件,负责对Tomcat中各个组件的控制:

  • <Server>:配置文件的根标签,代表整个Tomcat容器,负责维护子标签 <Service> 的生命周期,只能存在一个:
    • port="8005":设置 <Server> 的端口号为 8005,若设置为 -1 表示禁用。
    • shutdown="SHUTDOWN":表示允许通过 shutdown 8005 指令来关闭Tomcat容器。
  • <Listener><Server> 的子标签,负责监听Tomcat生命周期事件,可以存在多个,不允许内嵌其他组件:
    • className="...VersionLoggerListener":Tomcat启动时,记录启动日志信息,该监听器必须是第一个。
    • className="...AprLifecycleListener":Tomcat启动时,检查APR库(Apache可移植运行库),若存在则加载。
    • className="...JreMemoryLeakPreventionListener":与类加载器导致的内存泄露有关。
    • className="...GlobalResourcesLifecycleListener":初始化 <GlobalNamingResources> 标签中定义的全局JNDI资源。
    • className="...ThreadLocalLeakPreventionListener":当Web应用因thread-local导致的内存泄露而要停止时,该监听器会触发线程池中线程的更新。
    • className="...JasperListener":Web应用启动前初始化Jasper(JSP引擎,将JSP解析成java,编译成class供JVM使用)。
  • <GlobalNamingResources><Server> 的子标签,配合子标签 <Resource> 读取某个配置文件信息以定义全局资源,本例中读取了 conf/tomcat-users.xml 文件的信息。
  • <Service><Server> 的子标签,负责对外提供服务,是请求和响应的接头人,可以存在多个以监听不同的端口:
    • name="Catalina":组件名。
  • <Connector><Service> 的子标签,负责从客户端接收连接请求,创建 requestresponse 对象,分配线程让 <Engine> 来处理,然后接收响应结果并返回给客户端,可以存在多个:
    • port:设置连接端口号,即允许客户端通过什么端口号连接到Tomcat,默认 8080
    • protocol:设置请求协议,可选 HTTP/1.1 或者 AJP/1.3(AJP协议概念见引用)。
    • connectionTimeout="20000":设置连接的超时时间为20秒。
    • redirectPort="8443":当protocol规定了协议为 https,而实际请求是 http 时,重定向至端口号为 8443<Connector>
  • <Engine><Service> 的子标签,负责从某些 <Connector> 中接收 request,处理,然后返回 response<Connector>,只能存在一个:
    • name="Catalina":组件名,用于用于日志和错误信息。
    • defaultHost="localhost":默认绑定的HOST地址为本机,此值需要与某个 <Host>name 绑定。
  • <Realm><Engine> 的子标签,提供了一种用户密码与web应用的映射关系,从而达到角色安全管理的作用:
    • className:安全管理的某种实现类。
    • resourceName:这个实现是在 <GlobalNamingResources> 中配置的。
  • <Host><Engine> 的子标签,负责为Tomcat设置域名,至少包含一个以绑定 <Engine>defaultHost 属性:
    • unpackWARs:为 true 表示tomcat则会将war包项目解压成文件夹后运行,为false 表示tomcat直接运行war包项目。
    • autoDeploy:为 true 表示tomcat在运行时定期检查新的Web应用或Web应用的更新,然后自动部署,为 false 时表示不进行自动部署。
    • deployOnStartup:为 true 表示Tomcat在启动时检查Web应用的更新,且检测到的所有Web应用都视作新应用,然后自动部署,为 false 时不进行启动检测。
    • appBase:指定Web应用所在的目录,默认值是 webapps,是一个Tomcat根目录的相对路径。
    • xmlBase:指定Web应用的XML配置文件所在的目录,默认为 conf/<engine_name>/<host_name> 中。
  • <Valve>:请求处理链上的一个组件,可以和 <Engine><Host><Context> 关联:
    • className:设置Valve类型为 AccessLogValve,负责记录日志。
    • directory:设置日志存储的位置,是一个Tomcat根目录的相对路径。
    • prefix:设置日志文件的前缀为 localhost_access_log
    • suffix:设置日志文件的后缀为 .txt
    • pattern:指定记录日志的格式为 %h %l %u %t &quot;%r&quot; %s %b
      • %h:远程主机名或IP地址。
      • %l:远程逻辑用户名,一律是"-",可以忽略。
      • %u:授权的远程用户名,如果没有,则是"-"。
      • %t:访问的时间。
      • %r:请求的第一行,即请求方法(get/post等),uri及协议。
      • %s:响应状态,200,404等等。
      • %b:响应的数据量,不包括请求头,如果为0,则是"-"。
  • <Context>:代表包裹内容,即一个Web应用,每个Web应用基于WAR文件,或WAR文件解压后对应的目录,一个 <Host> 中可以存在多个,server.xml 默认配置文件中并没有出现Context元素的配置,因为Tomcat开启了自动部署,Web应用没有在 server.xml 中配置静态部署,而是由Tomcat通过特定的规则自动部署:
    • docBase:设置Web应用的真实物理路径,在自动部署场景下,若 docBase 指定的WAR包或应用目录已在 docBase 中,则不需要设置,因为Tomcat会自动扫描 appBase 包,指定了反而会造成问题。
    • path:设置Web应用的访问入口,/ 开头,自动部署场景下,默认为WAR文件名或应用目录名。
    • reloadable:值为 true 时会监听 WEB-INF/classesWEB-INF/lib 目录下class文件,一旦改动会触发Web应用的重新加载,默认值为 false

AJP协议:负责和其他的HTTP服务器(如Apache)建立连接,在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器,之所以使用Tomcat和其他服务器集成,是因为虽然Tomcat可以用作Servlet/JSP容器,但是对静态资源的处理速度较慢,不如Apache和IIS等HTTP服务器,因此常常将Tomcat与Apache等集成,前者作Servlet容器,后者处理静态资源,而AJP协议便负责Tomcat和Apache的连接。

4. 虚拟路径

概念: 若不想每次重启tomcat都删除其中的静态资源,则可以将静态资源上传到tomcat之外的其他位置,如 F:\upload\picture,然后为这个路径配置一个虚拟路径,如 /upload,以便浏览器访问:

  • 本地配置虚拟路径: 找到 conf/server.xml 中的 <Host> 首行位置:
    • 填写 <Context path="/upload" docBase="F:\upload\picture"></Context>
    • path 属性用来设置URL虚拟路径,以 / 开头,且不建议设置多层结构。
    • docBase 属性用来设置真实路径,要求必须真实存在,否则tomcat启动报空指针。
    • 点击右上角 Edit Configurations... 勾选 Deploy applications configured in Tomcat instance,否则 server.xml 的改动对IDEA中的Tomcat服务不生效。
    • 浏览器测试 http://localhost:8080/upload/123.jpg,路径不要添加项目工程名。
  • IDEA配置虚拟路径:
    • 点击右上角 Edit Configurations... 并进入 Deployment 选项卡。
    • 点击 + - External Source...,选择 F:\upload\picture 文件夹。
    • 在下 Application context 栏中输入虚拟路径 /upload 并启动Tomcat。
    • 在首页中使用 <a href="/upload/123.jpg">测试</a> 来测试,不要添加项目工程名。

Eclipse配置

  • Eclipse配置了tomcat之后,会在项目中生成一个server的项目,里面是你的tomcat,每次启动tomcat,那里面的server.xml会覆盖你本地tomcat的server.xml,所以那里也要设置一下。

腾讯云服务器

概念: 0元试用腾讯云服务器

流程:

  1. cmd -> mstsc
  2. 公网IP:118.89.238.23
  3. 账号:Administrator
  4. 密码:Tma
  5. 显示选项 - 本地资源 - 详细信息 - 驱动器 - C盘,将主电脑的C盘共享到云服务器(支持双向实时更新共享内容)。
  6. 开始菜单 - 管理工具 - 高级安全Windows防火墙 - Windows防火墙属性 - 公用配置文件 - 入站连接选择允许。
  7. 云服务器中安装JDK、配置环境变量。
  8. 云服务器中安装TOMCAT。
  9. 将TOMCAT的startup.bat、shutdown.bat、和webapps文件夹发送快捷方式到桌面。
  10. 将IDEA项目中,out\artifacts\中的项目拷贝到webapps文件夹中。 10.任意地点访问 https:\118.89.238.23:8080\项目发布名