TOMCAT详细部署
Tomcat服务器简介
Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。
一般来说,Tomcat虽然和Apache或者Nginx这些Web服务器一样,具有处理HTML页面的功能,然而由于其处理静态HTML的能力远不及Apache或者Nginx,所以Tomcat通常是作为一个Servlet和JSP容器,单独运行在后端。
概括:
1)免费的、开放源代码的Web应用服务器
2)Apache软件基金会(Apache Software Foundation)Jakarta项目中的一个核心项目
3)由Apache、Sun和一些公司及个人共同开发而成
4)深受Java爱好者的喜爱,并得到部分软件开发商的认可
5)目前比较流行的Web应用服务器
Apache和Tomcat的区别在于
- Apache是一个普通的HTTP服务器,主要用于静态网页的访问和处理。
- Tomcat是一个更强大的应用服务器,主要用于动态网页的访问和处理。
- Apache不能解释java程序(jsp,serverlet)。
- Tomcat支持HTML、JSP、ASP、PHP、CGI等。
- 在独立运行模式下,Tomcat的功能与Apache等效,支持JSP。
核心组件
1.Java Servlet
运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。与CGI(公共网关接口)功能相类似。
2.JSP全称Java Server Pages
一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。 JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。 JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
3.Tomcat三大核心组件
Tomcat 由一系列的组件构成,其中核心的组件有三个
Web容器:完成Web服务器的功能。
Servlet 容器:名字为catalina, 用于处理Servlet代码。
JSP容器:用于将JSP动态网页翻译成Servlet代码。
Tomcat 各组件及关系
-
Server 和 Service
-
Connector 连接器
- HTTP 1.1
- SSL https
- AJP( Apache JServ Protocol) apache 私有协议,用于apache反向代理Tomcat
-
Container
- Engine 引擎 catalina
- Host 虚拟机 基于域名 分发请求
- Context 隔离各个WEB应用 每个Context的 ClassLoader都是独立
-
Component
- Manager (管理器)
- logger (日志管理)
- loader (载入器)
- pipeline (管道)
- valve (管道中的阀)
工作流程
- 用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得;
- Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应;
- 请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑、数据存储等。
- 执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给 Connector,并通过 Connector 返回给客户端。
Tomcat server.xml 配置详解
server
root元素:server 的顶级配置 主要属性: port:执行关闭命令的端口号 shutdown:关闭命令
演示shutdown的用法 #基于telent 执行SHUTDOWN 命令即可关闭(必须大写) telnet 127.0.0.1 8005 SHUTDOWN
service
服务:将多个connector 与一个Engine组合成一个服务,可以配置多个服务。
Connector
连接器:用于接收 指定协议下的连接 并指定给唯一的Engine 进行处理。 主要属性:
protocol 监听的协议,默认是http/1.1
port 指定服务器端要创建的端口号
minSpareThreads服务器启动时创建的处理请求的线程数
maxThreads 最大可以创建的处理请求的线程数
enableLookups 如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
redirectPort 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
acceptCount指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
connectionTimeout指定超时的时间数(以毫秒为单位)
SSLEnabled 是否开启 sll 验证,在Https 访问时需要开启。生成证书: keytool -genkey -v -alias testKey -keyalg RSA -validity 3650
-keystore D:\test.keystore
[ ] 演示配置多个Connector
<Connector port="8860" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8862"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css,application/x-json,application/json,application/x-javascript"
maxThreads="1024" minSpareThreads="200"
acceptCount="800"
maxConnections="10000"
enableLookups="false"
/>
Engine
引擎:用于处理连接的执行器,默认的引擎是catalina。一个service 中只能配置一个Engine。 主要属性:name 引擎名称 defaultHost 默认host
Host
虚拟机:基于域名匹配至指定虚拟机。类似于nginx 当中的server,默认的虚拟机是localhost.
<Host