tomcat第1章 tomcat介绍、安装、部署项目

简介: tomcat第1章 tomcat介绍、安装、部署项目

一、前言

我们在写javaweb程序的时候有没有考虑如果没有tomcat,我们怎么给客户端返回响应数据?既然能返回响应数据,为什么还要使用tomcat?

什么是tomcat,以及tomcat历史版本发展情况,每个版本servlet规范的支持,相关的许可。

最后再介绍如何下载tomcat、安装tomcat、启动tomcat、运行tomcat以及tomcat目录结构、idea中如何使用tomcat等相关的基础知识点。

二、为什么要使用tomcat?

介绍这个问题之前,我们先来复习一下javaweb编码中不可或缺的http协议

http (HyperText Transfer Protocol) 超文本传输协议,规定了浏览器和服务之间传输数据的规则

下面演示一个简单得http协议代码,请求本地服务,返回给浏览器msg

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(8080); // 监听指定端口
        System.out.println("server is running...");
        for (;;) {
            Socket sock = ss.accept();
            System.out.println("connected from " + sock.getRemoteSocketAddress());
            Thread t = new Handler(sock);
            t.start();
        }
    }
}
 
class Handler extends Thread {
    Socket sock;
 
    public Handler(Socket sock) {
        this.sock = sock;
    }
 
    public void run() {
        try (InputStream input = this.sock.getInputStream()) {
            try (OutputStream output = this.sock.getOutputStream()) {
                handle(input, output);
            }
        } catch (Exception e) {
            try {
                this.sock.close();
            } catch (IOException ioe) {
            }
            System.out.println("client disconnected.");
        }
    }
 
   private void handle(InputStream input, OutputStream output) throws IOException {
    System.out.println("Process new http request...");
    var reader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8));
    var writer = new BufferedWriter(new OutputStreamWriter(output, StandardCharsets.UTF_8));
    // 读取HTTP请求:
    boolean requestOk = false;
    String first = reader.readLine();
    if (first.startsWith("GET / HTTP/1.")) {
        requestOk = true;
    }
    for (;;) {
        String header = reader.readLine();
        if (header.isEmpty()) { // 读取到空行时, HTTP Header读取完毕
            break;
        }
        System.out.println(header);
    }
    System.out.println(requestOk ? "Response OK" : "Response Error");
    if (!requestOk) {
        // 发送错误响应:
        writer.write("HTTP/1.0 404 Not Found\r\n");
        writer.write("Content-Length: 0\r\n");
        writer.write("\r\n");
        writer.flush();
    } else {
        // 发送成功响应:
        String data = "<html><body><h1>Hello, world!</h1></body></html>";
        int length = data.getBytes(StandardCharsets.UTF_8).length;
        writer.write("HTTP/1.0 200 OK\r\n");
        writer.write("Connection: close\r\n");
        writer.write("Content-Type: text/html\r\n");
        writer.write("Content-Length: " + length + "\r\n");
        writer.write("\r\n"); // 空行标识Header和Body的分隔
        writer.write(data);
        writer.flush();
    }
}
}

这里的核心代码是,先读取HTTP请求,这里我们只处理GET /的请求。当读取到空行时,表示已读到连续两个\r\n,说明请求结束,可以发送响应。发送响应的时候,首先发送响应代码HTTP/1.0 200 OK表示一个成功的200响应,使用HTTP/1.0协议,然后,依次发送Header,发送完Header后,再发送一个空行标识Header结束,紧接着发送HTTP Body,在浏览器输入http://localhost:8080/就可以看到响应页面。

ok,上面我们可以 看到只是单单给浏览器返回一句话,代码量也有不少,别说一个大型的web系统。对于这种情况就有公司对http操作进行封装,使程序员不必对协议再进行操作,让web开发变得便捷,而tomcat就是对http操作的封装。

三、tomcat历史

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。

当前Tomcat存在5个主要版本,分别支持不同版本的规范,其对规范及JDK的版本支持如下

Tomcat最后两个版本并不是顺序发布的。2015年11月,Tomcat发布了重要的里程碑版本9.0(目前仍为alpha版本)。在该版本中,Tomcat依赖最新的JDK8,使用了JDK8最新的语法特性,支持最新的Servlet规范 (4.0),并增加了对HTTP/2的支持。2016年3月,考虑到9.0版本的变更范围以及发布进度,Tomcat在8.0的基础上又发布了一个中间版本–8.5.它的主体架构延续自8.0,同时又实现了部分9.0的主要特性,以便用来取代8.0版本。

四、tomcat许可

Tomcat以Apache License许可的方式进行发布,具体许可内容参见http://apache.org/licensesLICENSE-2.0。主要概括如下。

  • Tomcat完全免费,可用于任何商业或者非商业产品,而不必支付任何费用
  • 修改Tomcat并发布变更版本的用户不必公开修改部分的源代码。
  • 修改Tomcat的用户不必将其变更捐献给Apache软件基金会
  • 所有针对Tomcat源代码或二进制文件的重新发布均须包含Apache许可
  • 任何重新发布所包含的资料必须经过Apache软件基金会批准
  • 无Apache基金会的许可,派生自Tomcat源代码的产品不能命名为“Tomcat”、“Apache”、“Jakarta”

五、tomcat基本使用

1、下载、安装、启动、停止

官网下载地址:https://tomcat.apache.org/

选择下载的版本,推荐压缩包的方式直接下载解压即可

目录结构

启动和运行

双击Tomcat下的bin下的startup.bat启动Tomcat或者命令行在tomcat目录下执行如下命令

D:\apache-tomcat-8.5.82\bin>catalina run

在浏览器的地址栏中输入http://localhost:8080,看到如下页面证明启动成功

启动失败常见问题

点击 startup.bat启动Tomcat启动出现黑窗口一闪而过

主要原因:java环境配置问题,配置java home环境名必须是JAVA_HOME

停止tomcat

找到bin下的shutdown.bat

如果是窗口启动的,关闭窗口即可停止tomcat

2、端口配置

默认端口是8080,如果出现端口占用,可以通过以下方式修改

1)找到 Tomcat 目录下的 conf 文件夹

2)进入 conf 文件夹里面找到 server.xml 文件

3)打开 server.xml 文件

4)在 server.xml 文件里面找到下列信息

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"redirectPort="8443" />

port="8080"改成你想要的端口,修改完重启tomcat才能生效

3、tomcat部署项目

在Tomcat中部署Web应用的方式主要有如下几种:

1、利用Tomcat的自动部署。把web应用拷贝到webapps目录。Tomcat在启动时会加载目录下的应用,并将编译后的结果放入work目录下。

一般将项目打包成war放到webapps目录下,tomcat会自动解压缩war文件

浏览器输入localhost:8080/项目名即可访问

2、使用Manager App控制台部署。在tomcat主页点击“Manager App” 进入应用管理控制台,可以指定一个web应用的路径或war文件。

3、修改conf/server.xml文件,增加Context节点可以部署应用。

4、在conf/Catalina/localhost/ 路径下增加 abx.xml文件,内容如下,内容是Context节点,可以部署应用

<Context path="/demo" docBase="E:\demo"/>

当浏览器输入访问地址如:

http://ip:port/  

没有工程名时候,默认访问的是ROOT工程

当浏览器输入访问地址如:

http://ip:port/工程名/  

没有资源名,默认访问index.html页面

4、tomcat web项目结构

一个javaweb项目要能够在tomcat下部署运行,需要满足一定的目录结构格式,在tomcat目录下的webapps目录下创建一个mail项目,结构如下,然后启动tomcat,localhost:8080/mail即可访问

注意:WEB-INF目录是受保护的,外界不能直接访问,想让外界响应到,不要写在WEB-INF内。所以写的网页没有在WEB-INF中

以后创建的java web maven项目,开发完之后,需要package,package完项目的结构也是遵循上面项目结构的,对照如下

  • 编译后的java字节码文件和resouce的资源文件,放到了WEB-INF下的class目录下
  • pom.xml 中依赖坐标对应的jar包,放入WEB-INF下的lib目录下

六、idea中使用tomcat

1、idea中创建maven web项目

方式1、使用maven骨架方式

1、选择web项目骨架

接着填写项目名以及maven坐标,finish即可,我们可以删除pom里面不用的依赖,pom依赖如

2、补齐缺失的目录结构

main下分别创建java和resource目录即可

方式2、不使用maven骨架方式

1、不勾选骨架创建项目

2、pom添加war的打包方式

3、补齐web项目目录结构:webapp目录即可

2、idea集成本地tomcat

上面我们创建好项目之后,如果想要运行将项目部署到tomcat下并运行,之前的方式是首先package,然后将打包好的war包复制到本地tomcat下的webapps即可运行,这个过程还是比较繁琐。

在idea中可以直接继承本地tomcat进行运行项目

如下

添加local tomcat

部署项目

选择要部署得项目,然后apply,部署完之后点击运行即可

备注:如何是普通的web项目,不是maven项目,如何将第三方jar添加到项目中?

首先在当前项目WEB-INF下创建lib文件夹,将第三方jar复制到lib下

打开Project structure中

添加jar

apply

3、idea使用tomcat 插件

上面2介绍了如何把maven web项目部署到本地tomcat中,并运行起来,接下来介绍不使用本地tomcat,而是用tomcat maven 插件的方式运行maven 项目


相关文章
|
2天前
|
NoSQL 关系型数据库 应用服务中间件
docker基础篇:安装tomcat
docker基础篇:安装tomcat
92 64
|
12天前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
73 26
|
3月前
|
应用服务中间件 Docker 容器
docker应用部署---Tomcat的部署配置
这篇文章介绍了如何使用Docker部署Tomcat服务器,包括搜索和拉取Tomcat镜像、创建容器并设置端口映射和目录映射,以及如何创建一个HTML页面并使用外部机器访问Tomcat服务器。
docker应用部署---Tomcat的部署配置
|
2月前
|
应用服务中间件 Apache Windows
免安装版的Tomcat注册为windows服务
免安装版的Tomcat注册为windows服务
135 3
|
2月前
|
Java 应用服务中间件 Maven
idea+maven+tomcat+spring 创建一个jsp项目
这篇文章介绍了如何在IntelliJ IDEA中使用Maven和Tomcat创建一个JSP项目,包括配置Maven依赖、设置Tomcat服务器、编写JSP页面、创建控制器和配置文件,以及项目的运行结果。
239 0
idea+maven+tomcat+spring 创建一个jsp项目
|
2月前
|
Java 应用服务中间件 Linux
tomcat学习二:tomcat部署多个项目:不修改端口和修改端口 两种方式详解
这篇文章详细介绍了在Tomcat服务器上部署多个项目的方法,包括不修改端口和修改端口两种方式。
159 0
|
3月前
|
前端开发 Java 应用服务中间件
react自学(6) 部署到tomcat中
react自学(6) 部署到tomcat中
|
3月前
|
关系型数据库 Java MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【9月更文挑战第6天】在Linux环境下安装JDK 1.8、Tomcat和MariaDB是搭建Java Web应用的关键步骤。本文详细介绍了使用apt-get安装OpenJDK 1.8、下载并配置Tomcat,以及安装和安全设置MariaDB(MySQL的开源分支)的方法。通过这些步骤,您可以快速构建一个稳定、高效的开发和部署环境,并验证各组件是否正确安装和运行。这为您的Java Web应用提供了一个坚实的基础。
57 0
|
负载均衡 Java 应用服务中间件
部署Tomcat及其负载均衡
部署Tomcat及其负载均衡
140 0
|
负载均衡 架构师 Java
Linux-部署Tomcat及其负载均衡
Linux-部署Tomcat及其负载均衡
154 0