1、首先是Tomcat的获取
获取当然得上Apache的官方网站下载,开源免费,而且带宽也足够。下载会很快。
这是两种不同的下载,一个是普通.exe安装版本,一个是.zip解压安装版本。使用起来是一样的,只是在普通安装版本中有一些界面可提供对Tomcat的快捷设置,而且普通安装会将Tomcat作为系统服务进行注册。
2、Tomcat的运行环境搭建
a、安装JDK:直接运行jdk-7-windows-i586.exe可执行程序,默认安装即可。安装完成后需要配置JDK环境变量
新建变量名:JAVA_HOME,指明JDK安装路径,变量值:C:\Program Files\Java\jdk1.7.02
打开PATH,添加变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin,使系统可以在任何路径下识别java命令
新建变量名:CLASSPATH,变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 这里最前面的点.不能省略,他表示当前路径。一定要注意所有符号都是英文状态的。变量值tools.jar后面也可以再添加个分号即“.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;”
b、测试java环境是否配置成功
在CMD命令下输入javac,java,javadoc命令:出现图示界面,表示安装成功。
写段java代码测试下:(保存在D:\javatest.java)
public class javatest { public static void main(String args[]) { System.out.println("Hello World!"); } }
注意:文件里第一行后面的javatest与文件名要保持一直,否则出现以下
显示“Hello World!”测试成功
b、安装tomcat
如果下载的是.zip格式的,直接解压,然后运行目录bin下面的startup.bat即可
如果启动不成功,一般的情况是控制台出来一下立即消失,说明Tomcat没有找到Java的运行时环境。这时就需要检查上面jdk安装和配置了启动Tomcat,在浏览器地址栏输入http://localhost:8080/如果看到乱七八糟的关于Tomcat的介绍神马,说明配置成功
如果下载的是.exe格式的,我们需要双击安装
双击D:\Program Files\Apache Software Foundation\Tomcat 7.0\bin目录下的
Tomcat7w.exe,启动Tomcat,在浏览器地址栏输入http://localhost:8080/如果看到乱七八糟的关于Tomcat的介绍神马,说明配置成功
也可以配置下Tomcat环境变量
新建变量名:CATALINA_BASE,变量值:D:\Program Files\Apache Software Foundation\Tomcat 7.0
新建变量名:CATALINA_HOME,变量值:D:\Program Files\Apache Software Foundation\Tomcat 7.0
新建变量名:TOMCAT_HOME,变量值:D:\Program Files\Apache Software Foundation\Tomcat 7.0
修改变量名:CLASSPATH,在末尾添加变量值:D:\Program Files\Apache Software Foundation\Tomcat 7.0\lib\servlet-api.jar
修改变量名:PATH,在末尾添加变量值:D:\Program Files\Apache Software Foundation\Tomcat 7.0\lib;D:\Program Files\Apache Software Foundation\Tomcat 7.0\bin
3、Tomcat的目录结构
bin目录存放一些启动运行Tomcat的可执行程序和相关内容。
conf存放关于Tomcat服务器的全局配置。
lib目录存放Tomcat运行或者站点运行所需的jar包,所有在此Tomcat上的站点共享这些jar包。 wabapps目录是默认的站点根目录,可以更改。
work目录用于在服务器运行时过度资源,简单来说,就是存储jsp、servlet翻译、编译后的结果。
4、更改Tomcat默认配置
修改Tomcat监听端口
tomcat默认的监听端口是8080,现在需要修改成80端口
用记事本打开Tomcat安装目录下的conf文件夹下的servlet.xml文件,在servlet.xml文件中找到以下代码:
将上面代码中的port="8080"修改为port="80",即可将Tomcat的默认端口设置为80。在修改端口时,应避免与公用端口冲突。修改成功后,为了使新设置的端口生效,还需要重新启动Tomcat服务器。
如果一台机器上部署多个tomcat,还需要修改下以下2处:
修改默认站点路径
如创建一个站点,再将其设置为默认站点,新站点路径d:/myweb;创建文件夹myweb,创建WEB-INF子文件夹,子文件夹里创建web.xml,完成。web.xml内容可以参考webapps/ROOT/WEB-INF/web.xml。
用记事本打开Tomcat安装目录下的conf文件夹下的servlet.xml文件,在servlet.xml文件中找到以下代码:
………… ……
以上定义了server中的一台主机(localhost),它的默认根目录是"webapps"(相对路径),现在我们要自己在Host下加上多个Context tag来创建多个自定义访问。在前插入:
rem
一般我们用Context来覆盖Host的appBase的设定而不是直接修改appBase.
path是说明虚拟目录的名字,如果你要只输入ip地址就显示主页,则该键值留为空;第一个Context用了path="",如果设置为path=""(注意不是path="/"),则相当于是这个Host的虚拟根目录,docBase则指出了物理目录的位置(可以是绝对也可以是相对于Host的appBase的位置,它默认的是$tomcat/webapps/root目录),
eg:将tomcat主目录修改为/app/apache-tomcat-7.0.61/webapps/bc_fund,要求直接访问http://ip:8080就可以直接访问bc_fund
第二个Context用了path="/xyz",如果你访问http://localhost/xyz/ 则会使用/mnt/test/里的内容。
debug 则是设定debug level, 0表示提供最少的信息,9表示提供最多的信息,privileged设置为true的时候,才允许Tomcat的Web应用使用容器内的Servlet,debug和reloadable一般都分别设置成0和true。然后重启tomcat
修改默认页面
conf/web.xml这个文件是对所有站点的共同属性做出了设置,
这个叫做欢迎页面,当没有输入资源地址时,会由上至下地查找,获取页面,进行响应。改动它就可以修改默认页面,但是不建议在这里改,会使所有站点设置变化。
index.html index.htm index.jsp
应该以上代码复制到你需要改动的站点WEB-INF目录下的web.xml中,进行设置,然后重启tomcat
扩展:
双击startup.bat后闪退,通过命令行启动提示:
the catalina_home environment variable is not defined correctly
this environment variable is needed to run this program
此时检查环境变量是否设置正确,
1、JAVA_HOME中的路径不能使用分号结尾,如 E:\Java\jdk1.6.0_10; 这样写就会出现提示CATALINA_HOME或是JAVA_HOME没有配置好的错误,,还有就是JAVA_HOME的路径一定不要写成了JRE的路径 2、如果定义了CATALINA_BASE,CATALINA_HOME,TOMCAT_HOME,路径不能以"\"结尾,如 E:\Java\apache-tomcat-6.0.29\ 这样写就会出现java.util.logging.ErrorManager的错...
如果设置没问题检查startup.bat、catalina.bat中定义的环境变量是否有问题,
在已解压的tomcat的bin文件夹下找到startup.bat,右击->编辑。在文件头加入下面两行:
SET JAVA_HOME=D:\Java\jdk1.6.0_10 (java jdk目录)
SET TOMCAT_HOME=E:\tomcat-6.0.35 (解压后的tomcat文件目录)
更改Tomcat命令行窗口标题
在%tomcat_home%\bin\catalina.bat中找到以下代码:
搜索“noTitle”或者“_EXECJAVA”
找到TITLE,后面就是窗口的标题:
:doStart
shift
if not "%OS%" == "Windows_NT" goto noTitle
if "%TITLE%" == "" set TITLE=EDR NEW:%cd% 修改此处
set _EXECJAVA=start "%TITLE%" %_RUNJAVA%
goto gotTitle
绑定Tomcat主机头
为了防止域名解析恶意指向,需要修改Tomcat的主机头,修改tomcat的 conf/server.xml
找到
添加
其中D:/tomcat-6.0.16/1webapps/jforum,D:/tomcat-6.0.16/1webapps/justin12是2个web应用程序
这样 D:/tomcat-6.0.16/1webapps/justin1对应的web应用使用http://www.justin1.com、http://10.10.2.43访问
这样 D:/tomcat-6.0.16/1webapps/justin12对应的web应用使用http://www.justin2.com访问
启动tomcat后显示中文乱码
tomcat内存设定
catalina.bat
set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -Duser.timezone=GMT+08
set JAVA_OPTS= -Xms1024M -Xmx1024M -XX:PermSize=256M -XX:MaxNewSize=256M -XX:MaxPermSize=256M
set JAVA_OPTS=%JAVA_OPTS% -server -Xms512m -Xmx512m -XX:MaxNewSize=256m -XX:PermSize=512M -XX:MaxPermSize=512m
-Xms1024M:java Heap初始大小。 默认是物理内存的1/64。(注意,不加M的话单位是KB)
-Xmx1029M:java heap最大值。建议均设为物理内存的一半。不可超过物理内存。
-XX:PermSize=256M:设定内存的永久保存区初始大小,缺省值为64M
-XX:MaxPermSize=256M:设定内存的永久保存区最大 大小,缺省值为64M
-XX:NewSize: 新生成的池的初始大小, 缺省值为2M
-XX:MaxNewSize=256M:新生成的池的最大大小,缺省值为32M。
还有一个-server参数,是指启动jvm时以服务模式启动,-Server模式启动时,速度较慢,但是一旦运行起来后,性能将会有很大的提升,不加这个参数,默认是以客户端模式启动。-server:一定要作为第一个参数,在多个CPU时性能佳。原因是:
当虚拟机运行在-client模式的时候,使用的是一个代号为C1的轻量级编译器, 而-server模式启动的虚拟机采用相对重量级,代号为C2的编译器. C2比C1编译器编译的相对彻底,,服务起来之后,性能更高。
怎么修改JVM的启动模式:
查看当前JVM启动模式
JVM启动时采用何种模式是在名为jvm.cfg的配置文件中配置的,64位系统默认在 JAVA_HOME/jre/lib/amd64/jvm.cfg、32在目录JAVA_HOME/jre/lib/i386/jvm.cfg
-server KNOWN
-client IGNORE
如果要切换启动模式,首先要确认JDK支持哪一种或两种模式。查看JAVA_HOME/jre/bin目录下是否存在client或server目录。32位的JDK一般都支持server和client两种模式。64位的虚拟机好像只支持server模式,没有client目录,64位因为只支持server模式,如果我们修改了配置,启动JVM时会报错,无法启动。切换模式只需要将client和server的声明语句互换位置即可。
catalina.sh
JAVA_OPTS="-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai"
最大连接数设定
Tomcat能处理的请求数,当一个进程的线程数超过500个的话,那么这个进程的运行效率就很低了。表面上看线程越多处理的请求越多,其实过多的线程会占用CPU在不同线程之间切换的资源,导致CPU在每个线程上处理的时间片极期有限,反而会降低服务器的响应性能。
server.xml
protocol="org.apache.coyote.http11.Http11AprProtocol" 启用APR连接模式,提高异步IO处理性能 connectionTimeout="20000"网络连接超时,单位毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。 redirectPort="8443" maxThreads="500"可创建的最大的线程数,每一个线程处理一个请求,默认为200 minSpareThreads="100"最小备用线程数,tomcat启动时的初始化的线程数,默认为25 maxSpareThreads="200"最大备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程; acceptCount="200"指定当可以使用的处理请求线程数都被使用时可以放到处理队列中的请求数,超过这个数的请求将拒绝连接,返回403。默认为100 maxIdleTime="30000" 如果一个线程在30秒以内没有活跃,终止运行并从线程池中移除。除非线程池数量小于或等于minSpareThreads数量。默认值是1分钟 enableLookups="false"是否允许DNS查询,为true调用request.getRemoteHost会执行DNS反查,反向解析IP对应的域名或主机,效率较低,建议为false。 /> Tomcat的并发请求处理数量=maxThreads + acceptCount 开启Tomcat APR运行模式,优化并发性能 Tomcat支持三种接收请求的处理方式:BIO、NIO、APR 。 tomcat9默认采用NIO模式启动,以哪种可以通过启动时界面查看 BIO模式: 阻塞式I/O操作,表示Tomcat使用的是传统Java I/O操作(即java.io包及其子包)。Tomcat7以下版本默认情况下是以bio模式运行的,由于每个请求都要创建一个线程来处理,线程开销较大,不能处理高并发的场景,在三种模式中性能也最低。
NIO模式: 是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,它拥有比传统I/O操作(bio)更好的并发运行性能,Tomcat8以上版本,默认使用的就是NIO模式。 要让Tomcat以nio模式来运行只需要在Tomcat安装目录/conf/server.xml文件中Connector中的protocol参数,讲protocol="HTTP/1.1" 修改为protocol="org.apache.coyote.http11.Http11NioProtocol" apr模式: Apache可移植运行时( Apache Portable Runtime,简称APR)是Apache HTTP服务器的支持库,提供了一组映射到下层操作系统的API。如果操作系统不支持某个特定的功能,APR将提供一个模拟的实现。这样程序员使用APR编写真正可在不同平台上移植的程序。 简单理解,就是从操作系统级别解决异步IO问题,大幅度的提高服务器的处理和响应性能, 也是Tomcat运行高并发应用的首选模式。 tomcat-native 库为 Tomcat 提供了本地实现。 tomcat-native 依赖于三个组件:APR, OPENSSL, JDK。 1、安装依赖库 yum install -y apr-devel openssl-devel gcc make openssl库要求在0.9.7以上版本,APR要求在1.2以上版本,用rpm -qa | grep openssl检查本机安装的依赖库版本是否大于或等于apr要求的版本。 2、安装apr动态库 tomcat-native 安装文件已经存在于 tomcat 中,位于 $CATALINA_HOME/bin 的文件 tomcat-native.tar.gz。 将文件 tomcat-native.tar.gz 拷贝出来后解压,配置,安装,动态库默认安装在/usr/local/apr/lib目录下 [root@justin soft]# cd tomcat-native-1.2.17-src/native/ [root@justin native]# ./configure ...... configure: error: APR could not be located. Please use the --with-apr option. [root@justin native]# rpm -qa|grep -i apr apr-util-1.5.2-6.el7.x86_64 apr-1.4.8-3.el7_4.1.x86_64 [root@justin native]# yum install -y epel-release [root@justin native]# yum install apr-devel -y [root@justin native]# rpm -qa|grep -i apr apr-util-1.5.2-6.el7.x86_64 apr-devel-1.4.8-3.el7_4.1.x86_64 apr-1.4.8-3.el7_4.1.x86_64 [root@justin native]# ./configure --with-apr=/usr/bin/apr-1-config --with-java-home=/usr/java/jdk1.8.0_161/ --with-ssl=/usr/bin/openssl --prefix=/app/tomcat/apache-tomcat-9.0.10/ --with-ssl=yes [root@justin native]# make && make install --with-apr=/usr/bin/apr-1-config APR安装路径,通过rpm、yum安装,其默认路径为/usr/bin/apr-1-config --with-java-home=/usr/java/jdk1.8.0_161/ JDK安装路径 --with-ssl=/usr/bin/openssl OpenSSL的安装路径 --prefix=/app/tomcat/apache-tomcat-9.0.10/ Tomcat的安装路径 --with-ssl=yes 安装完毕后,$CATALINA_HOME/lib下会新增libtcnative-1.so,安装最后会提示如下信息: Libraries have been installed in: /app/tomcat/apache-tomcat-9.0.10//lib 如果不想启用SSL,将server.xml中apr模式下ssl关闭即可: 3、配置APR本地库到系统共享库搜索路径中 [root@justin native]# vim /etc/profile export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/app/tomcat/apache-tomcat-9.0.10/lib export LD_RUN_PATH=$LD_RUN_PATH:/app/tomcat/apache-tomcat-9.0.10/lib 拷贝/usr/local/apr/lib目录下所有动态库到/usr/lib或/lib系统共享库搜索目录下: copy /app/tomcat/apache-tomcat-9.0.10/lib/libtcnative* /usr/lib/ 建议在$TOMCAT_HOME/bin/catalina.sh文件虚拟机启动参数JAVA_OPTS中添加java.library.path参数,指定apr库的路径 JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/app/tomcat/apache-tomcat-9.0.10/lib",或者新建setenv.sh 配置 tomcat server.xml,将protocol从HTTP/1.1改成org.apache.coyote.http11.Http11AprProtocol,HTTP/1.1,则 tomcat 自动选择合适的协议。 connectionTimeout="20000" redirectPort="8443" /> 重启tomcat,从日志里可以看到当前的启动模式 04-Sep-2018 20:24:47.602 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"] 04-Sep-2018 20:24:47.619 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"] 04-Sep-2018 20:24:47.626 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 1095 ms Windows下配置Tomcat的Apr 1、配置Apr 到官网 http://tomcat.apache.org/download-native.cgi下载Windows二进制版本apr,Apache提供了两个发布包。一个是默认的tomcat-native-1.1.33-win32-bin.zip,一个是支持通过OCSP 协议认证客户端SSL证书的tomcat-native-1.1.33-ocsp-win32-bin.zip。官方推荐使用tomcat-native-1.1.33-win32-bin.zip。tomcat-native-1.1.33-win32-bin.zip包中包含了32位系统、64位系统以及(x64) 以及 Intel Itanium 64位(i64)三个tcnative-1.dll文件。我们只需要将对应CPU类型的文件拷贝到$CATALINA_HOME/bin下(或者jdk的bin目录)即可完成APR安装。 2、配置Tomcat的server.xml: 将connector为port="HTTP/1.1"修改为“
[root@justin bin]# cat setenv.sh
export CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/app/tomcat/apache-tomcat-9.0.10/lib"
[root@justin bin]# pwd
/app/tomcat/apache-tomcat-9.0.10/bin
[root@justin bin]# chmod +x setenv.sh