tomcat

tomcat实例:运行中的tomcat进程,可以运行多个进程
  server:每一个实例对应一个server
  engine:tomcat的核心组件,用于运行jsp或者servlet代码,并不能自己去接收用户请求
  connector:连接器,负责分析接收响应用户请求(自己并不能处理请求,请求service映射为engine中运行的代码)
    http连接器,ajp连接器
  service:connector与engine相互并不能打交道,而是由service将两者进行关联
    一个连接器只能属于一个engine,但一个engine能关联多个连接器
    一个service只能包含一个engine组件和一个或多个connector组件
  host:类似httpd中的虚拟主机
  context:类似于httpd的alias
 
注意:每个组件都由类实现,有些组件的实现还不止一种
  顶级类组件:server
  服务类组件:service
  容器类组件:可以部署webapp的组件,engine,host,context
  连接器组件:connector
  被嵌套类的组件:value,logger,realm
 
tomcat运行模式:
  standalone:通过内置的web server(http connector)来接收客户端的请求
  proxy:由专门的web server服务器响应客户端额请求
    in-process:部署于同一主机
    network:部署于不同主机
 
tomcat的安装
1、安装java环境,也就是按照jdk:
rpm -ivh jdk-8u144-linux-x64.rpm
[root@node1 java]# pwd
lrwxrwxrwx 1 root root 16 Aug 6 21:25 default -> /usr/java/latest
drwxr-xr-x 9 root root 4096 Aug 6 21:25 jdk1.8.0_144
lrwxrwxrwx 1 root root 22 Aug 6 21:25 latest -> /usr/java/jdk1.8.0_144
/usr/java 默认按照位置
设置java环境变量:
[root@node1 java]# cat /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH
[root@node1 java]# source /etc/profile.d/java.sh
[root@node1 java]# java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
 
2、安装tomcat软件
tar xf apache-tomcat-8.5.16.tar.gz -C /usr/local/
cd /usr/local/
ln -sv apache-tomcat-8.5.16 tomcat
[root@node1 local]# cat /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
source /etc/profile.d/tomcat.sh
 
启动tomcat:
[root@node1 bin]# sh catalina.sh start
  Using CATALINA_BASE: /usr/local/tomcat
  Using CATALINA_HOME: /usr/local/tomcat
  Using CATALINA_TMPDIR: /usr/local/tomcat/temp
  Using JRE_HOME: /usr/java/latest
  Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
  Tomcat started.
tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 71124/java
tcp 0 0 :::8009 :::* LISTEN 71124/java
监听在8080端口
java webapps:
  有特定的组织形式,层次型的目录结构,主要包含servlet代码文件,jsp文件,类文件、部署描述符文件等
/usr/local/tomcat/webapps/app1/
  webapps是网站根目录
  WEB-INF/:当前webapp的私有资源目录,通常存放当前webapp自用的web.xml
  META-INF/:当前webapp的私有资源目录,通常存放当前webapp自用的context.xml
  classes/:此webapp的私有类
  lib:此webapp的私有类,被打包为jar格式类
  index.jsp:webapp的主页
 
手动添加一个测试应用程序:
1、创建webapp特有的目录结构
  [root@node1 webapps]# mkdir myapp/{WEB-INF,META-INF,classes,lib} -pv
    mkdir: created directory `myapp'
    mkdir: created directory `myapp/WEB-INF'
    mkdir: created directory `myapp/META-INF'
    mkdir: created directory `myapp/classes'
    mkdir: created directory `myapp/lib'
  [root@node1 webapps]# touch myapp/index.jsp
  [root@node1 webapps]# tree myapp/
  myapp/
  ├── classes
  ├── index.jsp
  ├── lib
  ├── META-INF
  └── WEB-INF
2、编写jsp文件
 
在webapps同级目录有个work目录:
[root@node1 tomcat]# tree work/
work/
└── Catalina
└── localhost
└── estore
├── org
│   └── apache
│   └── jsp
│   ├── index_jsp.class
│   ├── index_jsp.java
│   ├── login_jsp.class
│   ├── login_jsp.java
│   ├── loginOut_jsp.class
│   ├── loginOut_jsp.java
│   ├── register_jsp.class
│   ├── register_jsp.java
│   ├── validatecode_jsp.class
│   └── validatecode_jsp.java
└── SESSIONS.ser
在所有的webapp应用程序的编译过程都在此目录进行编译
 
部署webapp相关的操作:
  deploy:部署,将webapp的源文件放置于目录,并配置tomcat服务器能够基于context.xml文件
    中定义的路径来访问此webapp;将其特有类通过class loader装在至tomcat
  两种方式:
    自动部署:auto deploy
    手动部署:
      1、冷部署:把webapp复制到指定位置,而后才启动tomcat
      2、热部署,在tomcat不停止服务器的情况下部署,需要借助部署工具ant等
  undeploy:反部署,停止webapp应用程序,并从tomcat实例中拆除其部分文件和部署名
  stop:停止tomcat服务,用户无法访问服务,webapp应用程序还在tomcat部署目录中
  start:启动处于停止状态的webapp应用程序
  redeploy:重新部署
 
创建多个host:
1、创建webapps目录,并创建必备目录
mkdir /data/webapps -pv
cd /data/webapps/
mkdir {WEB-INF,META-INF,classes,lib} -pv
mkdir /data/logs                                      自定义webapps日志
vim index.jsp 编辑测试页
[root@node1 webapps]# cat index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
  <head>
    <title>JSP Test Page</title>
  </head>
  <body>
    <% out.println("Hello world."); %>
  </body>
</html>
2、一个新的webapps目录结构
[root@node1 data]# tree webapps/
webapps/
├── classes
├── index.jsp
├── lib
├── META-INF
└── WEB-INF
3、配置server.xml
<Host name="www.hcstart.com" appBase="/data/webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/data/webapps" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs"
prefix="www.hcstart.com_access_log" suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
Host组件中appBase是网站的根,,但是实际的是如果docBase与appBase不相同那么表示映射或者别名性质,最终网站以docBase为准
Context组件中,path指明url位置路径,空表示就是url的根/
docBase是webapps目录的一个映射或者别名
如果修改:
<Host name="www.hcstart.com" appBase="/data/webapps" unpackWARs="true" autoDeploy="true">
<Context path="/myapp" docBase="/data/webapps/myapp" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs"
prefix="www.hcstart.com_access_log" suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
[root@node1 webapps]# cat myapp/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>JSP Test Page</title>
</head>
<body>
<% out.println("Myapp Test Page."); %>
</body>
</html>
然后访问各自目录:
1、首先访问网站的根目录:http://www.hcstart.com:8080
404报错
3、修改
<Host name="www.hcstart.com" appBase="/data/webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="myapp" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs"
prefix="www.hcstart.com_access_log" suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
docBase="myapp",这里使用的是映射别名,实际是/data/webapps/myapp所以访问http://www.hcstart.com:8080映射到了myapp下面,并没有访问appBase="/data/webapps"这个下面的index.jsp
当访问http://www.hcstart.com:8080/myapp的时候appBase="/data/webapps"这是网站的根,然后寻找下面的myapp目录,然后读取index.jsp
所以两者访问一致
 
4、部署一个webapp:
<Host name="www.hcstart.com" appBase="/data/webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/data/webapps" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs"
prefix="www.hcstart.com_access_log" suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
然后将war包丢进/data/webapps,会自动解压,并且自动部署
[root@node1 webapps]# pwd
/data/webapps
[root@node1 webapps]# ll
total 7372
drwxr-xr-x 2 root root 4096 Aug 8 09:48 classes
drwxr-x--- 10 root root 4096 Aug 8 11:02 estore
-rw-r--r-- 1 root root 7520739 Aug 8 10:49 estore.war
-rw-r--r-- 1 root root 202 Aug 8 09:51 index.jsp
drwxr-xr-x 2 root root 4096 Aug 8 09:48 lib
drwxr-xr-x 2 root root 4096 Aug 8 09:48 META-INF
drwxr-xr-x 2 root root 4096 Aug 8 09:48 WEB-INF
重启catalina.sh,然后访问:http://www.hcstart.com:8080/estore
如果再在webapps目录下创建myapp,并且将war包丢进myapp,那么访问时将会报错
总结:war包只能放置在webapps目录下面,如果自动解包,自动部署,那么将不会报错
 
结合nginx:

location / {
  root html;
  index index.html index.htm;
  proxy_pass http://www.hcstart.com:8080;
}

[root@node1 html]# ls -l estore/
total 168
-rw-r----- 1 root root 3051 Aug 8 13:51 404.jsp
-rw-r----- 1 root root 2890 Aug 8 13:51 500.jsp
-rw-r----- 1 root root 1112 Aug 8 13:51 add_good.jsp
-rw-r----- 1 root root 482 Aug 8 13:51 admin_index.jsp
-rw-r----- 1 root root 953 Aug 8 13:51 buyorcart.jsp
-rw-r----- 1 root root 5065 Aug 8 13:51 cart.jsp
-rw-r----- 1 root root 2288 Aug 8 13:51 confirm.jsp
drwxr-x--- 3 root root 4096 Aug 8 13:51 data
-rw-r----- 1 root root 584 Aug 8 13:51 goods_admin.jsp
-rw-r----- 1 root root 11016 Aug 8 13:51 goods_detail.jsp
-rw-r----- 1 root root 1762 Aug 8 13:51 goods.jsp
drwxr-x--- 7 root root 4096 Aug 8 13:51 images
drwxr-x--- 2 root root 4096 Aug 8 13:51 inc
-rw-r----- 1 root root 43682 Aug 8 13:51 index.jsp
drwxr-x--- 2 root root 4096 Aug 8 13:51 js
-rw-r----- 1 root root 3421 Aug 8 13:51 login.jsp
-rw-r----- 1 root root 219 Aug 8 13:51 loginOut.jsp
drwxr-x--- 2 root root 4096 Aug 8 13:51 META-INF
-rw-r----- 1 root root 3459 Aug 8 13:51 orders_detail.jsp
-rw-r----- 1 root root 2946 Aug 8 13:51 orders.jsp
-rw-r----- 1 root root 4047 Aug 8 13:51 orders_submit.jsp
-rw-r----- 1 root root 4080 Aug 8 13:51 pay.jsp
-rw-r----- 1 root root 576 Aug 8 13:51 pay_success.jsp
-rw-r----- 1 root root 5645 Aug 8 13:51 register.jsp
drwxr-x--- 4 root root 4096 Aug 8 13:51 themes
drwxr-x--- 5 root root 4096 Aug 8 13:51 upload
-rw-r----- 1 root root 1836 Aug 8 13:51 validatecode.jsp
drwxr-x--- 4 root root 4096 Aug 8 13:51 WEB-INF
[root@node1 html]# pwd
/usr/local/nginx/html

开启nginx的80服务:

原文地址:https://www.cnblogs.com/jsonhc/p/7306855.html