day07 tomcat和 http

《Tomcat&Http请求相关-笔记》

回顾

  • 能够使用jQuery的绑定与解绑方法

    JQ对象.on("事件名", 处理函数)
    JQ对象.on({
      "事件名":处理函数,
      "事件名":处理函数  
    })
    
    JQ对象.off("事件名 事件名")
    JQ对象.off()
    
  • 能够使用jQuery对象的遍历方法

JQ对象.each(function(index,element))
JQ对象:遍历的数组
index: 索引
element: 每个元素,是JS对象
  • 能够使用jQuery全局的遍历方法
$.each(数组或集合, function(index,element))
数组或集合:要遍历的集合或数组
index: 索引
element: 每个元素,是JS对象
  • 能够了解原生js的ajax
方法说明
new XMLHttpRequest()创建一个核心对象
onreadystatechange准备状态发生改变时激活的事件
open(“GET”,URL,true)打开服务器连接
send()发送请求
  • 能够使用jQuery3.0以后 . a j a x ( ) , .ajax(), .ajax().get(),$.post()的方法
属性名称解释
url服务器的访问地址
async异步或同步
data发送给服务器的数据,两种格式:
1. 键=值&键=值
2. {键:值,键:值}
dataType服务器返回的数据类型,如果不指定jQuery会根据服务器返回的MIME类型自动进行转换
success正常响应时回调函数,参数是服务器返回的数据
error出现异常时回调函数,参数是XMLHttpRequest对象

学习目标

  1. 能够理解软件的架构
  2. 能够理解WEB资源概念
  3. 能够理解WEB服务器
  4. 能够运用Tomcat服务器部署WEB项目
  5. 能够使用浏览器开发工具查看HTTP协议请求内容
  6. 能够理解HTTP协议请求内容

学习内容

软件的架构:BS和CS

目标

  1. 什么是BS
  2. 什么是CS

BS和CS概述

  • CS(Client/Server):客户端/服务器模式
  • BS(Browser/Server):浏览器/服务器模式

CS特点

软件

在这里插入图片描述

大型游戏

在这里插入图片描述

  1. 本地电脑上必须安装软件,下载到本地的软件,称为客户端。所有的客户端软件在运行过程中都需要连接服务器。数据是保存在服务器上的。
  2. 如果服务器进行升级和维护,本地客户端也需要升级。
  3. 程序员开发工作量主要是在客户端

在这里插入图片描述

BS特点

企业管理软件

软件是运行在浏览器,软件和数据都是保存在服务器上,BS结构必须要有浏览器。

在这里插入图片描述

  1. 客户端不需要安装其它的软件,有浏览器就够了。
  2. 如果服务器端进行升级和维护,浏览器端不需要进行任何的操作就可以升级。
  3. 程序员开发工作量主要在服务器端

小结

  1. 什么是BS?Browser Server
  2. 什么是CS?Client Server

Web资源的分类:静态和动态

目标

Web资源分成哪两类

分类依据

  1. Web资源分成两种:静态和动态
  2. 分类的依据:程序是否运行在服务器端,如果程序运行在服务器端,称为动态资源,如果运行在浏览器端称为静态资源。

静态网站的特点:

如果一个资源制作好以后,放在服务器上,如果没有去更新,永远是一成不变的,这就是静态资源。运行静态资源的网站,称为静态网站。

使用的技术:HTML,CSS,JavaScript 都是运行在浏览器端

动态网站的特点:

  1. 服务器端通常都有数据库服务器在执行,数据是保存在数据库中的
  2. 功能上会更加强大,可以实现静态网站不能实现的功能,如:用户注册,下订单,拍卖
  3. 我们在浏览器端看到的网页,其实是服务器端Java程序的运行结果。如果每次运行的结果不同,用户在浏览器上看到的网页内容也就不同。
  4. 使用的技术:JSP,Sevlet,PHP,C#等

小结

Web资源分成哪两类?

  1. 动态网站
  2. 静态网站

什么是Web服务器

目标

什么是Web服务器

什么是Web服务器

我们写的静态网页或动态网页必须运行在服务器上,这个服务器称为Web服务器,也称为Web容器。容器中放的是所有的web资源:JSP,Servlet,HTML,图片等

  1. Web容器本身也是一个程序,今天学习的Tomcat就是一个Web容器,也称为Web服务器,它就是Java写的,运行在Java虚拟机中。
  2. 实现了数据共享的功能,把web容器中所有的资源共享给全世界的用户使用。
  3. 是通过请求和响应的方式进行实现用户与服务器之间的交互。用户通过浏览器发送请求给服务器,服务器发送响应给浏览器。

JavaEE规范

Java分为三个部分:

  1. JavaSE:Java标准版,以前我们学的都是JavaSE
  2. JavaME:移动版,用于嵌入式开发
  3. JavaEE:从今天开始,学习的是JavaEE Enterprise Edition

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

常见的Web服务器

WebLogic

​ WebLogic是Oracle公司的产品,是目前应用最广泛的Web服务器,支持J2EE规范。WebLogic最早由 WebLogic Inc. 开发,后并入BEA 公司,最终BEA公司又并入 Oracle公司。BEA WebLogic是用于开发、集成、集群、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。

在这里插入图片描述

WebSphere

​ 另一个常用的Web服务器是IBM公司的WebSphere,支持JavaEE规范。

在这里插入图片描述

其它中小型服务器

在这里插入图片描述

今天主角:Tomcat

​ 在小型的应用系统或者有特殊需要的系统中,可以使用一个免费的Web服务器:Tomcat。支持的规范:该服务器支持全部JSP以及Servlet规范。

在这里插入图片描述

小结

  1. Web服务器是什么?又称为web容器,我们所有的资源放在web容器中去执行的
  2. 说出三个常用的Web服务器
    1. tomcat
    2. weblogic
    3. class fish
    4. jboss

案例:自己模拟一个Tomcat

注:以后我们使用JDK1.8的版本

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

目标

使用多线程和Socket模拟一个简单的Web服务器,将服务器上的资源共享给浏览器

说明

实现的功能:在服务器上有一个index.html网页,通过浏览器去访问tomcat,并且打开这个网页

使用到技术点:

  1. 使用多线程,每个用户访问创建一个线程
  2. 使用Socket编程
  3. 用到文件输入流

步骤

  1. 采用多线程的方法,每个用户创建一个线程。
  2. 当有用户连接的时候在服务器控制台输出信息
  3. 在线程的run方法中读取本地服务器的资源,得到输入流对象
  4. 通过Socket得到输出流
    1. 输出响应行:HTTP/1.1 200 OK\r\n
    2. 输出响应类型:Content-Type: text/html;charset=utf-8\r\n
    3. 输出空行\r\n
    4. 输出其它内容到客户端

执行效果

在这里插入图片描述

代码

package com.itheima;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Timestamp;

/**
 * 创建一个类继承于Thread
 */
public class MyTomcat extends Thread {

    //每个线程就是一个客户端,每个线程有一个Socket对象,通过构造方法传入socket对象
    private Socket socket;

    public MyTomcat(Socket socket) {
        this.socket = socket;
    }

    /**
     * 每个线程的任务写在run方法中
     * 把服务器上本地资源通过socket发送给浏览器
     */
    @Override
    public void run() {
        try(//1.读取本地的网页文件,通过字节输入流
            FileInputStream in = new FileInputStream("e:/MyWeb/index.html");
            //2.得到Socket的输出流
            OutputStream out = socket.getOutputStream()) {
            //输出响应头(响应头的格式下次课才讲)
            out.write("HTTP/1.1 200 OK\r\n".getBytes());  //响应行
            out.write("Content-Type: text/html;charset=utf-8\r\n".getBytes());  //指定MIME类型
            out.write("\r\n".getBytes());  //一个空行

            //3.将输入流中数据写到输出流中  后面就是网页的内容
            byte[] buf = new byte[1024];
            int len = 0;
            while((len = in.read(buf))!=-1) {
                out.write(buf, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws IOException {
        //创建服务器端
        ServerSocket serverSocket = new ServerSocket(8080);  //服务器端口号
        //时间戳,输出当前的时间
        System.out.println(new Timestamp(System.currentTimeMillis()) + " 服务器启动");
        while (true) {
            Socket accept = serverSocket.accept();  //连接了客户端
            System.out.println("客户端连接:" + accept.getInetAddress().getHostAddress());
            new MyTomcat(accept).start();  //启动线程
        }
    }
}

小结

以后我们需要自己编写Web服务器吗?

不需要自己写,只需要会使用和配置就可以了
我们写的Java程序是运行在Web容器中

Tomcat的安装、配置

目标

  1. tomcat的安装
  2. 环境变量的配置

下载页面

tomcat的产品页面: http://tomcat.apache.org/

在这里插入图片描述

下载版本

在这里插入图片描述

安装

在这里插入图片描述

  1. 不要有中文目录

  2. 目录层级不要太深

  3. 直接解压就可以使用

环境变量的配置

  • 用户变量类似于局部变量,系统变量类似于全局变量,建议配置在系统变量
  1. 添加Tomcat的安装目录

在这里插入图片描述

  1. 配置Path,可以在任何路径下访问bin文件夹的可执行文件

在这里插入图片描述

小结

  1. tomcat如何安装
    1. 直接解压就可以了
    2. 不要有中文目录
    3. 目录层次不要太深
  2. 需要配置哪两个环境变量
    1. CATALINA_HOME=安装目录
    2. Path=%CATALINA_HOME%\bin

Tomcat的启动与关闭

目标

  1. 启动与关闭tomcat的命令
  2. Tomcat每个目录的作用

启动与关闭命令

​ 前提最好配置了Path,就可以在任意的目录下执行这两条命令,如果没有配置Path,则必须在tomcat/bin目录下才可以执行。

  1. 启动的命令:startup.bat
  2. 关闭的命令:shutdown.bat
    在这里插入图片描述

在命令窗口下执行,不建议鼠标双击

有乱码的原因是因为Tomcat默认是UTF-8的编码,而在Windows窗口下编码是GBK

在这里插入图片描述

解决乱码的问题

  1. 修改C:\apache-tomcat-8.5.51\conf\logging.properties
  2. 打开将所有的UTF-8换成GBK就可以

小结

  • 启动的命令:startup.bat
  • 关闭的命令:shutdown.bat

Tomcat的目录结构

目标

tomcat中每个目录作用

启动tomcat效果

控制台的输出

在这里插入图片描述

浏览器端

在这里插入图片描述

关闭以后

在这里插入图片描述

目录作用

目录名作用
bin可执行文件所在的目录,如:启动和关闭命令
conf服务器配置文件所在目录,如:server.xml 是服务器的配置文件
libtomcat是使用Java语言编写,依赖第三方jar包。
logs日志记录目录,服务器运行过程中信息记录下来,每天会创建一个
temp临时目录,tomcat执行过程中生成临时文件,这下面的数据可以删除
webapps我们的项目部署目录,这下面的每个项目就是一个目录
ROOT目录:默认打开的项目,默认打开index.jsp或index.html文件
work工作目录,JSP执行过程中生成class文件,放在这个目录下

小结

  • bin和webapps目录的作用是什么?
    • 可执行文件所在的目录
    • 项目部署的目录

Tomcat启动时常见的问题

目标

启动时常见的两个问题

问题1:未设置JAVA_HOME环境变量

因为tomcat也是java编写,它必须运行在JVM中

  1. 出错信息

在这里插入图片描述

  1. 解决办法

在这里插入图片描述

问题2:端口号被占用

注:tomcat默认的端口号是8080,必须保证这个端口号不被占用

  1. 出错信息

在这里插入图片描述

  1. 查看日志文件:在logs目录下也会记录

在这里插入图片描述

  1. 解决方法:

    1. 方法一:找到占用端口号的程序,进程杀掉。

在这里插入图片描述

  1. 方法二:修改tomcat的端口号
1. 打开conf/server.xml文件
2. 找到69行,将8080修改成另一个端口号:8888
   <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
3. 重启动tomcat,注:只要修改了server.xml都需要重启tomcat

在这里插入图片描述

小结

  • 常见的问题有哪两个?如何解决?
    • 没有配置JAVA的环境变量
    • 端口号有冲突
      • 找到占用的端口号终止
      • 修改tomcat的默认端口号

Tomcat项目发布的三种方式

目标

tomcat项目发布的三种方式

发布方式1:复制到webapps

操作方法
  1. 直接将项目复制到webapps目录下

在这里插入图片描述

访问格式

在这里插入图片描述

  1. 采用压缩文件.war的方式

    1. 进入项目的目录,不包含顶层文件夹

    2. 将整个项目使用压缩工具打包成一个zip文件

在这里插入图片描述

在这里插入图片描述

  1. 改zip的扩展名为war

  2. 复制到webapps目录下,tomcat会自动解压成一个同名的目录。

发布方式2:虚拟目录

原理

在server.xml配置文件中指定虚拟地址,指向服务器上一个真实的目录

配置方式

server.xml中找到host元素下,添加以下配置

Context元素属性说明
path指定虚拟地址,浏览器上访问地址
docBase指向服务器上真实目录

优点:不用复制文件,不会导致webapps目录下项目过多,从而影响tomcat的启动速度

步骤
  1. 打开conf/server.xml文件

  2. 找到host元素,在152行

  3. 添加子元素Context,包含2个属性:path, docBase

<Host name="localhost"  appBase="webapps"
	unpackWARs="true" autoDeploy="true">
	注:一定要有结束/
   <Context path="/heima" docBase="e:/heima" />	   

</Host>

发布方式3:独立的XML文件

注:前面2种方式都要重新启动tomcat,在idea中默认是这种方式。

与方式2类似,区别是方式2配置在server.xml文件中,这种方式每个项目有一个单独的xml配置文件

步骤
  1. 在tomcat/conf/catalina/localhost中创建xml配置文件

  2. 名称假设为:second.xml,这个名称就是项目的访问路径

在这里插入图片描述

  1. 添加xml文件的内容为
<Context  docBase="项目所在的目录" />
浏览器上测试

在这里插入图片描述

小结

  1. 方式1:直接复制到webapps目录

  2. 方式2:虚拟目录,修改server.xml文件,配置Context 指定path="/虚拟路径" docBase=“真实目录”

  3. 方式3:在conf/catalina/localhost 下创建一个xml文件,文件名就是访问地址,内容Context docBase=“真实目录”

上午的回顾

架构

  • BS:Browser Server 浏览器/服务器模式
  • CS:Client Server 客户端/服务器模式

资源分类

划分标准:程序是否在服务器端执行,执行在服务器端就是动态资源,否则就是静态资源。

  • 静态技术:HTML,CSS,JavaScript
  • 动态:JSP Servlet

Web服务器

也是一个软件,运行在服务器端,称为Web容器。我们写的JSP和Servlet运行在Web服务器中。

常用的web服务器

  1. Tomcat
  2. Glass Fish
  3. JBoss
  4. WebLogic
  5. Websphere

Tomcat安装和配置

  • 安装:直接解压到任意目录,不要有中文目录,目录层次不要太深
  • 配置两项:
    • CATALINA_HOME=安装目录
    • Path=%CATALINA_HOME%\bin

Tomcat的启动和关闭

启动:startup.bat

关闭:shutdown.bat

目录结构

  • bin: 可执行文件所在的目录

  • conf:配置文件所在目录

  • log:日志记录文件

  • webapps: 项目部署的目录

三种发布方式

  1. 直接复制到webapps目录下
  2. 虚拟目录:修改server.xml文件,添加元素Context path="/路径" docBase=“真实地址”
  3. 单独的xml文件:在conf/catalina/localhosts/文件名.xml 文件名就是访问地址,内容Context docBase=“真实地址”

在idea中配置Tomcat

目标

  1. 在idea中创建一个静态网站
  2. 配置tomcat,部署静态网站运行

idea中配置tomcat

只需要配置一次即可,我们要将idea和tomcat集成到一起,可以通过idea就控制tomcat的启动和关闭

  1. 编辑运行配置

在这里插入图片描述

  1. 添加Tomcat的配置服务器信息

在这里插入图片描述

注:如果看不到Tomcat Server,点下面的33 items more

  1. 配置服务器的详细信息
    在这里插入图片描述

  2. 修改项目发布的访问地址

在这里插入图片描述

  1. 选项卡的各项参数说明

在这里插入图片描述

  1. 点右上角的启动图标,启动Tomcat服务器

在这里插入图片描述

Web项目的目录结构

目标

认识web项目的目录结构

案例

  1. 创建一个web项目
  2. 部署到tomcat中
  3. 运行tomcat查看结果

创建Web项目

  1. 创建JavaEE项目

在这里插入图片描述

  1. 修改模块的名字

在这里插入图片描述

  1. 结构图

在这里插入图片描述

  1. 把heima目录下内容复制到web目录下(heima目录不要复制)

在这里插入图片描述

  1. 部署运行,默认是自动部署

在这里插入图片描述

  1. 启动运行,在浏览器上看效果。默认打开index.html

在这里插入图片描述

  1. 可选:修改网页默认打开的首页 web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--指定欢迎文件列表,可以指定多个-->
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

小结

项目结构

  1. src Java源代码
  2. web 网页
    1. 网页:html, css, js
    2. WEB-INF
      1. lib 第三方的jar包
      2. classes 字节码
      3. web.xml 项目配置文件

HTTP协议的概念

目标

  1. 什么是HTTP
  2. 它有什么特点

概念

HTML:Hyper Text Markup Language 超文本标记语言

HTTP:Hyper Text Transfer Protocol 超文本传输协议,用来传输网页的。规定了网页的传输格式

HTTP协议我们要学的就是它的请求和响应协议格式是什么样的。

在这里插入图片描述

HTTP协议的特点:

  1. 简单快速:规定了网页传输格式,传输速度快,格式相对简单。它是应用层协议,运行在TCP协议之上
  2. 无连接:浏览器与服务器之间没有连接的,每次请求结束连接就断开,不会占用服务器连接资源。
  3. 无状态:不会记录浏览器端客户状态,针对服务器来说,服务器并不知道多次请求是同一个用户发送的,还是多个不同的用户。
  4. 默认的端口号是:80不是8080

HTTPS

HTTPS:Secure 安全,是在HTTP的基础上加密的一种协议,数据在网络传输过程中加密。

端口号是:443

在这里插入图片描述

小结

  1. 什么是HTTP? 超文本传输协议,用来传输网页
  2. 它由哪两个组成部分?
    1. HTTP请求
    2. HTTP响应

HTTP请求的三个组成

目标

请求有哪三个组成部分

什么是请求

英文:request 从浏览器端发送数据到服务器端,称为请求

查看HTTP请求

在这里插入图片描述

  1. 在HTML页面上,制作2个表单提交页面,用户名和密码,get提交和post提交按钮,查看HTTP请求

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>登录页面</title>
    </head>
    <body>
    <!--制作2个表单提交页面,用户名和密码,get提交和post提交按钮-->
    <h2>GET请求</h2>
    <!--action就是服务器的访问地址-->
    <form action="login" method="get">
        用户名:<input type="text" name="username"><br>
        密码:<input type="password" name="password"><br>
        <input type="submit" value="登录">
    </form>
    
    <hr/>
    <h2>POST请求</h2>
    <form action="login" method="post">
        用户名:<input type="text" name="username"><br>
        密码:<input type="password" name="password"><br>
        <input type="submit" value="登录">
    </form>
    
    </body>
    </html>
    
  2. 查看浏览器与服务器的通讯,按F12打开窗口

请求的组成

在这里插入图片描述

小结

请求由哪三个组成部分?分别是?

  1. 请求行:一行字符串
  2. 请求头:多个键和值组成
  3. 请求体:POST才有请求体,GET没有请求体

请求信息的组成:请求行

目标

  1. 请求行的格式
  2. POST和GET请求的区别

请求行组成

GET /day07_heima_war_exploded/login?username=rose&password=123 HTTP/1.1

POST /day07_heima_war_exploded/login HTTP/1.1

三个部分:

  1. 请求的方法:GET或POST
  2. 请求的URI:Uniform Resource Identifer 用来标识一个资源,资源的名字,并不是一个完整的访问地址
  3. HTTP/1.1:使用的HTTP协议和版本

POST与GET的区别

POST方式GET方式
地址栏不会显示参数,因为它的参数在请求体中发送会显示参数,因为它的参数是在请求行中发送
大小理论上没有大小限制受浏览器限制,通常是1K大小
安全性相对安全一些不安全,参数显示在地址栏上
缓存不能使用浏览器端缓存可以使用缓存的
如果使用缓存状态码是304
没有使用缓存状态码是200

在这里插入图片描述

小结

  1. 请求行由哪三个组成部分?
    1. 提交方式
    2. URI
    3. HTTP/1.1
  2. GET方法和POST方法传递数据有什么区别?
    1. 哪个使用缓存?GET
    2. 哪个没有限制数据的大小?POST

请求信息的组成:请求头、请求体

目标

了解常见请求头的作用

常用请求头

请求头描述
referer上一个页面的地址
在这里插入图片描述
if-modified-since页面缓存的时间,相差8小时
在这里插入图片描述
user-agent浏览器和操作系统的信息
在这里插入图片描述在这里插入图片描述
Connection: keep-alive查看TCP协议连接状态
在这里插入图片描述
Host访问服务器主机名和端口号
在这里插入图片描述
Content-Type:请求数据的内容MIME类型

请求体

就是浏览器发送给服务器的数据

  1. GET:没有请求体,它的数据是在请求行发送
    在这里插入图片描述

  2. POST:数据在请求体中发送

在这里插入图片描述

小结

在这里插入图片描述

学习总结

  1. 能够理解软件的架构

    1. BS:Browser Server
    2. CS:Client Server
  2. 能够理解WEB资源概念

    1. 静态
    2. 动态
  3. 能够理解WEB服务器

    用于运行我们写的Java程序,它本身也是一个程序,共享服务器的资源给浏览器

    1. Tomcat
    2. Glass Fish
    3. JBoss
    4. WebLogic
    5. Websphere
  4. 能够运用Tomcat服务器部署WEB项目

在这里插入图片描述

  1. 能够使用浏览器开发工具查看HTTP协议请求内容

在这里插入图片描述

  1. 能够理解HTTP协议请求内容

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

娃娃 哈哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值