• Tomcat全攻略


    内容:
    一:简单介绍
    二:安装及配置
    三:应用
    四:综述
    參考资料
    关于作者

    宗 锋
    西北大学计算机系硕士
    2001 年 12 月

    随着java的流行,其在web上的应用也越来越广,tomcat作为一个开源的servlet容器,应用前景越来越广,本文将向你讲述tomcat的一些知识。

    一:简单介绍
    tomcat是jakarta项目中的一个重要的子项目,其被JavaWorld杂志的编辑选为2001年度最具创新的java产品(Most Innovative Java Product),同一时候它又是sun公司官方推荐的servlet和jsp容器(详细能够见http://java.sun.com/products/jsp/tomcat/),因此其越来越多的受到软件公司和开发者的喜爱。servlet和jsp的最新规范都能够在tomcat的新版本号中得到实现。

    二:安装及配置
    tomcat最新版本号为4.0.1,这个版本号用了一个新的servlet容器Catalina,完整的实现了servlet2.3和jsp1.2规范。注意安装之前你的系统必须安装了jdk1.2以上版本号。

    (一):安装
    1:windows平台
    从tomcat站点下载jakarta-tomcat-4.0.1.exe,依照一般的windows程序安装步骤就可以安装好tomcat,安装时它会自己主动寻找你的jdk和jre的位置。

    2:linux平台
    下载jakarta-tomcat-4.0.1.tar.gz,将其解压到一个文件夹。

    (二):配置
    执行tomcat须要设置JAVA_HOME变量

    set JAVA_HOME=c:/jdk (win98,在msdos方式下使用,或者放入autoexec.bat中)
    export JAVA_HOME=/usr/local/jdk (linux下使用,放到/etc/bashrc或者/etc/profile中)
    
    


    (三):执行
    设置完成后就能够执行tomcatserver了,进入tomcat的bin文件夹,win98下用startup启动tomcat,linux下用startup.sh,对应的关闭tomcat的命令为shutdown和shutdown.sh。

    启动后能够在浏览器中输入http://localhost:8080/測试,因为tomcat本身具有webserver的功能,因此我们不必安装apache,当然其也能够与apache集成到一起,以下会介绍。

    以下你能够測试其自带的jsp和servlet演示样例。

    三:应用

    (一):文件夹结构
    tomcat的文件夹结构例如以下:

    文件夹名 简单介绍
    bin 存放启动和关闭tomcat脚本
    conf 包括不同的配置文件,server.xml(Tomcat的主要配置文件)和web.xml
    work 存放jsp编译后产生的class文件
    webapp 存放应用程序演示样例,以后你要部署的应用程序也要放到此文件夹
    logs 存放日志文件
    lib/japser/common 这三个文件夹主要存放tomcat所需的jar文件


    (二):server.xml配置简单介绍
    以下我们将讲述这个文件里的基本配置信息,更详细的配置信息见tomcat的文档

    元素名 属性 解释
    server port 指定一个port,这个port负责监听关闭tomcat的请求
    shutdown 指定向port发送的命令字符串
    service name 指定service的名字
    Connector
    (表示client和service之间的连接)
    port 指定server端要创建的port号,并在这个断口监听来自client的请求
    minProcessors server启动时创建的处理请求的线程数
    maxProcessors 最大能够创建的处理请求的线程数
    enableLookups 假设为true,则能够通过调用request.getRemoteHost()进行DNS查询来得到远程client的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
    redirectPort 指定server正在处理http请求时收到了一个SSL传输请求后重定向的port号
    acceptCount 指定当全部能够使用的处理请求的线程数都被使用时,能够放到处理队列中的请求数,超过这个数的请求将不予处理
    connectionTimeout 指定超时的时间数(以毫秒为单位)
    Engine
    (表示指定service中的请求处理机,接收和处理来自Connector的请求)
    defaultHost 指定缺省的处理请求的主机名,它至少与当中的一个host元素的name属性值是一样的
    Context
    (表示一个web应用程序,通常为WAR文件,关于WAR的详细信息见servlet规范)
    docBase 应用程序的路径或者是WAR文件存放的路径
    path 表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/****
    reloadable 这个属性很重要,假设为true,则tomcat会自己主动检測应用程序的/WEB-INF/lib 和/WEB-INF/classes文件夹的变化,自己主动装载新的应用程序,我们能够在不重起tomcat的情况下改变应用程序

    host
    (表示一个虚拟主机)

    name 指定主机名
    appBase 应用程序基本文件夹,即存放应用程序的文件夹
    unpackWARs 假设为true,则tomcat会自己主动将WAR文件解压,否则不解压,直接从WAR文件里执行应用程序

    Logger
    (表示日志,调试和错误信息)

    className 指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口
    prefix 指定log文件的前缀
    suffix 指定log文件的后缀
    timestamp 假设为true,则log文件名称中要增加时间,例如以下例:localhost_log.2001-10-04.txt

    Realm
    (表示存放username,password及role的数据库)

    className 指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口

    Valve
    (功能与Logger差点儿相同,其prefix和suffix属性解释和Logger 中的一样)

    className

    指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve类能够记录应用程序的訪问信息

    directory 指定log文件存放的位置
    pattern 有两个值,common方式记录远程主机名或ip地址,username,日期,第一行请求的字符串,HTTP响应代码,发送的字节数。combined方式比common方式记录的值很多其它

    注意:1:经过我測试,我设置Context 的path="",reloadable=true,然后放一个WAR文件到webapps文件夹,结果tomcat不能检測出此文件(重起tomcat能够),而把此文件解压,则tomcat会自己主动检測出这个新的应用程序。假设不能自己主动检測WAR文件,我们能够利用以下管理中讲的方法来部署应用程序。

    2:默认的server.xml中,Realm元素仅仅设置了一个className属性,但此文件里也包括几个通过JDBC连接到数据库进行验证的演示样例(被凝视掉了),通过Realm元素我们能够实现容器安全管理(Container Managed Security)。

    3:另一些元素我们没有介绍,如Parameter,loader,你能够通过tomcat的文档获取这些元素的信息。

    (三):管理

    1:配置
    在进行详细的管理之前,我们先给tomcat加入一个用户,使这个用户有权限来进行管理。

    打开conf文件夹下的tomcat-users.xml文件,在对应的位置加入以下一行:

     
    
    


    注意:这一行的最后部分一定是/>,tomcat的文档掉了/符号,假设没有/符号的话,tomcat重起时将无法訪问应用程序。通过logs/catalina.out文件你能够看到这个错误的具体信息。

    然后重起tomcat,在浏览器中输入http://localhost:8080/manager/,会弹出对话框,输入上面的username和password就可以。

    2:应用程序列表
    在浏览器中输入http://localhost:8080/manager/list,浏览器将会显演示样例如以下的信息:

    OK - Listed applications for virtual host localhost
    /ex:running:1
    /examples:running:1
    /webdav:running:0
    /tomcat-docs:running:0
    /manager:running:0
    /:running:0
    


    面的信息分别为应用程序的路径,当前状态(running 或者stopped),与这个程序相连的session数。

    3:又一次装载应用程序
    在浏览器中输入 http://localhost:8080/manager/reload?path=/examples,浏览器显演示样例如以下:

    OK - Reloaded application at context path /examples  
    
    


    表示example应用程序装载成功,假设我们将server.xml的Context元素的reloadable属性设为true(见上面表格),则不是必需利用这样的方式又一次装载应用程序,由于tomcat会自己主动装载。

    4:显示session信息
    在浏览器中输入http://localhost:8080/manager/sessions?path=/examples,浏览器显演示样例如以下:

    OK - Session information for application at context path /examples Default maximum session inactive interval 30 minutes  
    
    


    5:启动和关闭应用程序
    在浏览器中输入http://localhost:8080/manager/start?path=/examples和http://localhost:8080/manager/stop?path=/examples分别启动和关闭examples应用程序。

    6:部署及撤销部署
    WAR有两种组织方式,一种是按一定的文件夹结构组织文件,一种是一个后缀为WAR的压缩包,因此它的部署方式也有两种:
    (1):在浏览器中输入:http://localhost:8080/manager/install?path=/examples&war=file:/c:/examples
    就会将按文件夹结构组织的WAR部署

    (2):假设输入:http://localhost:8080/manager/install?path=/examples&war=jar:file:/c:/examples.war!/
    就会将按压缩包组织的WAR部署,注意此url后半部分一定要有!/号。

    部署后就能够用 http://localhost:8080/examples訪问了。

    在浏览器中输入:http://localhost:8080/manager/remove?path=/examples
    就会撤销刚才部署的应用程序。

    (四):与apache集成
    尽管tomcat也能够作webserver,但其处理静态html的速度比不上apache,且其作为webserver的功能远不如apache,因此我们想把apache和tomcat集成起来。

    我们以linux系统为例介绍.

    从apache站点下载apache1.3.22源码版本号,然后使用例如以下命令配置安装apache:

    mkdir /usr/local/apache
    tar zxvf apache.1.32.tar.gz
    cd apache.1.32
    ./configure --prefix=/usr/local/apache --enable-module=so 
    make
    make install
    
    


    注意configure命令指定目标安装文件夹,而且增加DSO(Dynamic Shared Object)支持,注意一定不要忘了这一个选项。

    然后下载webapp模块,将解压后mod_webapp.so文件放入apache的libexec文件夹,编辑apache的conf文件夹下的httpd.conf,在这个文件的最后增加以下三行:

    LoadModule webapp_module libexec/mod_webapp.so
    WebAppConnection warpConnection warp localhost:8008
    WebAppDeploy examples warpConnection /examples/ 
    
    


    第一行是添加webapp模块,假设编译apache时不添加DSO支持,则无法使用LoadModule指令,第二行指定tomcat与apache的连接,第三行指定部署那个应用,这两个指令使用格式例如以下:

    WebAppConnection [connection name] [provider] [host:port]
    WebAppDeploy [application name] [connection name] [url path]  
    
    


    当中connection name指定连接名,provider仅仅能是warp,port端口与你的tomcat的配置文件server.xml最后几行指定的要保持一致。文件例如以下:

     
    
    ******
     
    
    


    application name与你在tomcat中部署的应用名一致,url path指定訪问这个应用的url。比如上面的样例能够通过http://localhost/examples/来訪问tomcat中的examples应用。

    (五):中文问题
    一般jsp的乱码问题能够通过在jsp中增加<%@ page contentType="text/html;charset=GB2312" %>来解决,至于servlet的乱码在能够使用servlet2.3中提供的HttpServeletRequest.setCharacterEncoding函数。更具体的中文问题请见JSP/Servlet 中的汉字编码问题

    四:综述
    tomcat作为一个servlet(jsp也被编译为servlet运行)容器,其应用前景是很好的,假设与jboss结合起来,则能够实现sun的j2ee规范(用jboss作ejbserver)。jboss的官方站点也提供集成了tomcat3.2*的jboss以供下载。另外一个开源的应用server(enhydra) 也是基于tomcat的,其提供了更友好的管理界面,部署应用程序也更简单,功能也更强大。

    參考资料:

    • tomcat文档
    • www.jguru.com的tomcat faq
    • apache的文档


    关于作者
    宗锋:西北大学计算机系硕士,对于基于 web 的各种新技术都感兴趣。


  • 相关阅读:
    Java Spring Boot VS .NetCore (十) Java Interceptor vs .NetCore Interceptor
    Java Spring Boot VS .NetCore (九) Spring Security vs .NetCore Security
    IdentityServer4 And AspNetCore.Identity Get AccessToken 问题
    Java Spring Boot VS .NetCore (八) Java 注解 vs .NetCore Attribute
    Java Spring Boot VS .NetCore (七) 配置文件
    Java Spring Boot VS .NetCore (六) UI thymeleaf vs cshtml
    Java Spring Boot VS .NetCore (五)MyBatis vs EFCore
    Java Spring Boot VS .NetCore (四)数据库操作 Spring Data JPA vs EFCore
    Java Spring Boot VS .NetCore (三)Ioc容器处理
    Java Spring Boot VS .NetCore (二)实现一个过滤器Filter
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4052038.html
Copyright © 2020-2023  润新知