家乡网站怎么做,温州建网站业务人员,seo统计,网页制作模板设计1. Tomcat概述
Tomcat是Java语言开发的#xff0c;Tomcat服务器是一个免费的开放源代码的Web应用服务器#xff0c;是Apache软件基金会的Jakarta项目中的一个核心项目#xff0c;由Apache、Sun和其他一些公司及个人 共同开发而成。Tomcat属于轻量级应用服务器#xff0c;在… 1. Tomcat概述
Tomcat是Java语言开发的Tomcat服务器是一个免费的开放源代码的Web应用服务器是Apache软件基金会的Jakarta项目中的一个核心项目由Apache、Sun和其他一些公司及个人 共同开发而成。Tomcat属于轻量级应用服务器在中小型系统和并发访问用户不是很多的场合下被普遍使用是开发和调试JSP程序的首选。一般来说Tomcat虽然和Apache或者Nginx这些Web服务器一样具有处理HTML页面的功能然而由于其处理静态HTML的能力远不及Apache或者Nginx所以Tomcat通常作为一个Serlet和JSP容器单独运行在后端。
2. Tomcat的组件 Tomcat由一系列的组件构成其中核心的组件有三个
Web容器完成Web服务器的功能。Servlet容器名字为catalina用于处理Servlet代码。JSP容器用于将JSP动态网页翻译成Servlet代码。
因此 Tomcat 是 Web 应用服务器也是一个 Servlet/JSP 容器。Tomcat 作为 Servlet 容器负责处理客户的.jsp动态页面的请求把请求传送给 Servlet并将 Servlet 的响应传送回给客户
Servlet 是Java Servlet 的简称可以理解为是一个服务连接器是用 Java 编写的服务器端程序具有独立于平台和协议的特性 简单的理解servlet 就是一个中间件包含了接口和方法将客户端和数据库连接从而实现动态网页的创建。
JSP 全称 Java Server Pages是一种动态网页开发技术。它使用 JSP 标签在HTML网页中插入 Java 代码。标签通常以 % 开头以 % 结束。 JSP 是一种 Java servlet主要用于实现 Java web 应用程序的用户界面部分。 JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源然后动态地创建网页 Tomcat 功能组件结构 Tomcat 的核心功能有两个分别是负责接收和反馈外部请求的连接器 Connector和负责处理请求的容器 Container。 其中连接器和容器相辅相成一起构成了基本的 web 服务 Service。每个 Tomcat 服务器可以管理多个 Service。
Connector负责对外接收和响应请求。它是Tomcat与外界的交通枢纽监听端口8080接收外界请求并将请求处理后传递给容器做业务处理最后将容器处理后的结果响应给外界。Container负责对内处 其内部由 Engine、Host、Context和Wrapper 四个容器组成用于管理和调用 Servlet 相关逻辑。Service对外提供的 Web 服务。主要包含 Connector 和 Container 两个核心组件以及其他功能组件。Tomcat 可以管理多个 Service且各 Service 之间相互独立。
Connector 最重要的功能就是接收连接请求然后分配线程让 Container来处理这个请求所以这必然是多线程的多线程的处理是 Connector 设计的核心。Connector监听指定端口上请求当请求到来时创建一个request和response对象交换数据然后新建一个线程来处理请求并把request和response传递给Engine组件最后从Engine获取一个响应并返回给客户端。 Container 结构分析
每个 Service 会包含一个 Container 容器。在 Container 内部包含了 4 个子容器 4个子容器的作用分别是
Engine引擎用来管理多个虚拟主机一个 Service 最多只能有一个 EngineHost代表一个虚拟主机也可以叫站点通过配置 Host 就可以添加站点Context代表一个 Web 应用包含多个 Servlet 封装器Wrapper封装器容器的最底层。每一 Wrapper 封装着一个 Servlet负责对象实例的创建、执行和销毁功能
Engine、Host、Context 和 Wrapper这四个容器之间属于父子关系。 容器 由一个引擎可以管理多个虚拟主机。每个虚拟主机可以管理多个 Web 应用。每个 Web 应用会有多个 Servlet 封装器。 Tomcat请求过程 1、用户在浏览器中输入网址请求被发送到本机端口 8080被在那里监听的 Connector 获得 2、Connector 把该请求交给它所在的 Service 的 EngineContainer来处理并等待 Engine 的回应 3、请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用最后在 Servlet 中执行对应的业务逻辑、数据存储等。 4、执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回最后返回给 Connector并通过 Connector 返回给客户端 Tomcat安装部署
1. 关闭防火墙将安装Tomcat所需软件包传到/opt目录下
[rootzy2 ~]# cd /opt
[rootzy2 opt]# ls
apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm rh
[rootzy2 opt]# systemctl stop firewalld
[rootzy2 opt]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[rootzy2 opt]# setenforce 0
setenforce: SELinux is disabled2. 安装JDK
[rootzy2 ~]# java -version
#查看版本当前系统已自带JDK
openjdk version 1.8.0_131
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
[rootzy2 opt]# rpm -ivh jdk-8u201-linux-x64.rpm
#rpm安装jdk
[rootzy2 ~]# java -version
#再次查看版本发现安装未生效仍是之前版本
openjdk version 1.8.0_131
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)3. 设置JDK环境变量
#查看JDK文件目录
[rootzy2 opt]# rpm -qpl jdk-8u201-linux-x64.rpm
......
/usr/java/jdk1.8.0_201-amd64/src.zip
[rootzy2 opt]# vim /etc/profile.d/java.sh
#也可在/etc.profile末行添加以下内容
export JAVA_HOME/usr/java/jdk1.8.0_201-amd64
#定义JAVA_HOME变量为JDK文件目录
export CLASSPATH.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
#定义CLASSPATH变量为tools.jar和dt.jar的路径
export PATH$JAVA_HOME/bin:$PATH
#将JAVA的bin目录加入到PATH变量[rootzy2 opt]# which java
/usr/bin/java
[rootzy2 opt]# source /etc/profile.d/java.sh
[rootzy2 opt]# which java
/usr/java/jdk1.8.0_201-amd64/bin/java
[rootzy2 ~]# java -version
#查看JAVA版本已更新
java version 1.8.0_201
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)4. 测试java
jdk测试首先使用文本工具编写java源代码比如 Hello.java 在命令行中输入命令javac Hello.java对源代码进行编译生成 class 字节码文件 编译完成后如果没有报错信息输入命令java Hello运行 class 字节码文件由 JVM 对字节码进行解释和运行打印 “Hello World”。
[rootzy2 ~]# vim Hello.java
public class Hello {public static void main(String[] args){System.out.println(Hello World!);}
}#类名、接口名命令英文大小写字母、数字字符、$和_不能使用关键字和数字开头
一个单词命名时第一个单词的首字母要大写多单词组成时所有单词的首字母大写XxxYyyZzz大驼峰命名法
[rootzy2 ~]# javac Hello.java
[rootzy2 ~]# ls
anaconda-ks.cfg Hello.class Hello.java initial-setup-ks.cfg original-ks.cfg
[rootzy2 ~]# java Hello
Hello World!5. 安装启动Tomcat [rootzy2 ~]# cd /opt
[rootzy2 opt]# tar xf apache-tomcat-9.0.16.tar.gz
[rootzy2 opt]# mv apache-tomcat-9.0.16 /usr/local/tomcat
##启动tomcat ##
[rootzy2 opt]# cd /usr/local/tomcat/bin
[rootzy2 bin]# ls
bootstrap.jar configtest.sh shutdown.sh
catalina.bat daemon.sh startup.bat
catalina.sh digest.bat startup.sh #启动程序
catalina-tasks.xml digest.sh tomcat-juli.jar
ciphers.bat makebase.bat tomcat-native.tar.gz
ciphers.sh makebase.sh tool-wrapper.bat
commons-daemon.jar setclasspath.bat tool-wrapper.sh
commons-daemon-native.tar.gz setclasspath.sh version.bat
configtest.bat shutdown.bat #关闭程序 version.sh[rootzy2 bin]# ./startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started[rootzy2 bin]# netstat -natp | grep :8080
tcp6 0 0 :::8080 :::* LISTEN 123581/java 浏览器访问Tomcat的默认主页 http://192.168.126.22:8080##启动tomcat ##
#后台启动
/usr/local/tomcat/bin/startup.sh
或
/usr/local/tomcat/bin/catalina.sh start #前台启动
/usr/local/tomcat/bin/catalina.sh run
#用systemctl命令控制tomcat
[rootzy2 opt]# vim /usr/lib/systemd/system/tomcat.service
[Unit]
Descriptiontomcat server
Wantsnetwork-online.target
Afternetwork.target[Service]
Typeforking
ExecStart/usr/local/tomcat/bin/startup.sh
ExecStop/usr/local/tomcat/bin/shutdown.sh
Restarton-failure[Install]
WantedBymulti-user.target[rootzy2 opt]# systemctl daemon-reload
[rootzy2 opt]# systemctl restart tomcat.service
[rootzy2 opt]# netstat -antp | grep :8080
tcp6 0 0 :::8080 :::* LISTEN 118634/java
[rootzy2 opt]# systemctl stop tomcat.service
[rootzy2 opt]# netstat -antp | grep :8080
tcp6 0 0 ::1:44616 ::1:8080 TIME_WAIT -
[rootzy2 opt]# systemctl start tomcat.service Tomcat 虚拟主机配置
很多时候公司会有多个项目需要运行一般不会是在一台服务器上运行多个 Tomcat 服务这样会消耗太多的系统资源。此时 就需要使用到 Tomcat 虚拟主机
例如现在新增两个域名 www.accp.com 和 www.benet.com 希望通过这两个域名访问到不同的项目内容
[rootzy2 bin]# cd /usr/local/tomcat/webapps
[rootzy2 webapps]# mkdir accp benet
[rootzy2 webapps]# ls
accp benet docs examples host-manager manager ROOT
[rootzy2 webapps]# echo h1this is accp test web!/h1 accp/index.html
[rootzy2 webapps]# echo h1this is benet test web!/h1 benet/index.html
[rootzy2 webapps]# ls accp
index.html
[rootzy2 webapps]# ls benet
index.html[rootzy2 webapps]# systemctl restart tomcat.service
[rootzy2 webapps]# netstat -lntp | grep :8080
tcp6 0 0 :::8080 :::* LISTEN 118875/java客户端zy1浏览器访问验证
[rootzy1 ~]# echo 192.168.126.22 www.accp.com www.benet.com /etc/hostsTomcat 优化
Tomcat默认安装下的缺省配置并不适合生产环境它可能会频繁出现假死现象需要重启只有通过不断压测优化才能让它最高效率稳定的运行。优化主要包括三方面分别为操作系统优化内核参数优化Tomcat配置文件参数优化Java虚拟机JVM调优 Tomcat 配置文件参数优化
redirectPort: 如果某连接器支持的协议是HTTP当接收客户端发来的HTTPS请求时则转发至此属性定义的 8443 端口。
maxThreads: Tomcat使用线程来处理接收的每个请求这个值表示Tomcat可创建的最大的线程数即支持的最大并发连接数默认值是 200。
minSpareThreads: 最小空闲线程数Tomcat 启动时的初始化的线程数表示即使没有人使用也开这么多空线程等待默认值是 10。
maxSpareThreads: 最大备用线程数一旦创建的线程超过这个值Tomcat就会关闭不再需要的socket线程。默认值是-1无限制。一般不需要指定。
processorCache: 进程缓冲器可以提升并发请求。默认值是200如果不做限制的话可以设置为-1一般采用maxThreads的值或者-1。
URIEncoding: 指定 Tomcat 容器的 URL 编码格式网站一般采用UTF-8作为默认编码。
connnectionTimeout: 网络连接超时单位毫秒设置为 0 表示永不超时这样设置有隐患的。通常默认 20000 毫秒就可以。
enableLookups: 是否反查域名以返回远程主机的主机名取值为true 或 false如果设置为 false则直接返回 IP 地址为了提高处理能力应设置为 false。
disableUploadTimeout: 上传时是否使用超时机制。应设置为 true。
connectionUploadTimeout: 上传超时时间毕竟文件上传可能需要消耗更多的时间这个根据你自己的业务需要自己调以使Servlet有较长的时间来完成它的执行需要与上一个参数一起配合使用才会生效。
acceptCount: 指定当所有可以使用的处理请求的线程数都被使用时可传入连接请求的最大队列长度超过这个数的请求将不予处理默认为 100 个。
maxKeepAliveRequests: 指定一个长连接的最大请求数。默认长连接是打开的设置为1时代表关闭长连接为-1时代表请求数无限制
compression是否对响应的数据进行GZIP压缩off表示禁止压缩on表示允许压缩文本将被压缩、force表示所有情况下都进行压缩默认值为 off压缩数据后可以有效的减少页面的大小一般可以减小 1/3 左右节省带宽。
compressionMinSize 表示压缩响应的最小值只有当响应报文大小大于这个值的时候才会对报文进行压缩如果开启了压缩功能默认值就是 2048。
compressableMimeType: 压缩类型指定对哪些类型的文件进行数据压缩。
noCompressionUserAgentsgozilla, traviata: 对于以下的浏览器不启用压缩 如果已经进行了动静分离处理静态页面和图片等数据就不需做 Tomcat 处理也就不要在 Tomcat 中配置压缩了。 以上是一些常用的配置参数还有好多其它的参数设置还可以继续深入的优化HTTP Connector 与 AJP Connector 的参数属性值可以参考官方文档的详细说明进行学习 vim /usr/local/tomcat/conf/server.xmlredirectPort8443
##--71行--插入
minSpareThreads50
enableLookupsfalse
disableUploadTimeouttrue
acceptCount300
maxThreads500
processorCache500
URIEncodingUTF-8
maxKeepAliveRequests100
compressionon
compressionMinSize2048
compressableMimeTypetext/html,text/xml,text/javascript,text/css,text/plain,image/gif,image /jpg,image/png/Tomcat多实例部署
1.安装tomcat
[rootzy2 opt]# tar xf apache-tomcat-9.0.16.tar.gz
[rootzy2 opt]# ls
apache-tomcat-9.0.16 jdk-8u201-linux-x64.rpm nginx-1.18.0.tar.gz
apache-tomcat-9.0.16.tar.gz mysql-5.7.20 php-7.1.10
Hello.class mysql-boost-5.7.20.tar.gz php-7.1.10.tar.bz2
Hello.java nginx-1.18.0 rh[rootzy2 opt]# mv apache-tomcat-9.0.16 /usr/local/tomcat2
[rootzy2 tomcat2]# ls
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
2.配置tomcat环境变量
[rootzy2 tomcat2]# vim /etc/profile.d/tomcat.sh#tomcat1
export CATALINA_HOME1/usr/local/tomcat
export CATALINA_BASE1/usr/local/tomcat
export TOMCAT_HOME1/usr/local/tomcat#tomcat2
export CATALINA_HOME2/usr/local/tomcat2
export CATALINA_BASE2/usr/local/tomcat2
export TOMCAT_HOME2/usr/local/tomcat2source /etc/profile.d/tomcat.sh
3.修改 tomcat2 中的 server.xml 文件要求各 tomcat 实例配置不能有重复的端口号
[rootzy2 opt]# vim /usr/local/tomcat2/conf/server.xmlServer port8006 shutdownSHUTDOWN #22行修改Server prot默认为8005 - 修改为8006
Connector port8081 protocolHTTP/1.1 #69行修改Connector portHTTP/1.1 默认为8080 - 修改为8081
Connector port8010 protocolAJP/1.3 redirectPort8443 / #116行修改Connector port AJP/1.3默认为8009 - 修改为80104 .修改各 tomcat 实例中的文件
修改startup.sh 和 shutdown.sh 文件添加 tomcat 环境变量
vim /usr/local/tomcat/bin/startup.sh# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
##添加以下内容
export CATALINA_BASE$CATALINA_BASE1
export CATALINA_HOME$CATALINA_HOME1
export TOMCAT_HOME$TOMCAT_HOME1vim /usr/local/tomcat/bin/shutdown.sh# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE$CATALINA_BASE1
export CATALINA_HOME$CATALINA_HOME1
export TOMCAT_HOME$TOMCAT_HOME1
vim /usr/local/tomcat2/bin/startup.sh# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE$CATALINA_BASE2
export CATALINA_HOME$CATALINA_HOME2
export TOMCAT_HOME$TOMCAT_HOME2vim /usr/local/tomcat2/bin/shutdown.sh# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE$CATALINA_BASE2
export CATALINA_HOME$CATALINA_HOME2
export TOMCAT_HOME$TOMCAT_HOME25. 启动各 tomcat 中的 /bin/startup.sh,并查看端口
[rootzy2 local]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.[rootzy2 local]# /usr/local/tomcat2/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat2
Using CATALINA_HOME: /usr/local/tomcat2
Using CATALINA_TMPDIR: /usr/local/tomcat2/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64/jre
Using CLASSPATH: /usr/local/tomcat2/bin/bootstrap.jar:/usr/local/tomcat2/bin/tomcat-juli.jar
Tomcat started.[rootzy2 local]# netstat -lntp | grep java
tcp6 0 0 :::8080 :::* LISTEN 118875/jav
tcp6 0 0 :::8081 :::* LISTEN 120077/jav
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 118875/jav
tcp6 0 0 127.0.0.1:8006 :::* LISTEN 120077/jav
tcp6 0 0 :::8009 :::* LISTEN 118875/jav
tcp6 0 0 :::8010 :::* LISTEN 120077/jav6. 浏览器访问测试 http://192.168.126.22:8080和http:192.126.126.22:8081