Tomcat

165 阅读6分钟

一、概述

1. 基础

Tomcat官方文档:tomcat.apache.org/tomcat-8.0-…

什么是Web,在英语中Web表示网/网络资源(页面,图片,css,js)意思,它用于表示Web服务器(主机)供浏览器访问的资源

Web服务器(主机)上供外界访问的Web资源分为:

  • 静态Web资源:比如html、css、js页面,数据始终不变
  • 动态Web资源:比如Servlet、PHP等

静态Web开发技术:

  • HTML、CSS、JS等

动态Web开发技术:

  • Servlet、SpringBoot、SpringMVC、PHP、ASP.NET 等

JavaWeb开发技术栈:

image-20240118213125880

Tomcat本质就是一个Java程序,但是这个Java程序可以处理来自浏览器的HTTP请求

2. 手写JavaWeb程序

image-20240118213921489

最基本的Tomcat程序:

public class MyTomcat {
    public static void main(String[] args) throws IOException {
        //在9999端口监听
        ServerSocket serverSocket = new ServerSocket(9999);

        //如果serverSocket没有关闭,就等待连接
        while (!serverSocket.isClosed()) {
            System.out.println("---我的Web服务在9999端口监听---");
            //等待浏览器或者客户端来连接,得到一个socket
            //该socket用于通信
            Socket socket = serverSocket.accept();

            //通过socket得到输出流
            OutputStream outputStream = socket.getOutputStream();
            //返回给浏览器或客户端
            outputStream.write("hello, i am my tomcat".getBytes());

            //关闭资源
            outputStream.close();
            socket.close();
        }
        serverSocket.close();
    }
}

如果想检查文件,代码如下:

public class MyTomcat1 {
    public static void main(String[] args) throws IOException {
        //在9999端口监听
        ServerSocket serverSocket = new ServerSocket(9998);

        //如果serverSocket没有关闭,就等待连接
        while (!serverSocket.isClosed()) {
            System.out.println("---我的Web服务在9998端口监听---");
            //等待浏览器或者客户端来连接,得到一个socket
            //该socket用于通信
            Socket socket = serverSocket.accept();

            //通过socket得到输出流
            OutputStream outputStream = socket.getOutputStream();
            //读取html文件,返回里面的值
            //得到一个文件输入流(字符输入流),和hello.html相关联
            BufferedReader bufferedReader =
                    new BufferedReader(new FileReader("src\\main\\java\\hello.html"));
            String buf = "";
            while ((buf = bufferedReader.readLine()) != null){
                outputStream.write(buf.getBytes());
            }

            //关闭资源
            outputStream.close();
            socket.close();
        }
        serverSocket.close();
    }
}

二、Tomcat的使用

Tomcat:由Apache组织提供的一种Web服务器,提供对jsp和Servlet的支持。它 是一种轻量级的 javaWeb 容器(服务器),也是当前应用最广的 JavaWeb 服务器

1. 安装

Tomcat官网站点:tomcat..apache.org/

将安装包解压到相应的目录即可,我这里安装在:D:\Tomcat\apache-tomcat-9.0.39

看版本的信息可以在这个网站:tomcat.apache.org/whichversio… ,可以看到Tomcat仍然是支持jsp和el

image-20240119082840904

2. 启动和关闭

3. 目录结构

1)目录结构

image-20240119085300245

  1. server.xml用于配置Tomcat的基本设置(启动端口,关闭端口, 主机名)
  2. wex.xml用于指定Tomcat运行时配置(比如Servlet等..)
  3. webapps目录是存放web应用,就是网站

2)如何修改Tomcat的服务端口

进入Tomcat的conf目录下,修改server.xml目录

<!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
    -->
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

如果修改建议修改端口号大于1024,最好在10000以上,修改完文件重启Tomcat生效

说明:http://localhost , 默认是访问80端口 , 即http://localhost,等价于http://localhost:80

三、Tomcat服务中部署Web应用

1. 什么是Web应用

Web应用是多个Web资源的集合。简单的说,可以把Web应用理解为硬盘上的一个目录,这个目录用于管理多个Web资源

Web应用通常也称之为Web应用程序,或Web工程,通俗的说就是网站

2. Web应用的组成

一个Web应用由多个Web资源或其它文件组成,包括html文件、css文件、js文件、动态Web页面、Java程序、支持Jar包、配置文件等。开发人员在开发Web应用时,按照规定目录结构存放这些文件。否则,在把Web应用交给Web服务器管理时,不仅可能会使Web应用无法访问,还会导致Web服务器启动报错

3. JavaWeb工程目录结构

image-20240120102116562

静态文件放在目录下就行,如果是动态文件需要放在WEB-INF下

测试:

在webapps下再创建一个项目test,里面添加一个静态资源test.html,使用http://localhost:8080/test/test.html就能访问到这个文件

部署方式:

ROOT工程怎么访问:

  1. 在浏览器地址栏中输入访问地址如下:http://ip[域名]:port,没有Web工程/应用名时,默认访问的是ROOT工程
  2. 在浏览器地址栏中输入的访问地址如下: http://ip[域名]:port/工程名/ ,没有资源名,默认访问index.jsp页面

4. 浏览器访问Web服务器文件UML时序图(重要)

image-20240120132339379

四、Idea开发JavaWeb工程

1. 创建JavaWeb工程

这里是使用Idea2020创建,new Project,新建Java项目:

image-20240120133837468

如下图直接next

image-20240120133910642

创建名叫fishWeb的工程

image-20240120133956141

当前就是个普通的Java项目,需要添加对Web的支持

image-20240120134211279

添加对framework的支持

image-20240120134324570

选择Web application

image-20240120134359568

然后就变成了Web项目,而不是普通的Java项目

image-20240120134439020

对比这张图:

image-20240120102116562

将一张fish.jpg图片放在fishWeb/web下,然后需要配置Tomcat

2. 配置Tomcat

image-20240120135318719

修改Web应用的名称

image-20240120135457749

然后访问http://localhost:8080/fishWeb/fish.jpg

3. 注意事项

1)热部署的两个参数分别是什么意思:

  1. on update action:表示当我们更新操作是,Tomcat会自动更新类和资源(当jsp/html文件修改时,可以生效,但是如果你修改的Java文件,需要Redeploy才会生效)
  2. on frame deactivation:表示IDEA失去焦点(比如最小化),也会导致jsp/html发生更新,但是Java修改了,还是需要Redeploy

2)如何修改端口

image-20240120140958775

3)out目录是什么

当Tomcat启动时,会生成out目录,该目录就是原项目资源的映射,我们浏览器访问的资源是out目录,最终展示的时候是展示out中的内容,所以如果对out中的内容进行修改,会直接展示出来,如果对源代码进行修改,则需要编译才行

那么以哪个为准呢?如果再次编译源代码,可能会导致out中修改的内容被覆盖,所以要以源代码为准

4)当我们从外部拷贝资源到项目(图片, 文件, js , css 等), 如果出现404不能访问错误,解决方式rebulid project -> 重启Tomcat

4. JavaWeb工作目录介绍

image-20240120143612521