- 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的 内容, 设计出来的。
- 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元素就可以了
- 互联网 访问某个资源文件到底是如何访问到的:
http://www.sina.com/novel/1.html
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 请求 次数
重点:
- 302 + Location 完成请求重定向
- refresh 自动刷新
- gzip压缩
- Tomcat默认缓存策略 If-Modified-Since Last-Modified 结合304 实现
- 禁用缓存
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: 表示服务器出现了 异常 .
- 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步骤)
- 继承 javax.servlet.http.HttpServlet
- 覆盖doGet、doPost
- web.xml配置Servlet的虚拟路径
- 启动服务器, 发布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();
}
}
}