zoukankan      html  css  js  c++  java
  • Tomcat基础

    Tomcat简介

      The Apache Tomcat software is an open source implementation of the Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket technologies.

      Apache Tomcat是Java Servlet,JavaServer Pages,Java Expression Language和Java WebSocket技术的开源实现。通俗的说,就是专门的JAVA应用程序服务器。

      官方站点:http://tomcat.apache.org

    Tomcat安装

      由于Tomcat是由Java语言编写,我们就将它视作一个java应用,而java应用的运行需要依赖其运行环境,即JDK(Java Development Kit).所以,我们要先安装JDK,再安装Tomcat.

      JDK有两个主要分支:

        OpenJDKOracle JDK

      Tomcat的安装方式有:

        RPM包安装:依次安装tomcat,tomcat-lib,tomcat-webapps,tomcat-admin-webapps

        通用二进制安装:官方站点提供的二进制包,根据需要选择安装即可

        源码编译安装:在此暂不讨论

      接下来简单演示一下Tomcat的通用二进制安装:

        环境配置:

          OS:CentOS 6.8

          JDK:java-1.6.0-openjdk.x86_64

          Tomcat:apache-tomcat-6.0.48.tar.gz

          Others:Development Tools , Server Platform Development , java-1.6.0-openjdk-devel.x86_64

      安装配置过程:

        注意:不要用root用户运行tomcat,建议创建用户tomcat运行。

        # tar xf apache-tomcat-Version.tar.gz -C /usr/local

        # cd /usr/local

        # ln -s apache-tomcat-Version tomcat

        安装完毕,创建tomcat服务启动脚本:

        # sudo vim /etc/init.d/tomcat

    #!/bin/bash
    # chkconfig: 2345 80 80 
    # description: Start tomcat Service
    
    VA_HOME=/usr/local/latest
    CATALINA_HOME=/usr/local/tomcat
    export JAVA_HOME 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}"
            ;;
    esac

        将脚本加入服务中:

        # sudo chkconfig --add tomcat

        启动服务:

        # service tomcat start

        可以看到如下页面,安装配置即成功:


    Tomcat配置详解

      配置文件概述:conf目录  

        server.xml:主配置文件

        context.xml:每个webapp都可以有专用的配置文件,这些配置文件通常位于webapp应用程序自己的目录下的WEB-INF目录中;此context.xml为每个webapp提供默认配置

        web.xml:每个webapp只有在被“部署”后才能被访问,此文件用于为各webapp定义默认部署方式

        tomcat-users.xml:用户认证的账号和密码文件,用来管理tomcat状态

        catalina.policy:当使用-security选项来启动tomcat实例时,会取此配置文件来实现基于安全策略的运行方式

        catalina.properties:java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关的参数等

        logging.properties:日志系统相关的配置

      应用程序目录:webapps目录

        应用程序放在此目录下,如系统自带的ROOT目录;自行创建一个测试应用testapp:

        # mkdir testapp/{WEB-INF,META-INF,lib,classes} -pv  

    /*应用程序的基本结构*/
    
    index.jsp  //主页
    
    WEB-INF/  //当前webapp的私有资源目录,通常存放当前webapp自用的web.xml;
    
    META-INF/  //当前webapp的私有资源目录,通常存放当前webapp自用的context.xml;
    
    classes/  //类文件
    
    lib/  //当前webapp的私有类,被打包成jar格式

        # vim index.jsp

    <%@ page language='java' %>
    <%@ page import='java.util.*' %>
        <html>
            <head>
            <title>JSP TEST PAGE</title>
        </head>
        <body>
            <% out.println("hello world"); %>
        <body>
        </html>    

        测试效果如下:


        server.xml主配置组件:   

    /*大体结构*/
    
    <Server>
        <Service>
            <Connector>
            </Connector>
                <Engine>
                    <Host>
                        <Context/>
                        ...
                    </Host>
                    <Host>
                    </Host>
                    ...
                </Engine>
        </Service>
    </Server>

        Server:

          tomcat实例,即运行的一个jvm进程;监听于8005端口接收“SHUTDOWN”.各server监听的端口不能相同,因此,一个物理主机上启动多个server实例应该使用不同的端口。

        Service:

          用于实现将一个或多个Connector关联至一个Engine

        Connector:

          tomcat可用的连接器,貌似只有这两种比较流行,即HTTP和AJP.其常用的属性有:

    address  //监听的IP地址
    
    maxThreads  //最大并发连接数,默认为150
    
    port  //监听的端口
    
    protocol  //连接器使用的协议,一般为HTTP1.1或AJP1.3
    
    redirectPort  //重定向端口
    
    connectionTimeout  //连接的超时时长,单位毫秒,默认60000
    
    enableLookups  //是否通过DNS进行查询,最好不要用
    
    acceptCount  //定义等待队列的长度
    
    debug  //是否开启调试功能

          进入Tomcat的请求可分为两类:

            (1)Tomcat作为单独的应用程序服务器(standalone),此时请求来源自浏览器(HTTP,HTTPS);

            (2)Tomcat作为非独立的应用程序服务器,请求来自于前面的反代主机:

              httpd:http,https,ajp

              nginx:http,https

        Engine:

          servlet的一个实例,即servlet引擎,其内部可有一个或多个Host组件,从而提供站点服务;通常要通过defaultHost来定义默认虚拟主机.

          常用属性:

    name=
    defaultHost=
    jvmRoute=

        Host:

          位于Engine容器中用于接收请求并进行相应处理的主机或虚拟主机

          常用属性:

    appBase  //此Host的webapp目录,即存放非归档的web应用程序的目录或归档后的WAR文件目录路径;可以使用基于$CATALINA_HOME的相对路径;
    autoDeploy  //在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true;
    unpackWARs  //在启用此webapp时是否对WAR格式的归档文件先进行展开操作;默认为true;
    xmlValidation  //是否启用xml验证
    xmlNamespaceAware  //是否启用xml的名称空间

          配置示例:

    <Host name='localhost' appBase='webapp'
        unpackWARs='true' autoDeploy='true'
        xmlValidation='false' xmlNamespaceAware='false'>
    </Host>

        Context:

          定义用于标识tomcat实例中的一个Web应用程序      

          常用属性:

    className  //实现了org.apache.catalina.Context接口的类,标准实现类org.apache.catalina.core.StandardContext类
    
    cookies  //是否将Cookie应用于Session,默认值为true
    
    crossContext  //是否允许跨域访问,为true时,在程序内调用ServletContext.getContext()方法将返回一个虚拟主机上其它web程序的请求调度器。默认值为false,调 径用getContext()返回为null
    
    docBase  //绝对路径或相对于Host的appBase属性的相对路径
    
    privileged  //为true,允许Web应用程序使用容器的Servlet
    
    path  //指定上下文路径。一个虚拟主机中,上下文路径必须唯一
    
    reloadable  //为true,Tomcat运行时,如果WEB-INF/classes和WEB-INF/lib目录中有改变,Tomcat会自动重新加载该WEB应用程序。虽方便,但开销也大,默认值为false,我们在调用可以打开,发布后再关闭。
    
    cacheMaxSize  //静态资源缓存最大值,以KB为单位,默认值为10240KB
    
    cachingAllowed  //是否允许静态资源缓存,默认为true
    
    caseSensitive  //默认为true,资源文件名大小写敏感,如果为false大小写不敏感
    
    unpackWAR  //默认为true
    
    workDir  //为WEB应用程序内部的Servlet指定临时读写的目录路径名。如没有设置,则Tomcat会在%CATALINA_HOME%/work目录下提供一个合适的目录

          配置示例:

    <Host name='www.a.com' appBase='webapp' unpackWARs='true' autoDeploy='true'>
      <Context path='/test' docBase='testapp' reloadable='true'>
      </Context>
    </Host>

        Realm:

          一个Realm表示一个安全上下文,它是一个授权访问某个给定Context的用户列表和某用户所允许切换的角色相关定义的列表。因此,Realm就像是一个用户和组相关的数据库。定义Realm时惟一必须要提供的属性是classname,它是Realm的多个不同实现,用于表示此Realm认证的用户及角色等认证信息的存放位置。      

          JAASRealm:基于Java Authintication and Authorization Service实现用户认证;

          JDBCRealm:通过JDBC访问某关系型数据库表实现用户认证;

          JNDIRealm:基于JNDI使用目录服务实现认证信息的获取;

          MemoryRealm:查找tomcat-user.xml文件实现用户信息的获取;

          UserDatabaseRealm:基于UserDatabase文件(通常是tomcat-user.xml)实现用户认证,它实现是一个完全可更新和持久有效的MemoryRealm,因此能够跟标准的MemoryRealm兼容;它通过JNDI实现;

          配置示例:

    /*下面是一个常见的使用UserDatabase的配置:*/
    <Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
    resourceName=”UserDatabase”/>
    
    /*下面是一个使用JDBC方式获取用户认证信息的配置:*/
        <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
            driverName="org.gjt.mm.mysql.Driver"
            connectionURL="jdbc:mysql://localhost/authority"
            connectionName="test" connectionPassword="test"
            userTable="users" userNameCol="user_name"
            userCredCol="user_pass"
            userRoleTable="user_roles" roleNameCol="role_name" />

        Valve:

          类似于过滤器,可工作于Engine和Host/Context之间、Host和Context之间以及Context和Web应用程序的某资源之间。一个容器内可以建立多个Valve,其定义次序也决定了其生效次序。  

    AccessLogValve  //访问日志Valve
    
    ExtendedAccessValve  //扩展功能的访问日志Valve
    
    JDBCAccessLogValve  //通过JDBC将访问日志信息发送到数据库中;
    
    RequestDumperValve  //请求转储Valve;
    
    RemoteAddrValve  //基于远程地址的访问控制;
    
    RemoteHostValve  //基于远程主机名称的访问控制;
    
    SemaphoreValve  //用于控制Tomcat主机上任何容器上的并发访问数量;
    
    JvmRouteBinderValve  //在配置多个Tomcat为以Apache通过mod_proxy或mod_jk作为前端的集群架构中,当期望停止某节点时,可以通过此Valve将用记请求定向至备用节点;使用此Valve,必须使用JvmRouteSessionIDBinderListener;
    
    ReplicationValve  //专用于Tomcat集群架构中,可以在某个请求的session信息发生更改时触发session数据在各节点间进行复制;
    
    SingleSignOn  //将两个或多个需要对用户进行认证webapp在认证用户时连接在一起,即一次认证即可访问所有连接在一起的webapp;
    
    ClusterSingleSingOn  //对SingleSignOn的扩展,专用于Tomcat集群当中,需要结合ClusterSingleSignOnListener进行工作;

          配置示例:  

    <Context path='/test' docBase='testapp' reloadable='true'>
        <Valve className='org.apache.catalina.valves.RemoteAddrValve' allow='127.0.0.1' />
    </Context>

          相关属性:

    className  //相关的java实现的类名,分别应该为org.apache.catalina.valves.RemoteAddrValve或'org.apache.catalina.valves.RemoteHostValve;
    
    allow  //以逗号分开的允许访问的IP地址列表,支持正则表达式;点号“.”用于定义IP地址时需要转义;仅定义allow时,非明确allow的地址都被deny;
    
    deny  //以逗号分开的禁止访问的IP地址列表,同allow;

          

        

        

      

  • 相关阅读:
    SQL性能优化(不断总结)
    字符编码:区位/国标(gb2312、gbk)/机内码/ASCII/ANSI/Big5
    计算机中信息编码
    删除sybase一列报错:The 'select into' database option is not enabled for database.....
    常用Oracle函数(From OTN)
    常用正则
    剖析Windows的消息运行机制 (学习一)
    服务器响应码及解释
    了解注册表结构
    Windows消息大全收藏
  • 原文地址:https://www.cnblogs.com/trymybesttoimp/p/6286836.html
Copyright © 2011-2022 走看看