神刀安全网

Tomcat基础配置详解

Tomcat(一):基础配置详解

简介:

Servlet(Server Applet),全称Java Servlet。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

Sun公司创建了第一个Servlet容器,即Java Web Server,但JWS只是为了演示Servlet的相应功能,所以其很不稳定。与此同时,Apache软件基金创建了JServ项目,一个能够与Apache整合起来的Servlet容器。1999年,Sun把JWS捐给了Apache软件基金,于是两个项目合二为一,即今天Tomcat的前身。第一个Tomcat版本是Tomcat 3.x系列,而发布于2001年Tomcat 4.0则是在此前基础上进行了重新设计和实现,其代码项目被命名为Catalina。

Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun公司提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。由于Tomcat本身也内含了一个HTTP服务器,它也可以被视作一个单独的Web服务器。但是,不能将Tomcat和Apache Web服务器混淆,Apache Web Server是一个用C语言实现的HTTP web server;这两个HTTP web server不是捆绑在一起的。Apache Tomcat包含了一个配置管理工具,也可以通过编辑XML格式的配置文件来进行配置。

Tomcat提供了一个Jasper编译器用以将JSP编译成对应的Servlet。Tomcat的Servlet引擎通常与Apache或者其他Web服务器一起工作。除了用于开发过程中的调试以及那些对速度和事务处理只有很小要求的用户,很少会将Tomcat单独作为Web服务器。但随着版本的更新,正有越来越多的用户将其单独作为Web服务器用以那些对速度和可靠性有较高要求的环境中。

Tomcat不是一个完整意义上的Jave EE服务器,它甚至都没有提供对哪怕是一个主要Java EE API的实现;但由于遵守Apache开源协议,Tomcat却又为众多的Java应用程序服务器嵌入自己的产品中构建商业的Java应用程序服务器,如JBoss和JOnAS。尽管Tomcat对Jave EE API的实现并不完整,然而很企业也在渐渐抛弃使用传统的Java EE技术(如EJB)转而采用一些开源组件来构建复杂的应用。这些开源组件如Structs、Spring和Hibernate,而Tomcat能够对这些组件实现完美的支持。

HTTP是一种无状态的协议,在用户的一次连接请求响应完成后,服务器端将无法识别在后续的连接请求中再次识别此用户,交将其所有请求关联起来。为了解决这个问题,java container通过一个临时的cookie来为此用户保存一个标识,此标识即所谓的用户session。

在第一次调用之后,JSP会被编译成一个servlet类,在后续的操作中则可以直接使用此类,从而避免了对每一次调用的都要重新分析和编译。因此,类似servlet,JSP的执行需要在container中完成。JSP的container跟servlet的container基本相同,但在JSP执行之前,需要一些额外的步骤如与servlet代码建立会话等。Tomcat包含了一个叫做Catalina的Servlet container(执行servlet和编译过的JSP)和一个JSP编译器(Jasper编译器)。事实上,一个包含了JSP编译器和Servlet容器的应用程序组合通过被称作Web容器。

JSP和Servlet的最大区别在于,Servlet通常需要事先编译好,而JSP则并非必须事先编译。这意味着Servlet通常放置于私有资源区域,而JSP则通常以嵌入代码的方式包含于HTML页面文件中,这些HTML文件通常放置在公开资源区域。

MVC架构:Controller,Model和View各自独立,一个流行的开源实现是Apache Structs框架;目今,设计优良的Web应用程序通常用相就的技术实现相应的功能,比如: 1、Servlet用于实现应用逻辑; 2、JSP用于内容展示; 3、标签库和JSP扩展语言用于替换在JSP内部嵌入Java代码,进而降低了HTML维护的复杂度; 4、MVC框架用于实现展示和应用逻辑的分离;

安装tomcat:

先安装Jvm:

安装openjdk或oracle jdk:

1、安装openjdk:

[root@node0 ~]# yum install java-1.7.0-openjdk [root@node0 ~]# java -version java version "1.7.0_79" OpenJDK Runtime Environment (rhel-2.5.5.4.el6-x86_64 u79-b14) OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

2、安装oracle jdk: Jdk7下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

[root@node0 ~]# yum install jdk-7u79-linux-x64.rpm [root@node0 ~]# vim /etc/profile.d/java.sh export JAVA_HOME=/usr/java/default export PATH=$JAVA_HOME/bin:$PATH [root@node0 java]# source /etc/profile.d/java.sh [root@node0 java]# java -version java version "1.7.0_79" Java(TM) SE Runtime Environment (build 1.7.0_79-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

安装tomcat:

官网:http://tomcat.apache.org

[root@node0 ~]# tar xf apache-tomcat-7.0.65.tar.gz -C /usr/local/ [root@node0 ~]# cd /usr/local/ [root@node0 local]# ln -sv apache-tomcat-7.0.65 tomcat "tomcat" -> "apache-tomcat-7.0.65" [root@node0 ~]# vim /etc/profile.d/tomcat.sh export CATALINA_HOME=/usr/local/tomcat export PATH=$CATALINA_HOME/bin:$PATH [root@node0 ~]# source /etc/profile.d/tomcat.sh

提供脚本:

[root@node0 ~]# cat /etc/rc.d/init.d/tomcat #!/bin/sh # Tomcat init script for Linux. # # chkconfig: 2345 96 14 # description: The Apache Tomcat servlet/JSP container. # JAVA_OPTS='-Xms64m -Xmx128m' JAVA_HOME=/usr/lib/jvm/jre 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}"   exit 1   ;; esac [root@node0 ~]# chmod +x /etc/rc.d/init.d/tomcat [root@node0 ~]# chkconfig tomcat --add

配置文件:

[root@node3 tomcat]# ls conf/    //:Tomcat的配置文件; server.xml:Tomcat的主配置文件,包含Service,Connector,Engine,Realm,Valve,Hosts主组件的相关配置信息; web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的Web应用程序提供包括MIME映射等默认配置信息; tomcat-user.xml:Realm认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认情况下会用到此文件;在Tomcat中添加/删除用户,为用户指定角色等将通过编辑此文件实现; catalina.policy:Java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力; catalina.properties:Tomcat内部package的定义及访问相关的控制,也包括对通过类装载器装载的内容的控制;Tomcat6在启动时会事先读取此文件的相关设置; logging.properties:Tomcat通过自己内部实现的JAVA日志记录器来记录操作相关的日志,此文件即为日志记录器相关的配置信息,可以用来定义日志记录的组件级别以及日志文件的存在位置等;     context.xml:每个webapp都有其配置文件,通常位于webapp目录下的WEB-INF目录中,通常用于定义会话管理器、Realm以及JDBC等;此配置文件是用于为部署在当前tomcat实例上的所有的webapp提供默认配置;

主配置文件:

组件:由java类实现;有些组件实现的方式不止一种;有些组件可以实现嵌套别的组件;由一组嵌套的层次和组件组成,一般可分为以下四类

顶级类组件:位于配置层次的顶级,并且彼此间有着严格的对应关系;

连接器组件:连接客户端(可以是浏览器或Web服务器)请求至Servlet容器,

容器类组件:包含一组其它组件;

被嵌套类组件:位于一个容器当中,但不能包含其它组件;

各常见组件:

1、服务器(server):Tomcat的一个实例,通常一个JVM只能包含一个Tomcat实例;因此,一台物理服务器上可以在启动多个JVM的情况下在每一个JVM中启动一个Tomcat实例,每个实例分属于一个独立的管理端口。这是一个顶级组件。

2、服务(service):一个服务组件通常包含一个引擎和与此引擎相关联的一个或多个连接器。给服务命名可以方便管理员在日志文件中识别不同服务产生的日志。一个server可以包含多个service组件,但通常情下只为一个service指派一个server。

连接器类组件:

3、连接器(connectors):负责连接客户端(可以是浏览器或Web服务器)请求至Servlet容器内的Web应用程序,通常指的是接收客户发来请求的位置及服务器端分配的端口。默认端口通常是HTTP协议的8080,管理员也可以根据自己的需要改变此端口。一个引擎可以配置多个连接器,但这些连接器必须使用不同的端口。默认的连接器是基于HTTP/1.1的Coyote。同时,Tomcat也支持AJP、JServ和JK2连接器。

容器类组件:

4、引擎(Engine):引擎通是指处理请求的Servlet引擎组件,即Catalina Servlet引擎,它检查每一个请求的HTTP首部信息以辨别此请求应该发往哪个host或context,并将请求处理后的结果返回的相应的客户端。严格意义上来说,容器不必非得通过引擎来实现,它也可以是只是一个容器。如果Tomcat被配置成为独立服务器,默认引擎就是已经定义好的引擎。而如果Tomcat被配置为Apache Web服务器的提供Servlet功能的后端,默认引擎将被忽略,因为Web服务器自身就能确定将用户请求发往何处。一个引擎可以包含多个host组件。

5、主机(Host):主机组件类似于Apache中的虚拟主机,但在Tomcat中只支持基于FQDN的“虚拟主机”。一个引擎至少要包含一个主机组件。

6、上下文(Context):Context组件是最内层次的组件,它表示Web应用程序本身。配置一个Context最主要的是指定Web应用程序的根目录,以便Servlet容器能够将用户请求发往正确的位置。Context组件也可包含自定义的错误页,以实现在用户访问发生错误时提供友好的提示信息。

被嵌套类(nested)组件:

这类组件通常包含于容器类组件中以提供具有管理功能的服务,它们不能包含其它组件,但有些却可以由不同层次的容器各自配置。

7、阀门(Valve):用来拦截请求并在将其转至目标之前进行某种处理操作,类似于Servlet规范中定义的过滤器。Valve可以定义在任何容器类的组件中。Valve常被用来记录客户端请求、客户端IP地址和服务器等信息,这种处理技术通常被称作请求转储(request dumping)。请求转储valve记录请求客户端请求数据包中的HTTP首部信息和cookie信息文件中,响应转储valve则记录响应数据包首部信息和cookie信息至文件中。

8、日志记录器(Logger):用于记录组件内部的状态信息,可被用于除Context之外的任何容器中。日志记录的功能可被继承,因此,一个引擎级别的Logger将会记录引擎内部所有组件相关的信息,除非某内部组件定义了自己的Logger组件。

9、领域(Realm):用于用户的认证和授权;在配置一个应用程序时,管理员可以为每个资源或资源组定义角色及权限,而这些访问控制功能的生效需要通过Realm来实现。Realm的认证可以基于文本文件、数据库表、LDAP服务等来实现。Realm的效用会遍及整个引擎或顶级容器,因此,一个容器内的所有应用程序将共享用户资源。同时,Realm可以被其所在组件的子组件继承,也可以被子组件中定义的Realm所覆盖。

应用部署:

tomcat的应用程序必须被“部署”才能够被访问:

部署:是指将webapp及其所依赖的类库等装载进tomcat实例,以便接收用户请求的操作过程;

部署方式:

静态方式(冷部署):在tomcat启动之前进行的部署;

动态方式(热部署):在不打断tomcat实例运行的前提下,通过tomcat manager或其它的部署工具进行的部署;

具体的部署工具:

Tomcat Manager

ANT脚本

TCD: tomcat client deployer

部署相关的操作:

Deploy:将webapp的源文件放置于目标目录、配置tomcat服务器能够基于context中定义的路径来访问此webapp,并将其特有的类通过class loader装载到tomcat实例上;

Redeploy:重新部署,常用于升级时;

Undeploy:反部署,停止webapp,并从tomcat实例移除其部分文件和部署名;

Stop:停止;

Start:启动

webapp应用程序:有多种归档格式

*.war:web应用程序 *.jar:EJB类 *.rar:资源适配器 *.ear:企业级应用程序

对于一个Web应用程序而言,其通常由Servlets、JSP和其它文件等共同组成。这些文件通常被打包成WAR(Web Application Archive)格式,并以.war作为打包后的文件扩展名。而Servlet规范则定义了在WAR内部组织这些文件的标准目录结构。其目录和功用如下:

/:Web应用程序的根目录,所有可被公开访问的文件均放置于此处,如HTML、JSP和图片文件等; /WEB-INF:此目录为私有资源目录,其内部的所有文件和子目录均不能被公开访问;包含着此Web应用程序的配置文件web.xml(程序结构描述符文件)通常放置于此目录; /WEB-INF/classes:当前Web应用程序的类文件的存在目录; /WEB-INF/lib:可被打包为JAR格式的类文件通常放置于此目录;

tomcat自带的两webapp:

manager:管理器

输出状态信息

部署webapp

host-manager:主机管理器

配置示例:

定义管理页面用户名及密码:

[root@node0 ~]# cd /usr/local/tomcat/conf [root@node0 conf]# vim tomcat-users.xml <role rolename="manager-gui"/>   <role rolename="admin-gui"/>   <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>  [root@node0 conf]# service tomcat restart

访问测试:

输入用户名和密码:

Tomcat基础配置详解

服务状态页:

Tomcat基础配置详解

应用管理页:

Tomcat基础配置详解

主机管理页:

Tomcat基础配置详解

手动定义一个资源:

[root@node0 ~]# mkdir -p /tomcat/webapps/test/WEB-INF/{classess,lib} [root@node0 ~]# cd /tomcat/webapps/test [root@node0 app]# vim index.jsp <%@ page language="java" %> <html>   <head><title>JSP Test Page</title></head>   <body>     <h1><font color="red">node0.chencer.org</font></h1>     <table align="centre" border="1">       <tr>         <td>Session ID</td>     <% session.setAttribute("chencer.org","chencer.org"); %>         <td><%= session.getId() %></td>       </tr>       <tr>         <td>Created on</td>         <td><%= session.getCreationTime() %></td>      </tr>     </table>   </body> </html>

定义虚拟主机:

[root@node0 ~]# cd /usr/local/tomcat/conf [root@node0 conf]# vim server.xml <Engine name="Catalina" defaultHost="node0.chencer.org">    //:默认主机设置为node0.chencer.org;  <Host name="node0.chencer.org" appBase="/tomcat/webapps" unpackWARs="true" autoDeploy="true"> </Host>

访问测试:

Tomcat基础配置详解

实例:

部署站点程序;

站点程序包:JspRun! 6.0.0 GBK.zip

部署站点文件:

[root@node0 ~]# unzip JspRun/!_6.0.0_GBK.zip [root@node0 ~]# mv upload /tomcat/webapps/jsprun [root@node0 ~]# cd /tomcat/webapps/jsprun/ [root@node0 jsprun]# vim config.properties dbhost = 192.168.1.4 dbport=3306 dbuser = jruser dbpw = jrpass dbname = jrdb

定义虚拟主机:

[root@node0 ~]# cd /usr/local/tomcat [root@node0 tomcat]# vim conf/server.xml <Host name="node0.chencer.org" appBase="/tomcat/webapps" unpackWARs="true" autoDeploy="true"> <Context path="/bbs" docBase="jsprun" /> </Host>

安装并启动mysql:

[root@node0 mysql-5.5-rpm]# yum install  MySQL-shared-compat-5.5.48-1.el6.x86_64.rpm MySQL-client-5.5.48-1.el6.x86_64.rpm MySQL-server-5.5.48-1.el6.x86_64.rpm [root@node0 ~]# service mysql start

创建数据库,并赋予权限:

[root@node0 ~]# mysql mysql> create database jrdb; Query OK, 1 row affected (0.00 sec) mysql> grant all on jrdb.* to 'jruser'@'192.168.1.4' identified by 'jrpass'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)

站点安装:

Tomcat基础配置详解

访问测试:

Tomcat基础配置详解

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » Tomcat基础配置详解

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
分享按钮