0%

tomcat

安装

Debian

  • 前提准备
  • Java环境安装
    Tomcat 需java环境,运行
    1
    2
    3
    sudo apt update #升级apt
    sudo apt install default-jdk #sudo apt install default-jdk

  • 新增tomcat用户及用户组
    以root运行Tomcat,具有安全风险。我们将创建普通用户运行Tomcat
    1
    2
    sudo groupadd tomcat #增加tomcat用户组
    sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat # 创建一个新 tomcat用户。我们将使该用户成为该tomcat组的成员,它有/opt/tomcat的主目录(我们将安装Tomcat)和 /bin/false的shell(因此没有人可以登录该帐户)

下载

tomcat官网找到合适版本点击,获取对应tar.gz链接
将其下载到/tmp(这是一个很好的下载短暂项目的目录,)目录下

1
2
3
wget https://dlcdn.apache.org/tomcat/tomcat-10/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz -P /tmp # 下载对应tomcat到tmp目录下
sudo mkdir /opt/tomcat # 在opt下创建tomcat目录
sudo tar xzvf /tmp/apache-tomcat-${VERSION}.tar.gz -C /opt/tomcat --strip-components=1 # 将下载的tar.gz解压到opt的tomcat目录下,--strip-components=1,代表删除压缩文件根目录,直接将其子孙文件按层级提取到/opt/tomcat下

更新权限

设置的tomcat用户需要能够访问Tomcat安装

1
2
3
4
5
sudo chgrp -R tomcat /opt/tomcat # 在整个安装目录中授予tomcat组权限
cd /opt/tomcat
sudo chmod -R g+r conf #为tomcat组提供对当前目录下conf目录及其所有内容的读访问权限
sudo chmod g+x conf # 执行对当前目录下conf目录本身的访问
sudo chown -R tomcat webapps/ work/ temp/ logs/ # tomcat用户成为webapps,work,temp,和logs目录的所有者

创建一个systemd服务文件来管理Tomcat进程

我们希望能够将Tomcat作为服务运行,因此我们将设置systemd服务文件。 Tomcat需要知道Java的安装位置。此路径通常称为“JAVA_HOME”
sudo update-java-alternatives -l,将会得出如
java-1.11.0-openjdk-amd64 1111 /usr/lib/jvm/java-1.11.0-openjdk-amd64
有了这条信息,我们就可以创建systemd服务文件了。在/etc/systemd/system目录中键入以下内容以打开一个名为tomcat.service的文件:
sudo nano /etc/systemd/system/tomcat.service
将以下内容粘贴到您的服务文件中。替换对应JAVA_HOME, 如有必要可进行其他属性替换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target

完成后,保存并关闭文件(按下Ctrl+X),然后根据提示输入Y确认,最后按下Enter键退出编辑器.

1
2
3
4
5
6
sudo systemctl daemon-reload #重新加载systemd守护程序,以便它知道我们的服务文件
sudo systemctl start tomcat #启动Tomcat服务
sudo systemctl status tomcat #仔细检查它是否正常启动:... Active: active (running) since...
sudo ufw allow 8080 #允许防火墙打开8080端口
打开 http://server_domain_or_IP:8080 看是否能看到tomcat主页,如果可以则
sudo systemctl enable tomcat # 配置tomcat自启动

配置

  • 如果是Windows,默认是GBk编码,在控制台上日志会有些乱码,需修改tomcat输出日志为GBK编码。
    在comcat安装目录下conf目录下logging.propertisjava.util.logging.ConsloeHandler.encoding = GBK
  • 默认端口为8080可在conf/server<Connector port="8080"/>中修改

servlet

tomcat 9及后面servlet包 引用问题

Servlet从3.0版本后开始支持使用注解配置,3.0版本前只支持XML配置文件的配置方式

1
2
3
4
5
6
7
8
9
10

<servlet>
<servlet-name>Myservlet</servlet-name>
<servlet-class>org.example.servlet.Myservlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Myservlet</servlet-name>
<url-pattern>/ms</url-pattern>
</servlet-mapping>

urlPatterns匹配规则

精确路径>目录路径(“/xx/*“)>扩展路径(“*.do”)>任意匹配(“/“,”/*“)
扩展匹配前不能再有/

/和/*区别:
当我们的项目中的Servlet配置了“/”,会覆盖掉tomcat中的DefaultServlet,当其他的url-pattern都匹配不上时都会走这个Servlet
当我们的项目中配置了“/*“,意味着匹配任意访问路径
而实际请求时差别就是调用http://localhost:8080/项目名称/ 时,该servlet是否会调用。只是替换默认的则不会,匹配任意的则会。
任意匹配路径都会直接屏蔽静态资源直接访问