下载
点击页面左边列表,Download模块,选择版本
- Core:
- Full documentation:
- Deployer:
- Embedded:
安装
解压到任意一文件夹。
配置
(1)配置环境变量
在环境变量中,新建一个变量名为CATALINA_HOME,路径为Tomcat的解压路径。例如
D:\........\Tomcat
变量名不能任意起,Tomcat的程序中,默认引用的是这个名字,使用其他变量名可能导致无效。
在系统变量Path中加入%CATALINA_HOME%\bin
(2)配置启动服务和关闭服务
如果不想通过Tomcat9w.exe启动器启动Tomcat的服务,可以通过运行Tomcat\bin\startup.bat文件进行启动。
startup.bat主要用来寻找jdk和catalina.bat的路径,然后启动catalina.bat。运行规则如下:(参考大佬文章)
如果环境变量设置了CATALINA_HOME,则直接使用环境变量设置的值作为Tomcat安装目录。假如未设置环境变量CATALINA_HOME,则以当前目录作为CATALINA_HOME。此时,如果%CATALINA_HOME%\bin\catalina.bat存在,则批处理或命令行当前目录作为CATALINA_HOME。假如%CATALINA_HOME%\bin\catalina.bat不存在,则把当前目录的上一级目录作为CATALINA_HOME,然后再判断%CATALINA_HOME%\bin\catalina.bat是否存在。如果存在,则上一级目录就是CATALINA_HOME;否则,提示找不到CATALINA_HOME环境变量并结束执行。
修改startup.bat文件,用文本形式打开,没法打开就修改后缀为txt打开,修改完再改回去。
在第一行前,加入两行代码
SET JAVA_HOME=JDK的路径
SET CATALINA_HOME=解压Tomcat的目录
设置该语句主要目的,可以将startup.bat移动到任意一位置都可以启动服务,而不需要进入到Tomcat的文件夹中找到该文件启动。
运行该文件,若出现中文乱码,解决方案:
打开tomcat文件夹到conf目录下
修改logging.properties
找到
java.util.logging.ConsoleHandler.encoding = utf-8
更改为
java.util.logging.ConsoleHandler.encoding = GBK
若要自定义服务器使用内存大小,加入如下命令:
//windows
set JAVA_OPTS=-server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m
//Linux
JAVA_OPTS="-server -Dfile.encoding=UTF-8 -Xms=512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m"
相应的关闭服务的文件shutdown.bat也需要在同样位置增加上述两行代码。
SET JAVA_HOME=JDK的路径
SET CATALINA_HOME=解压Tomcat的目录
大佬分析的shutdown原理,这里记录一下:
通过shutdown.bat脚本,这个脚本最终会调用到Catalina的stopServer方法,这个方法中创建了一个Socket,并向StandardServer监听的端口发送了一个shutdown命令,主线程接收到后就退出了,其他守护线程也随之结束;
如果我们将server.xml配置文件修改成:
<Server port="8005" shutdown="GET /SHUTDOWN HTTP/1.1">
这样直接在浏览器中输入http://localhost:8005/SHUTDOWN就可以关闭Tomcat了。
另外的一种方式就是直接调用StandardServer的stop方法。
这里要注意一下,默认关闭端口为-1,也就是没有设置,需要手动改成正常可用的端口,如果不改的话使用idea编译器关闭服务会失败
(3)修改端口
在Tomcat的conf文件夹中找到server.xml,打开xml文件推荐使用编辑器打开,如Sublime Text,jetbrain等,可以清楚地区分注释和主要代码。
找到如下代码块
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
可以看到,http协议请求的配置:
port端口号为8080,可以修改为常用的80端口。
protocol网络协议版本http/1.1
connectionTimeout连接超时时间为20秒。
redirectPort为重定向到的服务器端口,例如当前访问的资源必须用https协议传送,则可以重定向到https的端口。
(4)修改web根路径
在server.xml中找到
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
name是指对于用户来说访问的虚拟主机名,如www.baidu.com
appBase是web的根路径(主页的文件夹),可以是Tomcat内部相对路径,也可以是系统的绝对路径,但是Tomcat必须有访问权限。
autoDeploy指是否允许自动部署,默认值是 true,即表示 Tomcat 会自动检测 appBase 目录下面的文件变化从而自动应用到正在运行的 Web 应用程序。
unpackWARs指如果存在项目war包是否自动解压,有时候项目大文件多,为了方便,将项目打包war,在上传服务器,使用其自动解压部署。
修改<Host>的appBase为项目文件夹,如d:\web1,该文件夹一般情况下包含WEB-INF文件夹。
在<Host></Host>中加入
<Context path="" docBase="d:\web1" debug="0" reloadable="true"/>
docBase:指定Web应用的文件路径,可以给定绝对路径,也可以给定相对于<Host>的appBase属性的相对路径
path=""指对用户来说访问的路径名。
这里注意,比如实际文件夹路径为web1,如果path也设为web1,那么对于黑客来说,你是在告诉他,你的服务器文件的位置,是不安全的。如果设置为其他任意名称,相对安全。这里有个新手小坑
(1)为空,则访问Host的name时直接定向到这个Context对应文件夹的主页文件,如访问http://localhost,服务器会返回/web1/index.jsp。
(2)如果不为空,例如为web2,则在访问的时候,访问http://localhost会发生404,只有访问http://localhost/web2,服务器才会返回/web1/index.jsp。
(5)多站点配置
<Host>可以实现一个服务器的多个站点,例如:
<Host name="www.web1.com" appBase="D:/web1" autoDeploy="true" unpackWARs="true"> </Host>
<Host name="www.web2.com" appBase="D:/web2" autoDeploy="true" unpackWARs="true"> </Host>
但前提是用户能通过dns服务器将两个域名都解析到你服务器的ip。