1.what‘s this?

Stable performance, free Java web application server!

相关:

Java,Javac,JVM,JRE,JDK,Java SE,Java EE,JSP

基本逻辑:

xxx.java-->Javac-->xxx.class-->JVM-->MachineLanguage-->runing

一点儿总结:

一个java程序只有一个jvm进程,但可以开多线程。

tomcat通过servlet处理响应给客户端。

tomcat是JDK+JSP实现的Java EE,servlet的容器。

Tomcat相关组件:

server: 顶级类,一个server算一个tomcat实例。

service: server的子组件,用于封装connector和containor。

connector: 连接器,接收客户端请求处理返回给客户端。

containor: 容器,分析处理请求返回数据给connector。

engine: 定义servlet引擎。

host: 定义虚拟主机。

context: 定义webapp。

wrapper: 真正的servlet容器。

2.why use it?

一些优点:

开源,免费,配置简单,性能稳定。

一些缺点:

处理静态资源不如nginx,apache。

3.How to use it?

3.1.安装部署

1.安装java环境(jdk1.8.0_161)

流程:下载省略,解压,软链,配置环境变量。

tar -zxvf jdk-8u161-linux-x64.tar.gz -C /usr/local/
ln -s /usr/local/jdk1.8.0_161 /usr/local/jdk
sed -i.ori '$a export JAVA_HOME=/usr/local/jdk\nexport CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar\nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH' /etc/profile

检查是否安装完毕。

source /etc/profile
[root@izbp1gp76zixjk79d0yfaxz bin]# java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

2.安装tomcat

流程:下载,解压,软链,配置环境变量。

wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.31/bin/apache-tomcat-8.5.31.tar.gz
tar -zxvf apache-tomcat-8.5.31.tar.gz -C /usr/local
ln -s /usr/local/apache-tomcat-8.5.31 /usr/local/tomcat
echo 'export TOMCAT_HOME=/usr/local/tomcat' >> /etc/profile
source /etc/profile

3.启动脚本:

方法一

#!/bin/bash
# Tomcat init script for linux.
#
# chkconfig: 2345 96 14
# description: The Apache Tomcat servlet/JSP container.
. /etc/profile
CATALINA_HOME=/usr/local/tomcat
export CATALINA_HOME
case $1 in
start)
exec $CATALINA_HOME/bin/catalina.sh start;;
stop)
exec $CATALINA_HOME/bin/catalina.sh stop;;
restart)
$CATALINA_HOME/bin/catalina.sh stop
sleep 2
exec $CATALINA_HOME/bin/catalina.sh start;;
*)
echo "Usage: `basename $0` {start|stop|restart}"
exit 1
;;
esac

方法二

#!/bin/bash
# chkconfig: 2345 74 44
# description: Tomcat is a Java servlet container.
. /etc/profile
TOMCAT_HOME=/usr/local/tomcat8_1 start(){
TOMCAT_PID=`ps -ef | grep "$TOMCAT_HOME" | grep -v "grep" | awk '{print $2}'`
if [ -z $TOMCAT_PID ];then
/bin/bash $TOMCAT_HOME/bin/startup.sh
else
echo "$0 is running"
fi
} stop(){
TOMCAT_PID=`ps -ef | grep "$TOMCAT_HOME" | grep -v "grep" | awk '{print $2}'`
if [ -z $TOMCAT_PID ];then
echo "$0 is not running"
else
echo "shutdown down $0"
kill -9 "$TOMCAT_PID" && echo "PID $TOMCAT_PID killed"
fi
} status(){
TOMCAT_PID=`ps -ef | grep "$TOMCAT_HOME" | grep -v "grep" | awk '{print $2}'`
if [ -z $TOMCAT_PID ];then
echo "$0 is not running."
else
echo "$0 is running PID is $TOMCAT_PID"
fi
} case $1 in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
stop
start
;;
*)
echo "Usage:$0 {start|stop|status|restart}."
;;
esac

4.tomcat的目录结构

.
├── bin //功能脚本
├── conf //配置文件
│   └── Catalina
│   └── localhost
├── lib //存放web能访问的jar包
├── logs //web应用日志
├── temp //临时文件
├── webapps //web应用目录
│   ├── docs
│   │   ├── api
│   │   ├── appdev
│   │   │   └── sample
│   │   │   ├── docs
│   │   │   ├── src
│   │   │   │   └── mypackage
│   │   │   └── web
│   │   │   ├── images
│   │   │   └── WEB-INF
│   │   ├── architecture
│   │   │   ├── requestProcess
│   │   │   └── startup
│   │   ├── config
│   │   ├── elapi
│   │   ├── funcspecs
│   │   ├── images
│   │   │   └── fonts
│   │   ├── jspapi
│   │   ├── servletapi
│   │   ├── tribes
│   │   ├── WEB-INF
│   │   └── websocketapi
│   ├── examples
│   │   ├── jsp
│   │   │   ├── async
│   │   │   ├── cal
│   │   │   ├── checkbox
│   │   │   ├── colors
│   │   │   ├── dates
│   │   │   ├── error
│   │   │   ├── forward
│   │   │   ├── images
│   │   │   ├── include
│   │   │   ├── jsp2
│   │   │   │   ├── el
│   │   │   │   ├── jspattribute
│   │   │   │   ├── jspx
│   │   │   │   ├── misc
│   │   │   │   ├── simpletag
│   │   │   │   └── tagfiles
│   │   │   ├── jsptoserv
│   │   │   ├── num
│   │   │   ├── plugin
│   │   │   │   └── applet
│   │   │   ├── security
│   │   │   │   └── protected
│   │   │   ├── sessions
│   │   │   ├── simpletag
│   │   │   ├── snp
│   │   │   ├── tagplugin
│   │   │   └── xml
│   │   ├── servlets
│   │   │   ├── images
│   │   │   └── nonblocking
│   │   ├── WEB-INF
│   │   │   ├── classes
│   │   │   │   ├── async
│   │   │   │   ├── cal
│   │   │   │   ├── checkbox
│   │   │   │   ├── colors
│   │   │   │   ├── compressionFilters
│   │   │   │   ├── dates
│   │   │   │   ├── error
│   │   │   │   ├── examples
│   │   │   │   ├── filters
│   │   │   │   ├── jsp2
│   │   │   │   │   └── examples
│   │   │   │   │   ├── el
│   │   │   │   │   └── simpletag
│   │   │   │   ├── listeners
│   │   │   │   ├── nonblocking
│   │   │   │   ├── num
│   │   │   │   ├── sessions
│   │   │   │   ├── util
│   │   │   │   ├── validators
│   │   │   │   └── websocket
│   │   │   │   ├── chat
│   │   │   │   ├── drawboard
│   │   │   │   │   └── wsmessages
│   │   │   │   ├── echo
│   │   │   │   └── snake
│   │   │   ├── jsp
│   │   │   │   └── applet
│   │   │   ├── jsp2
│   │   │   ├── lib
│   │   │   └── tags
│   │   └── websocket
│   ├── host-manager
│   │   ├── images
│   │   ├── META-INF
│   │   └── WEB-INF
│   │   └── jsp
│   ├── manager
│   │   ├── images
│   │   ├── META-INF
│   │   └── WEB-INF
│   │   └── jsp
│   └── ROOT
│   └── WEB-INF
└── work //存放JSP编译出的.java,.class文件
└── Catalina
└── localhost
├── docs
├── examples
├── host-manager
├── manager
│   └── org
│   └── apache
│   └── jsp
│   └── WEB_002dINF
│   └── jsp
└── ROOT
└── org
└── apache
└── jsp

3.2.配置管理

Server.xml包含

server

service

connector

containor

engine

host

context

wrapper

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<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 name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<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 &quot;%r&quot; %s %b" />
</Host>
</Engine>
</Service>
</Server>

3.3.站点部署

基本方法:

1.直接放代码。

2.放war包。

3.4.多实例集群部署

1.多实例

cd /usr/local
cp -a tomcat tomcat8_1
cp -a tomcat tomcat8_2
sed -i '22s#8005#8011#;69s#8080#8081#;123s#appBase=".*"# appBase="/data/wwwroot"#' tomcat8_1/conf/server.xml
sed -i '22s#8005#8012#;69s#8080#8082#;123s#appBase=".*"# appBase="/data/wwwroot"#' tomcat8_2/conf/server.xml
for i in {1..2};do /usr/local/tomcat8_$i/bin/startup.sh;done
mkdir /data/wwwroot -p
cp tomcat/webapps/manager/index.jsp /data/wwwroot/

2.集群nginx反向代理

[root@izbp1gp76zixjk79d0yfaxz conf.d]# cat tomcat.conf
upstream web-pools{
server 127.0.0.1:8080;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
server {
listen 80;
server_name boyang.geek-zoo.net;
location / {
root html;
index index.jsp index.html index.htm;
proxy_pass http://web-pools;
}
}

3.5.监控

zabbix配置监控tomcat

3.6.安全优化及性能优化

3.6.1.安全优化

降权启动

telnet管理端口保护

ajp连接端口保护

禁用管理端

3.6.2.性能优化

屏蔽dns查询enableLookups="false"

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m"

Tomcat之初识初体验的更多相关文章

  1. Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验

    Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...

  2. MyEclipse性能调优初体验

    MyEclipse性能调优初体验 简介一下工作环境,MyEclipse2014,你懂的 项目中有一个基于web的工作流引擎,仅仅要执行起来就CPU差点儿耗尽(尽管看似27%,事实上已经把俺4核的CPU ...

  3. 蚂蚁 RPC 框架 SOFA-RPC 初体验

    前言 最近蚂蚁金服开源了分布式框架 SOFA,楼主写了一个 demo,体验了一下 SOFA 的功能,SOFA 完全兼容 SpringBoot(当然 Dubbo 也是可以兼容的). 项目地址:Alipa ...

  4. (一)SpringBoot基础篇- 介绍及HelloWorld初体验

    1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ...

  5. Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用[z]

    前言 早在去年就简单的使用了一下Spring Boot,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文 ...

  6. (一)SpringBoot2.0基础篇- 介绍及HelloWorld初体验

    1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ...

  7. Node.js 网页瘸腿爬虫初体验

    延续上一篇,想把自己博客的文档标题利用Node.js的request全提取出来,于是有了下面的初哥爬虫,水平有限,这只爬虫目前还有点瘸腿,请看官你指正了. // 内置http模块,提供了http服务器 ...

  8. SpringFox 初体验

    本文来自网易云社区. 1.什么是SpringFox? 1.1 Springfox 是一个开源的API Doc的框架, 它的前身是swagger-springmvc,可以将我们的Controller中的 ...

  9. Docker深入浅出系列 | 容器初体验

    目录 Docker深入浅出系列 | 容器初体验 教程目标 预备工作 容器与虚拟化技术 什么是Docker 为什么要用Docker 事例 什么是容器镜像和容器 容器与虚拟机的区别 Vagrant与Doc ...

随机推荐

  1. 多线程之synchronized

    Java并发编程:synchronized 虽然多线程编程极大地提高了效率,但是也会带来一定的隐患.比如说两个线程同时往一个数据库表中插入不重复的数据,就可能会导致数据库中插入了相同的数据.今天我们就 ...

  2. cmd导出oracle数据库数据

    今天弄了下oracle数据库导入导出命令exp,imp 首先这个命令是在cmd直接执行,不是sqlplus登录后再执行,见下图: 再次,注意结尾不能有分号(;): exp scott/scott@su ...

  3. 使用JS与jQuery实现文字逐渐出现特效

    该需求出现原因:想要实现一个在一开始加载页面时就出现一行文字逐渐出现的效果,且需要实现的是一种逐渐的过渡出现效果为不是一种生硬的突然间歇性出现.于是便开始尝试利用最近正在学习的jQuery技术和JS实 ...

  4. Yii2 查询条件

    Model::find() 字符串格式,例如:'status=1' 哈希格式,例如: ['status' => 1, 'type' => 2] 操作符格式,例如:['like', 'nam ...

  5. IntelliJ IDEA 历史版本下载地址

    地址:https://confluence.jetbrains.com/display/IntelliJIDEA/Previous+IntelliJ+IDEA+Releases scala插件:htt ...

  6. SQL用法总全

    https://www.yiibai.com/sql 比较全面 事务就是对数据库执行的工作单元.事务是完成逻辑顺序的工作,无论是在手动方式由用户或者自动地通过某种数据库程序的序列的单元. 事务是一个或 ...

  7. 学习笔记一:I2C协议学习和Verilog实现

    ////////////////////////////////////////////////// //clk = 20 MHz ,一个周期50ns //sck = 100 kHz (scl) ,一 ...

  8. ISE14.7使用教程(一个完整工程的建立)

    FPGA公司主要是两个Xilinx和Altera(现intel PSG),我们目前用的ISE是Xilinx的开发套件,现在ISE更新到14.7已经不更新了,换成了另一款开发套件Vivado,也是Xil ...

  9. python基础学习1-描述符

    #!/usr/bin/env python # -*- coding:utf-8 -*- #描述符就是将某种特殊类型的类的实例指派给另一个类的属性 #特殊类型指 实现了 # __get__(self, ...

  10. 基于bootstrap的文本编辑器组件:Summernote

    Summernote官网地址 :https://summernote.org/ 这是官网的一个例子: <!DOCTYPE html> <html lang="en" ...