高性能Web服务之tomcat基础应用详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高性能Web服务之tomcat基础应用详解相关的知识,希望对你有一定的参考价值。
Tomcat概述:
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应html(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
Tomcat系统架构图如下所示:
=============================================================
server:服务器段,直接面向用户请求,tomcat的一个实例。 service:服务进程,deamon守护进程。 connect:连接器,用来连接server与service,当server接收请求后,通过连接器将请求传达给service。 engine:引擎,不同的引擎,提供了不同的方式处理serverlet,一个service中可以有多个engine,但是一般来说只有一个engine。 host:虚拟主机,可以有多个host,每个servername指向各自的host。 context:上下文,可以有多个,每一个context指向了不同的程序。 valve:阀门,用来定义一些独立的功能,如日志等,每一个host内可以有多个value,每一个value定义一个功能。 Realm:领域,用于用户的认证和授权。 Logger:用于记录组件内部的状态信息,可被用于除Context之外的任何容器中。
Tomcat服务安装配置:
(1)安装JDK
# rpm -ivh jdk-7u9-linux-x64.rpm --安装JDK后生成的文件 # cd /usr/java/ ; ll total 4 lrwxrwxrwx 1 root root 16 Sep 27 09:09 default -> /usr/java/latest drwxr-xr-x 10 root root 4096 Sep 27 09:09 jdk1.7.0_09 lrwxrwxrwx 1 root root 21 Sep 27 09:09 latest -> /usr/java/jdk1.7.0_09 --配置JDK环境变量 # vim /etc/profile.d/java.sh export JAVA_HOME=/usr/java/jdk1.7.0_09 export PATH=$PATH:$JAVA_HOME/bin --执行使环境变量生效 # . /etc/profile.d/java.sh --测试如下: # java -version java version "1.7.0_45" --jdk版本 OpenJDK Runtime Environment (rhel-2.4.3.3.el6-x86_64 u45-b15) OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)
(2)安装tomcat
--解压tomcat包至/usr/local下 # tar xf apache-tomcat-7.0.67.tar.gz -C /usr/local/ # cd /usr/local/ # ln -sv apache-tomcat-7.0.67 tomcat --配置tomcat环境变量 # vim /etc/profile.d/tomcat.sh export CATALINA_HOME=/usr/local/tomcat export PATH=$PATH:$CATALINA_HOME/bin # . /etc/profile.d/tomcat.sh --测试如下: # catalina.sh version Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/jdk1.7.0_09 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Server version: Apache Tomcat/7.0.67 Server built: Dec 7 2015 13:07:11 UTC Server number: 7.0.67.0 OS Name: Linux OS Version: 2.6.32-431.el6.x86_64 Architecture: amd64 JVM Version: 1.7.0_09-b05 JVM Vendor: Oracle Corporation --为tomcat提供srv启动脚本 # vim /etc/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/java/latest CATALINA_HOME=/usr/local/tomcat export JAVA_HOME CATALINA_HOME case $1 in start) $CATALINA_HOME/bin/catalina.sh start;; stop) $CATALINA_HOME/bin/catalina.sh stop;; restart) $CATALINA_HOME/bin/catalina.sh stop sleep 2 $CATALINA_HOME/bin/catalina.sh start;; *) echo "Usage: `basename $0` {start|stop|restart}" exit 1 ;; esac # chmod +x /etc/init.d/tomcat # chkconfig --add tomcat # service tomcat start --检查tomacat默认监听端口如下所示: # ss -tunlp | grep java tcp LISTEN 0 100 :::8080 :::* users:(("java",19525,42)) tcp LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* users:(("java",19525,47)) tcp LISTEN 0 100 :::8009 :::* users:(("java",19525,43))
访问测试如下:
Tomcat服务配置:
Tomcat的主要目录和文件:
/usr/local/tomcat
bin/ ----二进制文件目录。 - catalina.sh - ... conf/ ----配置文件目录。 - catalina.policy ----Java相关的安全策略配置文件; - catalina.properties ----Tomcat内部package的定义及访问相关的控制; - context.xml ----所有host的默认配置信息; - logging.properties ----日志记录器相关; - server.xml ----Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息; - tomcat-users.xml ----Realm认证时用到的相关角色、用户和密码等信息; - web.xml ----遵循Servlet规范标准的配置文件; lib/ ----class类库文件目录。 - catalina.jar - ... logs/ ----tomcat的日志目录。 temp/ ----临时文件目录。 webapps/ ----应用程序的默认存放目录。 - docs - examples - host-manager - manager - ROOT ----一般来说,当前版本所使用的APP会被通过ROOT来软链接。 ├── images/ ----图片文件目录 │ ├── void.gif │ └── ... ├── META-INF/ ----相当于一个信息包,用来配置应用程序、扩展程序、类加载器和服务manifest.mf文件,在用jar打包时自动生成。 ├── index.jsp ----JSP的默认文件,一般是默认主页。 └── WEB-INF/ ├── classes/ ----包含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中,编译成class的类库。 ├── lib/ ----存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件。 ├── ... └── web.xml ----Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。 work/ ----tomcat的工作目录,存放了已经编译好了的文件等。
Tomcat的管理脚本:
# catalina.sh --help Using CATALINA_BASE: /usr/local/tomcat --可以这边列出了CATALINA的一些ENV变量的值。 Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/jdk1.7.0_09 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Usage: catalina.sh ( commands ... ) --以下就是catalina.sh的命令使用帮助。 commands: debug Start Catalina in a debugger debug -security Debug Catalina with a security manager jpda start Start Catalina under JPDA debugger run Start Catalina in the current window run -security Start in the current window with security manager start Start Catalina in a separate window start -security Start in a separate window with security manager stop Stop Catalina, waiting up to 5 seconds for the process to end stop n Stop Catalina, waiting up to n seconds for the process to end stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running configtest Run a basic syntax check on server.xml - check exit code for result version What version of tomcat are you running? Note: Waiting for the process to end and use of the -force option require that $CATALINA_PID is defined
Tomcat主配置文件server.xml结构如下:
server.xml的基本结构: <server> <service> <connect /> <connect /> <engine> <host> <context /> <Logger /> <valve /> <Realm /> </host> </engine> </service> </server> ====================================================================================== 文件具体的解析: <?xml version=‘1.0‘ encoding=‘utf-8‘?> 定义了xml的版本和采用的编码。 <Server port="8005" shutdown="SHUTDOWN"> 定义在tomcat关闭时,传递给shutdown监听端口8005的字符串"SHUTDOWN". <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> 类库的调用和参数传递。 <Listener className="org.apache.catalina.security.SecurityListener" /> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JasperListener" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources> GlobalNamingResources 定义了服务器的全局JNDI资源来调用java API结构。 <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> <Service name="Catalina"> 定义了service的name。 <Connector port="8080" protocol="HTTP/1.1" http的连接器; 每一个连接器类似于定义了不同的端口,不同的协议来接收用户请求。 connectionTimeout="20000" redirectPort="8443" /> <Connector port="80" protocol="HTTP/1.1" http的连接器; 每一个连接器类似于定义了不同的端口,不同的协议来接收用户请求。 connectionTimeout="20000" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> ajp的连接器。 <!-- <Connector executor="tomcatThreadPool" tomcat的线程池关联的连接器。 port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" https的连接器相关。 maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" /> --> <Engine name="Catalina" defaultHost="localhost"> engine段,定义了engine name和访问/时,默认指向的虚拟主机。 <Realm className="org.apache.catalina.realm.LockOutRealm"> 安全上下文,基于UserDatabase文件(通常是tomcat-user.xml)实现用户认证。 <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps" 默认的虚拟主机localhost,指向了tomcat的默认页面。 unpackWARs="true" autoDeploy="true"> name虚拟主机名称,appbase程序的目录,unpackWARs自动展开WAR文件,autoDeploy热部署。 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/web/log" valve定义了日志相关。 prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> <Host name=‘www.samlee.com‘ appBase=‘/www/webapps‘ unpackWARs=‘ture‘ autoDeploy=‘false‘> 第二个虚拟主机www.samlee.com。 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/www/webapps/log" prefix="samlee_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="127\.0\.0\.1"/> <!-- 此处通过valve中的类RemoteAddrValve定义了基于ip的访问控制,拒绝了本地访问,类RemoteHostValve则是基于主机名的访问控制 当然其实此处的访问控制仅为演示,实际上并没有什么特殊意义!--> <Context path=‘/‘ docBase=‘/www/webapps/samlee‘ /> 定义了一个访问路径,如果访问/,相对应的路径为/www/webapps/samlee </Host> </Engine> </Service> </Server>
重启tomcat服务,通过以上配置两个虚拟主机:基于IP地址端口为8080与端口80 基于域名端口为8080与端口80的虚拟主机:
--创建虚拟主机目录 # mkdir -pv /www/webapps/{log,samlee,classes,META-INF,WEB-INF,lib} --创建index.jsp主页文件 # vim /www/webapps/samlee/index.jsp <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>JSP test page.</title> </head> <body> <% out.println("Hello,www.samlee.com!"); %> </body> </html> --创建test.jsp主页文件 # vim /www/webapps/samlee/test.jsp <%@ page language="java" %> <html> <head><title>samlee</title></head> <body> <h1><font color="red">www.samlee.com</font></h1> <table align="centre" border="1"> <tr> <td>Session ID</td> <% session.setAttribute("magedu.com","magedu.com"); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html> --重启tomcat服务 # service tomcat restart --查看tomcat监听端口 # ss -tunlp | grep java tcp LISTEN 0 100 :::8080 :::* users:(("java",20774,43)) tcp LISTEN 0 100 :::80 :::* users:(("java",20774,42)) tcp LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* users:(("java",20774,54)) tcp LISTEN 0 100 :::8009 :::* users:(("java",20774,44))
访问测试如下:
访问test.jsp测试页如下:
配置Tomcat Manager管理页面认证:
修改/usr/local/tomcat/conf/tomcat-users.xml内容如下所示即可:
重启tomcat服务,进入manager-gui管理界面,进入server status页面,可以显示服务器内容占用时间,如下所示:
以上为tomcat基础应用详解所有内容。
本文出自 “Opensamlee” 博客,请务必保留此出处http://gzsamlee.blog.51cto.com/9976612/1857075
以上是关于高性能Web服务之tomcat基础应用详解的主要内容,如果未能解决你的问题,请参考以下文章
高性能Web服务之haproxy应用详解及实现论坛的动静分离机制