《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对象 |
学习目标
- 能够理解软件的架构
- 能够理解WEB资源概念
- 能够理解WEB服务器
- 能够运用Tomcat服务器部署WEB项目
- 能够使用浏览器开发工具查看HTTP协议请求内容
- 能够理解HTTP协议请求内容
学习内容
软件的架构:BS和CS
目标
- 什么是BS
- 什么是CS
BS和CS概述
- CS(Client/Server):客户端/服务器模式
- BS(Browser/Server):浏览器/服务器模式
CS特点
软件
大型游戏
- 本地电脑上必须安装软件,下载到本地的软件,称为客户端。所有的客户端软件在运行过程中都需要连接服务器。数据是保存在服务器上的。
- 如果服务器进行升级和维护,本地客户端也需要升级。
- 程序员开发工作量主要是在客户端
BS特点
企业管理软件
软件是运行在浏览器,软件和数据都是保存在服务器上,BS结构必须要有浏览器。
- 客户端不需要安装其它的软件,有浏览器就够了。
- 如果服务器端进行升级和维护,浏览器端不需要进行任何的操作就可以升级。
- 程序员开发工作量主要在服务器端
小结
- 什么是BS?Browser Server
- 什么是CS?Client Server
Web资源的分类:静态和动态
目标
Web资源分成哪两类
分类依据
- Web资源分成两种:静态和动态
- 分类的依据:程序是否运行在服务器端,如果程序运行在服务器端,称为动态资源,如果运行在浏览器端称为静态资源。
静态网站的特点:
如果一个资源制作好以后,放在服务器上,如果没有去更新,永远是一成不变的,这就是静态资源。运行静态资源的网站,称为静态网站。
使用的技术:HTML,CSS,JavaScript 都是运行在浏览器端
动态网站的特点:
- 服务器端通常都有数据库服务器在执行,数据是保存在数据库中的
- 功能上会更加强大,可以实现静态网站不能实现的功能,如:用户注册,下订单,拍卖
- 我们在浏览器端看到的网页,其实是服务器端Java程序的运行结果。如果每次运行的结果不同,用户在浏览器上看到的网页内容也就不同。
- 使用的技术:JSP,Sevlet,PHP,C#等
小结
Web资源分成哪两类?
- 动态网站
- 静态网站
什么是Web服务器
目标
什么是Web服务器
什么是Web服务器
我们写的静态网页或动态网页必须运行在服务器上,这个服务器称为Web服务器,也称为Web容器。容器中放的是所有的web资源:JSP,Servlet,HTML,图片等
- Web容器本身也是一个程序,今天学习的Tomcat就是一个Web容器,也称为Web服务器,它就是Java写的,运行在Java虚拟机中。
- 实现了数据共享的功能,把web容器中所有的资源共享给全世界的用户使用。
- 是通过请求和响应的方式进行实现用户与服务器之间的交互。用户通过浏览器发送请求给服务器,服务器发送响应给浏览器。
JavaEE规范
Java分为三个部分:
- JavaSE:Java标准版,以前我们学的都是JavaSE
- JavaME:移动版,用于嵌入式开发
- 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规范。
小结
- Web服务器是什么?又称为web容器,我们所有的资源放在web容器中去执行的
- 说出三个常用的Web服务器
- tomcat
- weblogic
- class fish
- jboss
案例:自己模拟一个Tomcat
注:以后我们使用JDK1.8的版本
目标
使用多线程和Socket模拟一个简单的Web服务器,将服务器上的资源共享给浏览器
说明
实现的功能:在服务器上有一个index.html网页,通过浏览器去访问tomcat,并且打开这个网页
使用到技术点:
- 使用多线程,每个用户访问创建一个线程
- 使用Socket编程
- 用到文件输入流
步骤
- 采用多线程的方法,每个用户创建一个线程。
- 当有用户连接的时候在服务器控制台输出信息
- 在线程的run方法中读取本地服务器的资源,得到输入流对象
- 通过Socket得到输出流
- 输出响应行:HTTP/1.1 200 OK\r\n
- 输出响应类型:Content-Type: text/html;charset=utf-8\r\n
- 输出空行\r\n
- 输出其它内容到客户端
执行效果
代码
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的安装、配置
目标
- tomcat的安装
- 环境变量的配置
下载页面
tomcat的产品页面: http://tomcat.apache.org/
下载版本
安装
-
不要有中文目录
-
目录层级不要太深
-
直接解压就可以使用
环境变量的配置
- 用户变量类似于局部变量,系统变量类似于全局变量,建议配置在系统变量
- 添加Tomcat的安装目录
- 配置Path,可以在任何路径下访问bin文件夹的可执行文件
小结
- tomcat如何安装
- 直接解压就可以了
- 不要有中文目录
- 目录层次不要太深
- 需要配置哪两个环境变量
- CATALINA_HOME=安装目录
- Path=%CATALINA_HOME%\bin
Tomcat的启动与关闭
目标
- 启动与关闭tomcat的命令
- Tomcat每个目录的作用
启动与关闭命令
前提最好配置了Path,就可以在任意的目录下执行这两条命令,如果没有配置Path,则必须在tomcat/bin目录下才可以执行。
- 启动的命令:startup.bat
- 关闭的命令:shutdown.bat
在命令窗口下执行,不建议鼠标双击
有乱码的原因是因为Tomcat默认是UTF-8的编码,而在Windows窗口下编码是GBK
解决乱码的问题
- 修改C:\apache-tomcat-8.5.51\conf\logging.properties
- 打开将所有的UTF-8换成GBK就可以
小结
- 启动的命令:startup.bat
- 关闭的命令:shutdown.bat
Tomcat的目录结构
目标
tomcat中每个目录作用
启动tomcat效果
控制台的输出
浏览器端
关闭以后
目录作用
目录名 | 作用 |
---|---|
bin | 可执行文件所在的目录,如:启动和关闭命令 |
conf | 服务器配置文件所在目录,如:server.xml 是服务器的配置文件 |
lib | tomcat是使用Java语言编写,依赖第三方jar包。 |
logs | 日志记录目录,服务器运行过程中信息记录下来,每天会创建一个 |
temp | 临时目录,tomcat执行过程中生成临时文件,这下面的数据可以删除 |
webapps | 我们的项目部署目录,这下面的每个项目就是一个目录 |
ROOT目录:默认打开的项目,默认打开index.jsp或index.html文件 | |
work | 工作目录,JSP执行过程中生成class文件,放在这个目录下 |
小结
- bin和webapps目录的作用是什么?
- 可执行文件所在的目录
- 项目部署的目录
Tomcat启动时常见的问题
目标
启动时常见的两个问题
问题1:未设置JAVA_HOME环境变量
因为tomcat也是java编写,它必须运行在JVM中
- 出错信息
- 解决办法
问题2:端口号被占用
注:tomcat默认的端口号是8080,必须保证这个端口号不被占用
- 出错信息
- 查看日志文件:在logs目录下也会记录
-
解决方法:
- 方法一:找到占用端口号的程序,进程杀掉。
- 方法二:修改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
操作方法
- 直接将项目复制到webapps目录下
访问格式
-
采用压缩文件.war的方式
-
进入项目的目录,不包含顶层文件夹
-
将整个项目使用压缩工具打包成一个zip文件
-
-
改zip的扩展名为war
-
复制到webapps目录下,tomcat会自动解压成一个同名的目录。
发布方式2:虚拟目录
原理
在server.xml配置文件中指定虚拟地址,指向服务器上一个真实的目录
配置方式
server.xml中找到host元素下,添加以下配置
Context元素属性 | 说明 |
---|---|
path | 指定虚拟地址,浏览器上访问地址 |
docBase | 指向服务器上真实目录 |
优点:不用复制文件,不会导致webapps目录下项目过多,从而影响tomcat的启动速度
步骤
-
打开conf/server.xml文件
-
找到host元素,在152行
-
添加子元素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配置文件
步骤
-
在tomcat/conf/catalina/localhost中创建xml配置文件
-
名称假设为:second.xml,这个名称就是项目的访问路径
- 添加xml文件的内容为
<Context docBase="项目所在的目录" />
浏览器上测试
小结
-
方式1:直接复制到webapps目录
-
方式2:虚拟目录,修改server.xml文件,配置Context 指定path="/虚拟路径" docBase=“真实目录”
-
方式3:在conf/catalina/localhost 下创建一个xml文件,文件名就是访问地址,内容Context docBase=“真实目录”
上午的回顾
架构
- BS:Browser Server 浏览器/服务器模式
- CS:Client Server 客户端/服务器模式
资源分类
划分标准:程序是否在服务器端执行,执行在服务器端就是动态资源,否则就是静态资源。
- 静态技术:HTML,CSS,JavaScript
- 动态:JSP Servlet
Web服务器
也是一个软件,运行在服务器端,称为Web容器。我们写的JSP和Servlet运行在Web服务器中。
常用的web服务器
- Tomcat
- Glass Fish
- JBoss
- WebLogic
- Websphere
Tomcat安装和配置
- 安装:直接解压到任意目录,不要有中文目录,目录层次不要太深
- 配置两项:
- CATALINA_HOME=安装目录
- Path=%CATALINA_HOME%\bin
Tomcat的启动和关闭
启动:startup.bat
关闭:shutdown.bat
目录结构
-
bin: 可执行文件所在的目录
-
conf:配置文件所在目录
-
log:日志记录文件
-
webapps: 项目部署的目录
三种发布方式
- 直接复制到webapps目录下
- 虚拟目录:修改server.xml文件,添加元素Context path="/路径" docBase=“真实地址”
- 单独的xml文件:在conf/catalina/localhosts/文件名.xml 文件名就是访问地址,内容Context docBase=“真实地址”
在idea中配置Tomcat
目标
- 在idea中创建一个静态网站
- 配置tomcat,部署静态网站运行
idea中配置tomcat
只需要配置一次即可,我们要将idea和tomcat集成到一起,可以通过idea就控制tomcat的启动和关闭
- 编辑运行配置
- 添加Tomcat的配置服务器信息
注:如果看不到Tomcat Server,点下面的33 items more
-
配置服务器的详细信息
-
修改项目发布的访问地址
- 选项卡的各项参数说明
- 点右上角的启动图标,启动Tomcat服务器
Web项目的目录结构
目标
认识web项目的目录结构
案例
- 创建一个web项目
- 部署到tomcat中
- 运行tomcat查看结果
创建Web项目
- 创建JavaEE项目
- 修改模块的名字
- 结构图
- 把heima目录下内容复制到web目录下(heima目录不要复制)
- 部署运行,默认是自动部署
- 启动运行,在浏览器上看效果。默认打开index.html
- 可选:修改网页默认打开的首页 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>
小结
项目结构
- src Java源代码
- web 网页
- 网页:html, css, js
- WEB-INF
- lib 第三方的jar包
- classes 字节码
- web.xml 项目配置文件
HTTP协议的概念
目标
- 什么是HTTP
- 它有什么特点
概念
HTML:Hyper Text Markup Language 超文本标记语言
HTTP:Hyper Text Transfer Protocol 超文本传输协议,用来传输网页的。规定了网页的传输格式
HTTP协议我们要学的就是它的请求和响应协议格式是什么样的。
HTTP协议的特点:
- 简单快速:规定了网页传输格式,传输速度快,格式相对简单。它是应用层协议,运行在TCP协议之上
- 无连接:浏览器与服务器之间没有连接的,每次请求结束连接就断开,不会占用服务器连接资源。
- 无状态:不会记录浏览器端客户状态,针对服务器来说,服务器并不知道多次请求是同一个用户发送的,还是多个不同的用户。
- 默认的端口号是:80不是8080
HTTPS
HTTPS:Secure 安全,是在HTTP的基础上加密的一种协议,数据在网络传输过程中加密。
端口号是:443
小结
- 什么是HTTP? 超文本传输协议,用来传输网页
- 它由哪两个组成部分?
- HTTP请求
- HTTP响应
HTTP请求的三个组成
目标
请求有哪三个组成部分
什么是请求
英文:request 从浏览器端发送数据到服务器端,称为请求
查看HTTP请求
-
在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>
-
查看浏览器与服务器的通讯,按F12打开窗口
请求的组成
小结
请求由哪三个组成部分?分别是?
- 请求行:一行字符串
- 请求头:多个键和值组成
- 请求体:POST才有请求体,GET没有请求体
请求信息的组成:请求行
目标
- 请求行的格式
- POST和GET请求的区别
请求行组成
GET /day07_heima_war_exploded/login?username=rose&password=123 HTTP/1.1
POST /day07_heima_war_exploded/login HTTP/1.1
三个部分:
- 请求的方法:GET或POST
- 请求的URI:Uniform Resource Identifer 用来标识一个资源,资源的名字,并不是一个完整的访问地址
- HTTP/1.1:使用的HTTP协议和版本
POST与GET的区别
POST方式 | GET方式 | |
---|---|---|
地址栏 | 不会显示参数,因为它的参数在请求体中发送 | 会显示参数,因为它的参数是在请求行中发送 |
大小 | 理论上没有大小限制 | 受浏览器限制,通常是1K大小 |
安全性 | 相对安全一些 | 不安全,参数显示在地址栏上 |
缓存 | 不能使用浏览器端缓存 | 可以使用缓存的 如果使用缓存状态码是304 没有使用缓存状态码是200 |
小结
- 请求行由哪三个组成部分?
- 提交方式
- URI
- HTTP/1.1
- GET方法和POST方法传递数据有什么区别?
- 哪个使用缓存?GET
- 哪个没有限制数据的大小?POST
请求信息的组成:请求头、请求体
目标
了解常见请求头的作用
常用请求头
请求头 | 描述 |
---|---|
referer | 上一个页面的地址![]() |
if-modified-since | 页面缓存的时间,相差8小时![]() |
user-agent | 浏览器和操作系统的信息![]() ![]() |
Connection: keep-alive | 查看TCP协议连接状态![]() |
Host | 访问服务器主机名和端口号![]() |
Content-Type: | 请求数据的内容MIME类型 |
请求体
就是浏览器发送给服务器的数据
-
GET:没有请求体,它的数据是在请求行发送
-
POST:数据在请求体中发送
小结
学习总结
-
能够理解软件的架构
- BS:Browser Server
- CS:Client Server
-
能够理解WEB资源概念
- 静态
- 动态
-
能够理解WEB服务器
用于运行我们写的Java程序,它本身也是一个程序,共享服务器的资源给浏览器
- Tomcat
- Glass Fish
- JBoss
- WebLogic
- Websphere
-
能够运用Tomcat服务器部署WEB项目
- 能够使用浏览器开发工具查看HTTP协议请求内容
- 能够理解HTTP协议请求内容