web学习一——We简介、Tomcat、HTTP协议

本文介绍了Web资源的分类,包括静态和动态资源,以及JavaWeb开发中的核心概念。深入讲解了Tomcat服务器的目录结构、Web应用的发布、虚拟目录映射和War文件的制作。此外,还探讨了HTTP协议,包括请求和响应过程,并介绍了如何使用HttpWatch进行抓包。最后,简述了Servlet接口和生命周期,强调了动态web资源的开发与部署。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. web介绍

WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源。

1.1 web资源

Internet上供外界访问的Web资源分为:
静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变。
动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。

静态web资源开发技术
Html + css + js (dhtml ) dynamic

常用动态web资源开发技术:
JSP/Servlet(sun)、ASP(.net)、PHP(开源组织)等

在Java中,动态web资源开发技术统称为Javaweb,我们课程的重点也是教大家如何使用Java技术开发动态的web资源,即动态web页面。

1.2 web通信

web开发系统的通信
这里写图片描述
1.必须现有请求(request ), 后有响应(response)
2.请求和响应成对的出现
3.本来是一个 C/S架构, 但是 由于web 开发的特殊性, 始终是打开一个浏览器去访问服务器, 所以更形象 称之为 B/S 架构

Javaweb :它是由 传统的经典 javaee 开发 而来的, javaweb 中学到的都是javaee 中灰常经典的 内容, android 并不是 凭空 而来的, android 就是 参考了很多 javaee的 内容, 设计出来的。

  1. Tomcat(见文档day07_tomcat_http\资料\tomcat&http协议.doc)

2.1 程序包

tar.gz文件是Linux操作系统下的安装版本
exe文件是Windows系统下的安装版本
zip文件是Windows系统下的压缩版本 

netstat -ano 命令,查看 端口的占用情况

2.2 Tomcat的 目录层次结构

这里写图片描述

2.3 Web应用的目录组织结构

这里写图片描述
这里写图片描述

2.3.1 集成一台tomcat服务器到myeclipse中

在eclipse中新建一个web project工程,eclipse会自动创建下图所示目录结构:
这里写图片描述
web应用是如何发布到 tomcat服务器中去的:
这里写图片描述
2.4 虚似目录的映射

Web应用开发好后,若想供外界访问,需要把web应用所在目录交给web服务器管理,这个过程称之为虚似目录的映射。
虚似目录的映射的方式有三种
第一种:在server.xml 文件中, host元素下 添加如下的内容
这里写图片描述
通过 /ithiema就可以访问 d:\mail文件夹
由于 更改了 server.xml 文件, 需要重新启动 服务器
这里写图片描述

第二种: 配置不需要重启服务器. 会自动完成加载
这里写图片描述
这里写图片描述

第三种:傻瓜式的 , 直接将 web应用 丢到 webapps目录下就可以 让服务器自动 管理了, 实际开发过程中,这种是用的最多的 .
这里写图片描述

2.5 War文件的制作

War文件:是你可以远程的将已经开发好的web应用发布到tomcat服务器 时的一种 压缩格式
War文件的制作方式有两种:
第一种:
傻瓜式的通过 工具 rar压缩 工具, 然后 将 扩展名 改为 .war 文件 , 然后 丢到 webapps目录下. Tomcat服务器会自动的 解压缩 , 就可以 访问了
这里写图片描述

第二种:
通过命令 压缩 ,然后 将 war 文件 丢到 webapps 目录下.
这里写图片描述

2.6 TomcatManager的使用

提供一种 ui的界面, 让程序员 可以远程的去管理服务器 .

在conf目录下的 tomcat-users.xml 文件中,添加如下的内容 . 然后重启服务器.
这里写图片描述

2.7 Web.xml文件

Web.xml文件是整个web应用中最重要的配置文件,它必须放在WEB-INF目录中。在开发web应用时,但凡涉及到对web应用中的web资源进行配置,通通是在web.xml文件中进行设置。例如:
某个web资源配置为网站首页
将servlet程序映射到某个url地址上
为web应用配置监听器
为web应用配置过滤器
配置web应用的启动信息
……

2.7.1 将某个资源文件配置为web应用首页

在 web.xml 文件中添加 如下的内容
这里写图片描述
最终可以通过
这里写图片描述

2.8 配置虚拟主机

Tomcat是一个服务器, 这个服务器中是可以配置很多个虚拟的主机的.
每个虚拟主机 实际上就是一个虚拟的名字,如:
http://www.baidu.com
http://www.sina.com
http://localhost
进到 server.xml 文件中, 找打 Host元素, 那么 同样 的配置 多个 host元素就可以了

2.8.1 配置 多个 host元素

Hosts 文件 存在于 C:\Windows\System32\Drivers\etc
第一步:
进到 hosts文件, 添加 主机名和ip地址的对应的关系
这里写图片描述
第二步:
进到server.xml 文件中添加 host元素, 并且 指向对应的文件夹.
这里写图片描述
第三步:
重启服务器去访问
注意点:
1.Hosts 如何不让更改怎么办.
2.路径不要写错.
问题:
如何搭建一个自己的网站? 
1. 上万维网联盟,去拍个域名   
2. 将自己的电脑作为服务器.运行个tomcat服务器,将端口改为80。配置一个 你拍下来的 域名对应的主机名
额外的问题:
花生壳, google 提供了很多 免费的域名

2.8.2 配置默认的主机名

当直接通过ip地址去访问的时候, 并没有指定 具体要访问哪个 主机名

http://192.168.1.100/news/1.html
sina主机名 1.html
没有 告诉 具体要访问服务器中的哪个主机, 所以这个时候就 会去访问 默认的主机.
是可以通过配置来实现的

  • 通过 http://192.168.1.100 可以访问到 tomcat服务器的首页
    这里写图片描述
    说明,当前肯定是将 localhost的配置为默认的主机名, 并且这个默认的主机名下配置了默认的web应用,默认的web应用下又 配置 了默认的欢迎页面.

2.8.3将自己的配置成一个默认的主机名, 并且配置默认的web应用, 并且默认的web应用下配置默认的欢迎页面.

具体步骤:
第一步:
将 defaultHost配置 为 www.sina.com
这里写图片描述
第二步:
Hosts文件
这里写图片描述
第三步:
将新浪下的 news配置成默认的web应用.
这里写图片描述
写个 / 就表示将 新浪 下的news配置成默认的web应用
第四步:
将 news应用下的1.html页面
在 news应用下 建 一个WEB-INF文件下, 然后建一个 web.xml文件
内容如下:
这里写图片描述
第五步:
http://192.168.1.100

2.9 tomcat服务器缓存策略

这里写图片描述
3. HTTP协议

基于TCP连接的传输协议
默认端口是80
基于请求-响应模式的协议
Web 开发优化 原则 : 尽量减少 web 请求 次数
重点:

  1. 302 + Location 完成请求重定向
  2. refresh 自动刷新
  3. gzip压缩
  4. Tomcat默认缓存策略 If-Modified-Since Last-Modified 结合304 实现
  5. 禁用缓存
    3.1 安装httpwatch插件

安装 httpwatch professional 插件, 安装后 打开 ie 浏览器, 点击 record, 实时的抓包 .
一次http的请求和响应过程中所有的数据都可以用它 来捕获 .
而大家 以后学习android 时, 使用rtsp协议时, 用的最多的抓包的工具 就是 wireshark
3.2 HTTP请求

这里写图片描述

3.2.1 请求内容

http请求分为 : 请求行, 请求头, 请求体
请求行: 请求方式 请求的资源路径 协议的版本 , 请求 行中通常最关心的是 请求的 资源的路径
请求头: 请求头是从第二行开始到 下一个空行之前结束,
请求头 符合 key:value 这个中格式, (键值对 )
请求体: 带过来 一些请求的参数, 只有在post方式下有请求体 .

3.2.2 get和post请求的区别

1.Get请求没有请求, post请求有请求体
2.Get方式请求的参数会跟在请求的资源路径后, 而post的请求参数会跟在 请求的请求体中
3.由于get方式的请求的参数是跟在url路径后, 所以get方式请求时参数数据不能超过大小限制(1kb), 超过1kb, 那么就会丢失数据, 而 post 请求参数是跟在请求体中,没有大小的限制
大家觉得 post 好, 但是 注意, 在大多数情况下你用的都是get方式请求, 只有在表单提交数据的时候, 才可以将 请求方式改为 Post
3.3 HTTP响应
这里写图片描述
响应行 中, 最有用的 是状态码:
这里写图片描述

  • 常用的状态码(重要) :
    200 : 服务器很好的处理了客户端的请求,一切 OK
    302: 通常 与 响应头 location一起实现,实现请求重定向
    304: 通常表示资源文件在服务器没有更改,而浏览器端又有缓存,这 时候回送304 状体码通知浏览器拿本地的缓存显示
    404: 表示客户端访问的资源路径有问题, 资源问题不存在
    500: 表示服务器出现了 异常 .
  1. Servlet

Sun在 其api 中定义了servlet 接口,不要去到 jdk 中找, 而要去 javaee的api 找。
Servlet是sun公司提供的一门用于开发动态web资源的技术。
servlet 基于request - response 请求模型 (http协议)
Sun公司在其API中提供了一个servlet接口,用户若想开发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
编写一个Java类,实现servlet接口。
把开发好的Java类部署到web服务器中。
4.1 快速入门(编写servlet步骤)

  1. 继承 javax.servlet.http.HttpServlet
  2. 覆盖doGet、doPost
  3. web.xml配置Servlet的虚拟路径
    这里写图片描述
  4. 启动服务器, 发布web应用,去访问http://localhost:8080/day08_servlet/hello
    web.xml配置Servlet访问虚拟路径:
    这里写图片描述
    GET方式请求提交映射关系:
    这里写图片描述

4.2 为什么要去继承HttpSerlvet

这里写图片描述

4.3 servlet的生命周期

servlet的生命周期方法执行顺序:
Init : 第一次访问, 创建serlvet的时候会执行, 用来 初始化 serlvet
Service: 每次 请求的时候, 都会执行
Destroy: 当servlet销毁, 不再服务客户端请求的时候销毁
小结: 一个servlet第一次被访问的时候,会创建出来,调用init 初始化,然后这个servlet类的一个实例对象就驻留在内存中,后续再去访问这个servlet的时候, 就会拿 内存中servlet实例来响应请求. 直至 服务器 停止…

4.4 自定义的servlet 的doGet,doPost方法是如何被调用到的

Servlet程序不是 咱们自己调用的, 是服务器调用的.
Servlet在每次访问的时候都会调用service方法, 但是 我们在访问自定义的sevlet的时候, 发现没有service方法, 只写了doGet和doPost, 但是 这个doGet ,doPost方法在每次请求的时候 也都相应的执行了. 那么这里的 doGet,doPost方法是如何被调用到的呢?
这里写图片描述
生命周期的service方法, 调用了 httpservlet 自定义的那个 service方法, 而自定义的service 方法中,又 根据当前的请求方式, 调用 了具体的doXxx方法
原来, doGet,doPost方法 实际上还是 通过调用了生命周期的service , 再根据请求方式 调用过来的.

Tomcat练习

package com.itheima.server;

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

public class MyServer {
	public static void main(String[] args) throws Exception {
		ServerSocket server = new ServerSocket(8888);	
		while(true){			
			Socket socket = server.accept();		
			// 每次 都启动一个新的线程 响应大家的请求			
			new Thread(new MyService(socket)).start();
		}		
	}
}
class MyService implements Runnable{
	private Socket sock;
	public MyService(Socket sock ) {		
		this.sock = sock;
	}	
	@Override
	public void run() {		
		try {
			OutputStream out = sock.getOutputStream();			
			InputStream in = new FileInputStream("d:\\a\\1.html");			
			byte[] buf = new byte[1024];
			int len = 0;
			while((len=in.read(buf))>0){			
				out.write(buf, 0, len);
			}			
			in.close();
			out.close();
			sock.close();			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
	}	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值