WEB简述

Web概述

什么是Web

  • Web(World Wide Web)即全球广域网,也成为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形系统。是建立在Internet上的一种网络服务,为浏览者在Internet上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将Internet上的信息节点组织成一个互为关联的网状结构。

什么是JAVA WEB

使用java语言进行WEB的开发

软件架构:

  • CS架构的软件
    • CS:Client/Server客户端和服务器,这种软件往往需要安装。比如QQ、迅雷、播放器。
    • 优缺点:
      • 优点:可以减轻服务器端压力,将部分代码写到客户端。软件界面比较美观。
      • 缺点:一旦服务器进行了更新,客户端需要同步更新才能继续使用。分布式开发比较弱。
  • BS架构的软件
    • BS:Browser/Server浏览器和服务器,这种软件不需要安装,只需要通过浏览器就可以访问。
    • 优缺点:
      • 优点:服务器更新,客户端不需要同步更新也能继续访问。比较强的分布式能力。
      • 缺点:服务器压力较大。界面不如CS结构软件美观

WEB服务器

  • 硬件:本质上是配置较高的计算机
  • 软件:需要在计算机上安装WEB服务器的软件
  • 常见的软件:
    • Tomcat:Apache提供的开源的免费的Web服务器。满足EE的Servlet和JSP的规范。
    • WebSphere:IBM开发的一个收费的大型web服务器,满足了EE开发的所有规范。
    • WebLogic:BEA开发的一个收费的大型web服务器,满足了EE开发的所有规范。
    • IIS:应用在.net平台的web服务器。
    • Apache:应用在php平台的web服务器。

WEB开发中的资源

  • 静态web资源:HTML、CSS、JS
  • 动态web资源:Servlet、JSP、PHP、ASP

Tomcat

Tomcat概述

  • Tomcat是Apache项目中的一个核心项目,是一个免费的开源的Web应用服务器,属于轻量级应用服务器,是开发和调试JSP程序的首选。

Tomcat的使用

  • 启动:在Tomcat的bin路径下打开startup.bat

  • 关于Tomcat使用的一些问题

  • 当Tomcat打开发现窗口闪退可以通过编辑Startup.bat文件,在末尾插入pause暂停来查看原因

  • 当Tomcat正常运行却仍然无法访问localhost:8080时就需要查看是否是端口占用,具体方法为在cmd窗口中使用netstat -ano|findstr "8080"来查看8080端口占用情况,具体解决有两种办法:

    • 解除该端口的占用

      • 方法一:taskkill /pid [PID] /f
      • 方法二:打开任务管理器,在详细信息中找到占用端口的PID的应用,然后停止运行。
    • 修改端口号,在Tomcat/conf/server.xml中修改端口号为非占用端口号

      <Connector port="8080" protocol="HTTP/1.1"
                     connectionTimeout="20000"
                     redirectPort="8443" 
      		  URIEncoding="UTF-8"/>
      
      
  • Tomcat目录结构:

    • bin:二进制文件/执行文件(命令文件)
    • conf:配置文件
    • logs:日志文件
    • libs:Tomcat依赖jar包
    • temp:运行时产生的临时文件
    • webapps:发布的项目需要放在该文件
    • work:JSP翻译(编译)成Servlet产生的代码

动态Web资源的目录结构

website(根路径)
|---静态资源(HTML\CSS\JS\图片)
|---JSP页面
|---WEB-INF
|---|---web.xml(项目的基本配置)
|---|---classes(被编译的java类/Servlet)
|---|---lib(第三方jar包)

Tomcat项目发布方式

直接将项目复制到tomcat/webapps下

  • 放好项目
  • 启动Tomcat
  • 在浏览器中地址栏输入:localhost/[projectName]/[htmlName].html

在tomcat/conf/server.xml配置tomcat的虚拟路径

  • 虚拟路径:配置一个名称与一个真实的路径进行绑定,然后访问这个名称从而找到真实路径。

  • 如何配置虚拟路径:

    • 在Tomcat/conf/server.xml中进行配置(可以在Tomcat的文档中找到,启动Tomcat,在localhost:8080中找到)

    • <Host></Host>标签中配置如下:

      <Context path="/[VirtualPth]" docBase="[RealPath]"></Context>
      
    • 启动服务器访问:localhost:8080/[VirtualPth]/[htmlName].html

  • 缺陷:server.xml为Tomcat的核心配置文件,一旦出错,Tomcat将不能运行

在tomcat/conf/Catalina/localhost下配置tomcat的虚拟路径

  • 配置虚拟路径,在Tomcat/conf/Catalina/[hostname]/ 下新建任意命名的xml文件,在其中编写内容:

    <!-- xml文件必不可少的标题 -->
    <?xml version='1.0' encoding='utf-8'?>
    <Context docBase="[RealPath]"></Context>
    
  • 文件名就是虚拟路径(itcast),只需要访问itcast就可以访问项目,具体路径为:

    localhost:8080/[xmlName]/[htmlName].html

Tomcat后谈

Tomcat本身作为很优秀的Web容器,日常使用的多种IDE包括eclipse、IDEA等都兼容,配置好后可以进行更加方面的操作,本文仅仅是作为笔记模式的归纳整理,关于IDE中Tomcat的使用以后会单独整理。

Tomcat虚拟主机

网站访问的全过程(计算机网络)

  1. 客户端传入域名(https://www.xxx.com)
    • https(Hyper Text Transfer Protocol over SecureSocket Layer):经过SSL加密的超文本传输协议
    • www(World Wide Web):万维网,本质上是一个超文件系统,包括web服务器和web客户端两部分。存储超文本文档的计算机称为主机服务器。
    • xxx.com:域名(Domain Name),又称网域,是Internet上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识。由于IP地址不具有方便记忆且不能显示地址组织信息的缺点,所以通过域名解析系统将域名和IP地址相互映射。
  2. 在host文件中检索域名对应的ip地址,如果找到则向ip地址发送请求,如果没有找到,则进行下一步
  3. 向DNS服务器发送域名检索请求进行检索,如果找到则进行访问,没有则返回404

本地DNS服务器、DNS服务器和HOSTS文件的区别和联系

DNS服务器(域名解析系统):是一个将域名或IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。使用端口53。

本地DNS服务器:其是就近路由器的DNS转发器,路由器将发往他所有的DNS请求转发到上层DNS,严格来说不算DNS。

HOSTS文件:是一个没有扩展名的系统文件,作用是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,其映射是静态的,不会随IP地址的更新而更新。可以看作为一个DNS的本地缓存。

虚拟主机的概述

什么是虚拟主机?

在计算机中设置一个目录,使用一个name与该目录进行绑定。这个路径就叫做一个虚拟主机。主机是可以发布web项目的。

虚拟主机的配置

  • 自定义一个路径作为虚拟主机,例如我是用E:\VirtualTest\作为虚拟主机。

  • 在虚拟主机中添加项目。

  • 在Tomcat/conf/server.xml中建立<Host>标签添加虚拟主机信息(server.xml文件中有localhost主机作为模板):

    <!-- 属性name为自定义虚拟主机名,属性appBase为虚拟主机目录 -->
    <Host name="[url]"  appBase="E:\VirtualTest"
                unpackWARs="true" autoDeploy="true">
    
            <!-- SingleSignOn valve, share authentication between web applications
                 Documentation at: /docs/config/valve.html -->
            <!--
            <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
            -->
    
            <!-- Access log processes all example.
                 Documentation at: /docs/config/valve.html
                 Note: The pattern used is equivalent to using pattern="common" -->
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="localhost_access_log" suffix=".txt"
                   pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    
          </Host>
    
  • 修改本地的hosts文件

    将server.xml中的name属性通过hosts映射到你所需要的IP地址(可以是本地IP,通过cmd的ipconfig查看)。地址为appBase

    Hosts文件位置:

    C:\Windows\System32\drivers\etc\hosts

  • 启动服务器访问项目

    • 通过在server.xml中修改端口号,以及配置虚拟路径,可以直接通过

      主机名/xxx.html

      直接访问页面。

    • 可以通过设置默认首页通过

      主机名

      直接访问页面。

      • 添加默认页面的方式:

        在Tomcat/conf/web.xml中找到:

        <!-- 在该标签内添加默认页面 -->
        <welcome-file-list>
                <welcome-file>index.html</welcome-file>
                <welcome-file>index.htm</welcome-file>
                <welcome-file>index.jsp</welcome-file>
            </welcome-file-list>
        
    • 重启服务器,访问页面

(番外)虚拟主机的作用

通过虚拟主机的方式,不仅仅可以搭建自己的网站。同样,也可以通过这样的方式覆盖已经存在的真实网站,以此来达成自己的目的,这种方式做成的网站就叫做钓鱼网站。希望大家能明白钓鱼网站的原理, 提高安全意识,减少上当受骗。技术之可用作学习,不可行违法之事。

HTTP协议

HTTP协议的概述

  • http协议(Hyper Text Transfer Protocol):超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议。
  • 是万维网的数据通信的基础。
  • 是一种简单的请求-响应协议,通常运行在TCP协议之上,属于应用层协议。
  • 规定了浏览器和服务器的数据交互的格式。

HTTP协议的特性

  • 基于请求和响应模型
    • 必须要先有请求,后有相应。
    • 请求和响应必须成对出现。
  • 简单快捷
    • 因为发送请求的时候只需要发送请求方式和请求路径即可。

HTTP协议的抓包分析

通过一些软件/插件进行抓包:

  • Chrome插件Web sniffer
  • 软件HTTP Watch

ccc

get方式:

请求:

GET /serverTest/index.html HTTP/1.1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36 Edg/87.0.664.41

响应:

HTTP/1.1 200
Date: Sat, 21 Nov 2020 08:16:02 GMT
Accept-Ranges: bytes
ETag: W/"629-1605945384963"
Last-Modified: Sat, 21 Nov 2020 07:56:24 GMT
Content-Type: text/html
Content-Length: 629

post方式:

请求:

//请求行
POST /serverTest/submit.html HTTP/1.1
//请求头
Host: localhost:8080
Connection: keep-alive
Content-Length: 66
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://localhost:8080
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36 Edg/87.0.664.41
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: http://localhost:8080/serverTest/index.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
//请求体,在古老的版本中,请求体常常是明文,后来进行了加密
Cookie: Idea-91e55ca=cbb05d5c-456c-4b90-991f-6bde7a7c9ca5

响应:

//响应行
HTTP/1.1 200 OK
//响应头
Accept-Ranges: bytes
ETag: W/"325-1605926271614"
Last-Modified: Sat, 21 Nov 2020 02:37:51 GMT
Content-Type: text/html
Content-Length: 325
Date: Sat, 21 Nov 2020 08:26:40 GMT
Keep-Alive: timeout=20
Connection: keep-alive
//响应体
<!DOCTYPE HTML>
<html>
<head>
	<title>Submit Success.</title>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<meta name="description" content="Description" />
</head>
<body>
	<h1>Submit Success!</h1>
	<!-- content goes here -->
</body>
</html>

请求部分

  • 请求行
    • 请求方式
      • get:请求的参数会显示在地址栏中(限制大小)
      • post:请求的参数不会显示在请求体中(不限制大小)
    • 请求路径
    • 协议版本
  • 请求头
    • 键值对(也可能一键对多值)
    • 常用请求头
      • Referer:代表网页的来源(防盗链)
      • User-Agent:获得浏览器类型,以及系统信息
  • 请求体

响应部分

  • 响应行

    • 协议版本
    • 状态码
      • 200:响应成功
      • 302:需要进行重定向操作
      • 304:需要用户查找本地缓存
      • 404:请求资源不存在
      • 500:服务器内部错误
    • 状态码描述
  • 响应头

    • 键值对(也可能一键对多值)
    • 常见响应头:
      • Location:重定向的路径
      • Refresh:定时刷新
      • Content-Disposition:文件下载的时候使用
  • 响应体

    • 显示到浏览器的html代码

Q.E.D.


If you don't come, I will snow.