zoukankan      html  css  js  c++  java
  • 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服务:

  • 相关阅读:
    我们失去了,我们又没有失去什么
    人过 40
    KPI绩效考核为何在国内不管用?
    再也不必当心我的密码了,多个SAP 客户端自动输入密码
    大器晚成
    人际能量相吸定律
    SQL SERVER函数——表值函数的处理
    MS-SQL SERVER单列合并的四种常用方法
    实战 SQL Server 2008 数据库误删除数据的恢复
    唉,怎么一眨眼就老了!
  • 原文地址:https://www.cnblogs.com/jsonhc/p/7306855.html
Copyright © 2011-2022 走看看