跳至主要內容

Tomcat

程序员李某某大约 3 分钟

Tomcat

简介

  • 什么是JavaEE规范?

    JavaEE: Java Enterprise Edition,Java企业版。指Java企业级开发的技术规范总和。包含13项技术规范:JDBC、JNDI、EJB、RMI、JSP、Servlet、XML、JMS、Java IDL、JTS、JTA、JavaMail、JAF。

  • 因为Tomcat支持Servlet/JSP规范,所以Tomcat也被称为Web容器、Servlet容器。Servlet需要依赖Tomcat才能运行。

  • Tomcat的官网: https://tomcat.apache.org/open in new window

小结

  1. Web服务器的作用

封装HTTP协议操作,简化开发

可以将Web项目部署到服务器中,对外提供网上浏览服务

  1. Tomcat是一个轻量级的Web服务器,支持Servlet/JSP少量JavaEE规范,也称为Web容器,Servlet容器。

基本使用

目录结构

bin:目录下有两类文件,一种是以.bat结尾的,是Windows系统的可执行文件,一种是以.sh结尾的,是Linux系统的可执行文件。

webapps:就是以后项目部署的目录

卸载

卸载比较简单,可以直接删除目录即可

启动

双击: bin\startup.bat

启动后,通过浏览器访问 http://localhost:8080能看到Apache Tomcat的内容就说明Tomcat已经启动成功。

乱码

Tomcat默认是UTF-8编码,但是浏览器默认是GBK编码,所以需要修改Tomcat的编码。 /conf/server.xml,给它显示的增加编码方式

    <Connector connectionTimeout="20000" 
				port="8080" protocol="HTTP/1.1" 
				redirectPort="8443" URIEncoding="UTF-8"/>

\conf\logging.properties

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
## java.util.logging.ConsoleHandler.encoding = UTF-8
java.util.logging.ConsoleHandler.encoding = GBK

关闭

关闭有三种方式

  • 直接x掉运行窗口:强制关闭[不建议]
  • bin\shutdown.bat:正常关闭
  • ctrl+c: 正常关闭

配置

修改端口

  • Tomcat默认的端口是8080,要想修改Tomcat启动的端口号,需要修改 conf/server.xml

注: HTTP协议默认端口号为80,如果将Tomcat端口号改为80,则将来访问Tomcat时,将不用输入端口号。

启动时可能出现的错误

  • Tomcat的端口号取值范围是0-65535之间任意未被占用的端口,如果设置的端口号被占用,启动的时候就会包如下的错误

  • Tomcat启动的时候,启动窗口一闪而过: 需要检查JAVA_HOME环境变量是否正确配置

部署

  • Tomcat部署项目: 将项目放置到webapps目录下,即部署完成。

在拷贝的过程中也会越来越费时间,该如何解决呢?

  • 一般JavaWeb项目会被打包称war包,然后将war包放到Webapps目录下,Tomcat会自动解压缩war文件

IDEA部署

  • 创建普通的java项目

  • 右击项目,Add Framework Support...

  • 勾选Web Application

  • 配置tomcat

  • 将html、css等文件(夹)放在web目录下

  • 启动tomcat

打包报错

java: 无法访问jakarta.servlet.ServletException 
    找不到jakarta.servlet.ServletException的类文件

在JavaEE8中,一些标准的JavaEE包已经从Javax包迁移到Jakarta包,其中包括javax.servlet包,这个问题通常是由于使用的依赖版本过低导致的。 解决方案:

方法一:添加tomcat-api依赖,并且依赖的版本和自己的Tomcat版本相同即可

<dependency>
	<groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-api</artifactId>
    <version>10.1.13</version>
</dependency>
方法二:可以将javax.servlet-api依赖换成jakarta.servlet-api依赖
```xml
<dependency>
	<groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>6.0.0</version>
    <scope>provided</scope>
</dependency>

SpringBoot使用外置Tomcat

pom

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-core</artifactId>
    <version>9.0.55</version>
    <scope>provided</scope>
</dependency>

配置

@Configuration
public class TomcatConfig {
    @Bean
    public TomcatServletWebServerFactory servletWebServerFactory(){
        return new TomcatServletWebServerFactory();
    }
}
@SpringBootApplication
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class,args);
    }
}

上次编辑于:
贡献者: ext.liyuanhao3,李元昊