Tomcat

今日目标

  1. 1. web知识概述
  2. 2. tomcat【重点】

一 Web知识概述

JavaWeb:将编写好的java代码,发布到互联网,可以让所有用户通过浏览器访问到…

web技术: 开发网站的技术 (website)

javaweb : 用java技术为主体开发网站

1.1 软件架构

  • 网络中有很多的计算机,它们直接的信息交流,我们称之为:交互
  • 在互联网交互的过程的有两个非常典型的交互方式——B/S 交互模型(架构)和 C/S 交互模型(架构)

C/S架构

Client/Server 客户端/服务器

访问服务器资源必须安装客户端软件

例如: QQ,绝地求生,LOL

1586741304754.png

B/S架构

Browser/Server 浏览器/服务器

访问服务器资源不需要专门安装客户端软件,而是直接通过浏览器访问服务器资源.

例如: 天猫、京东、知乎网站

1586741326747.png

# C/S : client to server 
0. 端游 : 客户端里有大量的数据
1. 优点: 体验好(制作精美,速度快, 大部分的数据来源于本地)
2. 缺点: 更新慢
# B/S : browser to server 
0. 页游 : 大部分数据直接来源于服务器
1. 优点: 更新快
2. 缺点: 体验差(网速)

1.2 Web服务器作用

  • 服务器: 提供数据服务的
  • 服务端: 开发者可以通过web服务器把本地资源发布到互联网(提供数据服务和支持)
  • 客户端: 用户就可以通过浏览器/客户端访问这些资源(消费服务的)

硬件服务器: (企业计算机)

1). 机房 : 一般放在偏僻, 散热好的地方

2). 云服务器

软件服务器:

服务器程序: 停服更新

1.3 资源的分类

资源:计算机中数据文件

静态资源

  • 对于同一个页面,不同用户看到的内容是一样的(该资源不会变化)。
    • 例如:体育新闻、网站门户等,常见后缀:*.html、*.js、*.css , 图片,视频...

动态资源

  • 对于同一个页面,不同用户看到的内容可能不一样(该资源会变化)。
    • 例如:购物车、我的订单等,常见后缀:*.jsp、*.aspx、*.php

1586742159581.png

1.4 常见的Web服务器

Socket

1585887839580.png

sun公司: 卖身给oracle

apache 软件基金会: 非盈利技术组织

spring

* Tomcat: Apache软件基金会开源免费的web服务器,支持JavaEE规范(Servlet/Jsp).

* Jetty:Apache组织开源免费的小型web服务器,支持JavaEE规范.
* JBoss: RedHat红帽公司的开源免费的web服务器,支持JavaEE规范.
* Glass Fish:Sun公司开源免费的web服务器,支持JavaEE规范.
---------------------------------------------------------------------

* WebLogic: Oracle公司收费的web服务器,支持JavaEE规范.
* WebSphere:IBM公司收费的web服务器,支持JavaEE规范.

JavaEE规范

在Java中所有的服务器厂商都要实现一组Oracle公司规定的接口,这些接口是称为JavaEE规范。不同厂商的JavaWeb服务器都实现了这些接口,在JavaEE中一共有13种规范。实现的规范越多,功能越强。

二 Tomcat服务器【重点】

2.1 Tomcat使用

2.1.1 下载

Tomcat 官网下载地址:https://tomcat.apache.org/download-80.cgi

1586742796002.png

2.1.2 安装(强烈建议)

绿色免安装版,解压即用(注意:不要有中文路径)
1586742868532.png

1586742921335.png

2.1.3 目录结构

1586743862865.png

2.1.4 启动和关闭

tomcat/bin 目录下

  1. startup.bat 启动 shutdown.bat 正常关闭
  2. 启动之后,不要关闭tomcat的dos窗口
  3. 直接关闭dos窗口: 强制关闭(断电) , 不推荐(伤害硬件和数据丢失)
  4. 测试tomcat是否启动成功:
    http://localhost:8080

1586744080384.png

2.1.5 启动报错问题【经验值】

① Java环境变量

现象: 闪退, 黑窗口一闪而过(不到半秒)

原因: tomcat软件的大部分代码也是java写的, 运行依赖JDK

解决: 安装JDK8(弹出两次窗口,装在同一路径下),并配置环境

解决:

  1. JDK : Java development kit ( java开发工具包)
    a. java开发所运行的工具包(jdk所学到的类)
    b. jre : java runtime environment(java 运行环境)
  2. 配置好Java环境变量
    目的: 是为了可以在任意位置,打开cmd都能访问

        C:\Program Files\Java\jdk1.8.0_111\bin 下的可执行程序(java.exe...)

        a. JAVA_HOME :  C:\Program Files\Java\jdk1.8.0_111
        b. Path :  %JAVA_HOME%\bin



3. JDK换成8版本,目前tomcat8和jdk8兼容没问题
  jvm :  java virtual machine(java 虚拟机)

1586744311305.png

② 8080端口被占用

现象:启动时报错(黑框口等了一会就关闭)

(很多同学打开了两次tomcat)

原因: 一个进程占用一个端口port, 一个端口不能被多个进程同时占用

(软件启动至少一个进程)

解决:

  1. 找出并杀掉占用8080端口的程序
  2. 修改tomcat自己的端口

1586744425368.png
1586744478616.png

暴力:找到占用的端口号的对应进程,杀死进程

cmd命令:netstat -ano | findstr "8080"

1586744577556.png
1586744706603.png
进入到任务管理器,找到它,干掉它

温柔:修改Tomcat端口号

进入Tomcat安装目录/conf/server.xml 文件修改 (重启tomcat生效)

1586744867973.png

③ 访问测试

1586745285318.png

http://localhost:80
http协议默认端口80(会被隐藏)
https协议默认端口443

在整个web阶段我们使用的就是tomcat默认端口:8080

2.1.6 tomcat 发布项目 (练习)

前提: url格式规范

# 访问欢迎页原理
    -> url(网址) 必须包含网络三要素
1. 操作
    1). 启动tomcat
    2). 用浏览器访问 http://localhost:8080/ , 看到一个欢迎页
2. 原理
    1). 启动tomcat : 服务端程序运行
    2). 用浏览器访问 http://localhost:8080/ , 看到一个欢迎页
        a. 网络三要素
            I. 协议(http): 通讯两端共同遵守一种数据传输规则
                    浏览器和服务器tomcat都支持http协议
            II. ip(localhost -> 127.0.0.1)
                ip是计算机在一个网络中唯一标识
            III. port (0~65535)
                进程(程序) 在一台计算机中的唯一标识
         b. 原理 (tomcat/conf/server.xml)  
             1). tomcat支持http协议,部署本机上,占用8080端口
             2). 浏览器通过本网址访问tomcat,tomcat会默认读取欢迎页数据响应给浏览器,浏览器解析这些数据并显示
3. 举例
    https://www.baidu.com/
    https://www.baidu.com:443/
    1). 协议: https
    2). ip: www.baidu.com (域名)  -> 112.80.248.75  
        域名就是ip,存在映射关系
        流程: 浏览器发起请求 -> DNS域名解析服务器(存储的就是域名和ip映射关系) -> 百度的服务器
                www.baidu.com  www.baidu.com(112.80.248.75)
    3). port 
        http协议对应端口默认是80(省略不写)
        https协议 默认端口443(省略不写)  secure 安全
# url格式->  协议://ip:port/资源位置?参数
        数据库例子 jdbc:mysql://localhost:3306/day03?charset=utf-8
0. 基础路径: tomcat/webapps
        项目发布路径
1. index资源名比较特殊,可以省略(也可以写)    
    1). 解释
        http://localhost:8080/hello.html-> ROOT/hello.html
        http://localhost:8080/  -> 欢迎页(ROOT/index.jsp)    
    2). index优先级(tomcat/conf/web.xml) 
          <welcome-file-list>  欢迎文件列表
            <welcome-file>index.html</welcome-file> 最高
            <welcome-file>index.htm</welcome-file>  次之(兼容dos系统)
            <welcome-file>index.jsp</welcome-file>  最次
        </welcome-file-list>
2. ROOT目录比较特殊,强制省略        
        http://localhost:8080/abc/haha.html  -> abc/haha.html
        http://localhost:8080/hello.html->  ROOT/hello.html
    注意: 直接发布webapps下的资源,是访问不到的

webapps 部署(重点)

直接放置在 webapps 目录下

1586745686918.png

1586745814719.png

这种方案(支持热更新),一般在开发完毕后,正式发布项目时使用。。。。

热更新: 边运行边更新

缺点: 在开发时, 项目的路径在 c/test/work, 每更新一次,每次都部署到webapps路径下,好麻烦

② server.xml部署

#虚拟路径部署方式
1. 通过指定 虚拟路径 和 真实路径, 让这两个路径产生映射关系
2. 浏览器通过访问虚拟路径, tomcat会响应真实路径的资源

# 设置
    1. 虚拟路径: myapp
    2. 真实路径: c:/test/myproject
    String myapp = "c:/test/myproject"
# 效果
    浏览器地址栏:  http://localhost:8080/myapp/hello.html
    访问到服务器中的:  c:/test/myproject/hello.html

在tomcat/conf/server.xml中找到标签内,添加标签

1607753684498.png

          <!--
                    路径映射
                        虚拟路径 : mypro
                        真实路径 : 项目真正的路径
                        String mypro = "C:\Users\spy\Desktop\xx";
              --> 
        <Context path="mypro" docBase="C:\Users\spy\Desktop\xx"/>
      </Host>

缺点

1.配置文件修改完毕后,需要重启tomcat生效…

2.server.xml是tomcat的核心配置文件,如果稍有不慎操作失误,整个tomcat启动失败

3.这种方案作为了解即可

2.2 Idea中使用Tomcat【重点】

tomcat : 生产工具 (作为项目的运行环境的一部分) JDK/mysql

idea : 开发工具 ,提升开发效率 (2018.2)

  1. tomcat是可以单独使用的~~~ (要关闭,不然idea中启动tomcat会端口冲突)
  2. 我们后续要用代码编写动态/静态资源,所以掌握 idea中使用tomat会使得开发更高效

2.2.1 配置Tomcat

(工具栏居中,不然默认显示在右侧)

1586748223130.png

Add Configuration -> Templates -> tomcat -> local

1607754548241.png

1586748144024.png

再次点击,确定是否配置成功… (点旁边的configuare -> 看到两个jar包)

1586748188681.png

2.2.2 创建Web项目

1 创建步骤

第一步:创建普通java项目
参照创建maven的java项目步骤进行创建。

第二步:配置打包方式
web项目的打包方式为war,打开maven项目的pom文件。在项目的坐标信息下添加标签,设置打包方式。

1536373704461.png
【import Changes】

1552707375575.png

第三步:配置webapp目录和web.xml

打开Project Structure 视图

1536373953501.png

新增web.xml文件:按照数字图标的顺序操作
1536373997409.png

设置web.xml的路径 :点击web.xml后会自动弹出一个窗口设置路径

1536374162723.png

点击Apply,OK即可:

1536374230001.png

第四步:创建完成
设置完成之后,main目录下会创建webapp-WEB-INF-web.xml。

1536374298208.png

2 发布web项目

第一步:Edit Configurations

1536374514414.png

第二步:添加local tomcat
按照下图数字图标顺序操作: + --> Tomcat Server --> Local

1536374604706.png

第三步:配置tomcat

1536374866740.png

第四步:启动测试
在webapp目录下新建一个hello.html文件,文件内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>
    <h1>Hello Maven!</h1>
</body>
</html>
启动tomcat后,访问hello.html。如果能正确访问到hello.html。说明项目创建OK。

1536375126705.png

2.3.3 tomcat设置

1586748889107.png

1591428220420.png

补充: URL路径访问规则

# url规范格式
    协议://ip:port/资源路径?参数
       举例 -> jdbc:mysql://localhost:3306/db2
       参数: name=value&name=value
1. 网络编程三要素
    1). 协议 : 通信规则(内容和格式), 通信双方必须遵循同一套协议
    2). ip    : 在一个网络中, 定位一台计算机的 (域名)
            127.0.0.1 = localhost (本机,本地回环地址)
    3). port : 在一台计算机,定位一个程序

2. 举个例子    
    访问百度服务器的搜索程序
    例子: http://www.baidu.com
            http://www.baidu.com:80
            http://112.80.248.76:80/
            http://112.80.248.76/s?ie=utf-8&f=8
                    /s : 百度搜索程序下的网页搜索资源
            http://112.80.248.76/i?ie=utf-8&f=8
                    /i : 百度搜索程序下的图片搜索资源
    分析: 
        协议: http
        ip : www.baidu.com (域名)
            DNS    域名服务器(Domain Name System): 存储的是域名和ip的映射关系

            用户(访问域名) -> DNS服务器(将域名 转换 ip) -> 百度服务器    
            www.baidu.com  对应 112.80.248.76    
        port: 
            1). http协议对应80端口(端口可以省略不写)
            2). https协议对应443端口 (secure 安全,http协议传输数据进行加密)