Java进阶学习第八天——WEB入门

文档版本 开发工具 测试平台 工程名字 日期 作者 备注
V1.0 2016.04.18 lutianfei none

WEB学习

服务器

  • 网络的架构(面试题)
    • C/S client/server 客户端/服务器端 例子:QQ 快播 暴风影音
      • 优点:交互性好,服务器压力小。
      • 缺点:客户端更新了,下载。
    • B/S browser/server 浏览器/服务器端 例子:购物网站 12306
      • 缺点:服务器压力大。
      • 优点:服务器更新就ok。

Java进阶学习第八天——WEB入门_第1张图片

  • WEB网页
    • javaweb 使用java开发网页。
  • 静态的web资源
    • HTML、CSS、JAVASCRIPT
  • 动态的web资源
    • 数据发生变化。例子:
      • Servlet/JSP
      • ASP .net 微软开发
      • PHP 开源(开发网站那速度真快),提供模板。
      • RUBY 日本开发的。
      • JAVA做什么?后台的管理系统,处理大数据。

服务器的介绍

  • 原理:网络编程。
  • 概念:
    • 硬件:就是一台主机
    • 软件:安装了服务器的软件(tomcat)
    • 安装软件后,称为WEB服务器。
    • 启动服务器,访问资源。
    • 访问:http://+ip+端口号 找到主机。如果资源的文件,就可以访问了。
    • 访问百度:http://www.baidu.com/
    • HTTP协议默认端口号是80,可以不写。
    • 如果想访问本机的服务器(扩展)
      • http://localhost:80
      • http://127.0.0.1:80

常见服务器

  • WebLogic是BEA公司的产品(被Oracle收购了),是目前应用最广泛的Web服务器,支持JavaEE规范,而且不断的完善以适应新的开发要求。
  • WebSphere IBM公司开发的 收费的 支持JAVAEE所有的规范(EJB servlet/jsp规范)* 银行喜欢用*

  • Tomcat apache(开源的组织,非常的伟大)只支持Servlet/JSP规范。免费的。

Tomcat的安装和注意实现

  • 前提条件 : 安装JDK,配置java的环境变量。
  • 安装版:给客户用
  • 解压版:解压当前文件夹,目录不要有中文。
  • 启动服务器:tomcat/bin/startup.bat
  • 访问:http://192.168.xx.xxx:8080访问服务器的主页。
  • 关闭服务器:点关闭按钮shutdown.bat

  • 常见启动问题

    • 配置环境变量。startup.bat打开时,一闪而过,环境变量没配置好。
    • 端口占用问题:在logs/catalima.xxxx-xx-xx.log
      • java.net.BindException: Address already in use: JVM_Bind
      • 端口被占用的解决问题:
        • 结束掉占用端口的应用程序。
          • 找到占用端口的应用程序。
          • 通过命令 netstat –ano,在任务管理器中结束程序。
        • 修改端口号。
          • 修改配置文件了。
          • tomcat/conf/server.xml配置文件
          • <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
        • 有应用程序占用80端口,用上边的方式解决。
        • 有的WIN7系统自带World wide web publish IIS服务,默认占用80端口。
          • 如果有。去服务中,该手动启动。(计算机右键–>管理–>服务和应用程序–>服务)
        • 概率非常小。操作系统占用80端口。

Tomcat服务器与Servlet版本关系

Java进阶学习第八天——WEB入门_第2张图片

Tomcat目录结构

Java进阶学习第八天——WEB入门_第3张图片

  • bin 启动项,关闭项。
  • conf(重点) 里面Tomcat配置文件
  • lib 服务器运行使用的jar包
  • logs(关注) 日志文件,运行时产生的日志。
  • temp 运行时临时文件
  • webapps(重点) web applications(web的应用们)
  • 注:如果动态的WEB资源,把WEB资源发布到服务器的webapps目录下的时候,有固定的目录结构。

  • MyEclipse 开发动态的WEB资源程序,目录结构如下
    Java进阶学习第八天——WEB入门_第4张图片

Tomcat和MyEclipse的集成

  • window – 选项 – MyEclipse – servers – 选择tomcat – 选择Enable – 选择tomcat根目录
  • 配置JDK – 选择JDK。
    Java进阶学习第八天——WEB入门_第5张图片

  • 启动服务器。
    Java进阶学习第八天——WEB入门_第6张图片

  • 虚拟路径(访问路径)

    • 默认和项目名称是相同(不要去修改)。
    • WebRoot变成了虚拟路径(访问的路径)
  • 对于Web项目,直接复制项目,需要修改虚拟路径。

    • 项目上右键 – 选择属性 – MyEclipse – web – 修改虚拟路径。
  • Servers控制台的使用

    • window – show view – servers

Tomcat管理员的配置(了解)

  • 在tomcat/conf/tomcat-user.xml
<role rolename="manager"/>
<user username="admin" password="admin" roles="manager"/>

如何部署WEB程序(三种)

  • 方式一:项目复制到webapps目录下,注意是WEB_INF文件夹。

  • 通过配置虚拟路径的方式。

    • 方式二:直接修改配置文件
      • 写到tomcat/conf/server.xml
      • 找到<Host>标签,配置到Host标签的中间
      • 目的:通过配置访问路径,准确找到c:\bb的文件
        • <Context docBase="文件夹的真实目录" path="虚拟路径(访问路径)" ><Context>
          • <Context docBase="C:\bb" path="/itcast" ></Context>
        • 访问:http://localhost:80/itcast
          Java进阶学习第八天——WEB入门_第7张图片
    • 方式三: 自己编写一个配置文件(推荐使用)
      • 新建xxx.xml文件,在$CATALINA_HOME/conf/[enginename]/[hostname]/ directory()目录下。
        • 如何找引擎的名称和主机的名称,在server.xml中找。
          • tomcat/conf/Catalina/localhost/ccc.xml
        • 这里默认会把把xxx当成虚拟(访问)路径。
      • 在xml的文件中编写什么内容?
        • <Context docBase="C:\cc"></Context>
      • 访问:http://localhost:80/xxx
  • 注意:一个Context即代表一个web应用,context元素在配置文件中除用于映射虚似目录外,它还可用于为web应用配置一些资源,例如:配置web应用使用的数据库连接池,javamail session等。

  • 让tomcat自动映射: tomcat服务器会自动管理webapps目录下的所有web应用,并把它映射成虚拟目录。换句话说,tomcat服务器webapps目录中的web应用,外界可以直接访问


Web系统通信详解

  • 访问网站全过程分析

    • 1、在浏览器输入url地址
    • 2、访问本机域名解析文件 hosts : c:\windows\system32\drivers\etc\
    • 3、如果本机没有查找到域名,查找网络上DNS服务器
    • 4、域名解析后,获得域名对应ip地址。根据ip和port访问网络上指定主机和服务
  • 真实开发网站过程

    • 1、开发网站
    • 2、将网站发布web服务器上 (公网ip)
    • 3、在DNS域名解析服务器上注册域名,和服务器ip绑定

Java进阶学习第八天——WEB入门_第8张图片

配置虚似主机

  • 在一个tomcat服务器中可以放置多个网站<Host>,所谓配置虚似主机,就是在tomcat服务器中配置一个网站

  • 如需在WEB服务器中配置一个网站,需使用Host元素进行配置,例:

    • <Host name=”site1” appBase=”c:\app”></Host>
  • 配置的主机(网站)要想被外部访问,必须在DNS服务器或windows系统中注册

    • C:\WINDOWS\system32\drivers\etc\hosts
  • 缺省虚似主机 DefaultHost

在本机上搭建百度虚拟主机

  • 注意:默认端口必须设置80
    Java进阶学习第八天——WEB入门_第9张图片
  • 1、抓取baidu主页
  • 2、在c盘 新建虚拟主机目录 c:\baidu
  • 3、在c:\baidu下新建 百度网站目录 website (复制网站页面到 website目录)
  • 4、在conf/server.xml 配置虚拟主机
<Host name="www.baidu.com" appBase="C:\baidu" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
</Host>


* 5、在本机 hosts文件添加

192.168.1.108(自己的IP) www.baidu.com 
* 测试 cmd中 ping www.baidu.com 测试hosts是否配置成功

* 6、将website配置为缺省网站 在<Host>元素内部添加<Context>元素
<Context path="" docBase="website" />

  • 7、将baidu.htm 配置默认欢迎页面 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>baidu.htm</welcome-file>
</welcome-file-list>

Java进阶学习第八天——WEB入门_第10张图片


HTTP协议

什么是HTTP

  • HTTP的协议:超文本传输协议。
  • 基于TCP链接的传输协议。
  • HTTP协议默认是80端口。
  • 基于请求和响应的模式。(先有请求,后有响应)
    • www.baidu.com(访问百度的服务器)
    • 百度的首页返回给我
  • 客户端连上web服务器后,若想获得web服务器中的某个web资源,

    • 需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式
  • 使用telnet命令,快速了解http协议。

    • win7下开启telnet命令。
    • 启动Tomcat服务器。
    • cmd>telnet localhost 80 回车
    • telnet命令有一个乱码问题 解决乱码.
      • 解决 ctrl+] 回车
    • 注意:命令行中输入的内容不能写错,一旦写错了,不支持删除。
    • 发送请求:
      • GET /aa/1.html HTTP/1.1
      • host:localhost
      • 输入两次回车
    • 响应:
      • HTTP/1.1 200 OK
      • Server: Apache-Coyote/1.1
      • ETag: W/”21-1416624196782”
      • Last-Modified: Sat, 22 Nov 2014 02:43:16 GMT
      • Content-Type: text/html
      • Content-Length: 21
      • Date: Sat, 22 Nov 2014 07:33:53 GMT
      • <h1>hello java!!</h1>

HTTP协议简介

  • HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器WEB服务器之间交换数据的过程。
  • HTTP协议是学习JavaWEB开发的基石,不深入了解HTTP协议,就不能说掌握了WEB开发,更无法管理和维护一些复杂的WEB站点。
  • HTTP协议的版本:HTTP/1.0、HTTP/1.1
HTTP协议的版本
  • HTTP/1.0

    • 链接后,只能获取一个web资源。
      • 链接后,发送请求,服务器做出响应,链接立即断开。
        • GET /aa/1.html HTTP/1.0
        • host:localhost
  • HTTP/1.1(使用)

    • 链接后,可以获取多个web资源。
      • 链接后,发送请求,服务器做出响应,链接不会立即断开。
        • 再次发送请求,直到有一段时间没操作,自动断开。
        • GET /aa/1.html HTTP/1.1
        • host:localhost

HTTP请求协议

Java进阶学习第八天——WEB入门_第11张图片
Java进阶学习第八天——WEB入门_第12张图片

  • 请求包:

    • 请求行
      • 请求方式
        • POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT、CONNECT
        • 常用post和get
        • 区别:
          • get把参数显示在地址栏上,安全级别低,不支持大数据。
          • post把参数封装请求体中,安全级别高,支持大数据。
      • 请求地址
        • 请求资源
      • 协议版本
        • HTTP/1.1
    • 请求头
      • Accept: text/html,image/* 客户端识别文件类型
      • Accept-Charset: ISO-8859-1 客户端字符集
      • Accept-Encoding: gzip 客户端支持编码类型 gzip 压缩格式
      • Accept-Language:zh-cn 客户端语言
      • Host: www.itcast.com:80 访问服务器地址
      • If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT (重要) 和Last-Modified 一起使用 控制缓存
      • Referer: http://www.itcast.com/index.jsp (重要)代表当前网页的来源 防止盗链
      • User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) 浏览器类型(文件下载时,不同浏览器进行不同处理)
      • Connection: close/Keep-Alive 请求后连接是关闭还是保持
      • Date: Tue, 11 Jul 2000 18:23:51 GMT 请求时间
    • 重要的头

      • If-Modified-Since 必须和响应头信息一起来完成控制本地的缓存。
      • Referer 当前的网页的来源。(防止盗链)
      • User-Agent 判断浏览器的版本(文件下载的时候)
    • 空行

    • 请求体
      • 封装post参数列表。多个数据之间用&分隔name=value&name=value&name=value…
  • 盗链说明:

  • URL伪造

URL url = new URL("http://localhost:8080/day03/referer");
URLConnection conn =url.openConnection();
conn.setRequestProperty("referer", "http://localhost/day03/index.html");

byte[] buf = new byte[1024];
InputStream is = conn.getInputStream();
int len = is.read(buf);
System.out.println(new String(buf,0,len));

HTTP响应

  • 响应行
    • 协议版本
      • HTTP/1.1
    • 状态码
      200 :请求成功处理,一切OK
      302 :请求重定向
      304 :服务器端资源没有改动,通知客户端查找本地缓存
      404 :客户端访问资源不存在
      500 :服务器内部出错
    • 状态码描述

Java进阶学习第八天——WEB入门_第13张图片

  • 扩展:

    • 转发:找班长借钱,他自己找副班长借钱,借到钱给我了。
    • 重定向:(找班长借钱,发送一次请求,回了我没钱,返回状态码302,给副班长地址,再去找富班长借钱,又发送了一次)
  • 响应头:用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。

    • Location: http://www.it315.org/index.jsp (重点) 结合302完成重定向 操作 Location重定向后地址
    • Server:apache tomcat 服务器类型
    • Content-Encoding: gzip 响应编码类型 gzip压缩
    • Content-Length: 80 响应长度
    • Content-Language: zh-cn 响应语言
    • Content-Type: text/html; charset=GB2312 响应字符集
    • Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT (重点) 和If-Modified-Since 一起使用,实现服务器缓存策略
    • Refresh: 1;url=http://www.it315.org (页面自动刷新)
    • Content-Disposition: attachment; filename=aaa.zip 文件下载

    • 禁用浏览器缓存(考虑不同浏览器兼容性,存在三个字段)

    • Expires: -1
    • Cache-Control: no-cache
    • Pragma: no-cache

    • Connection: close/Keep-Alive

    • Date: Tue, 11 Jul 2000 18:23:51 GMT
    • 重要的头
      • Location 和302一起完成重定向。
      • Last-Modified 和请求头If-Modified-Since一起控制缓存。和状态码304
      • Refresh 完成页面的定时跳转
      • Content-Disposition 设置文件是以附件打开
      • Expires: -1 : 与后面两个属性一起使用 :* 禁用缓存(网银系统)
      • Cache-Control: no-cache
      • Pragma: no-cache
  • 空行

  • 响应体:真正的数据
    • 存放真正的数据。


HTTP包头说明

请求报头

  • 请求报头允许客户端服务器端传递请求的附加信息以及客户端自身的信息
常用的请求报头
  • Accept

    • Accept请求报头域用于指定客户端接受哪些类型的信息
      • eg:Accept:image/gif,表明客户端希望接受GIF图象格式的资源;
      • Accept:text/html,表明客户端希望接受html文本。
  • Accept-Charset

    • Accept-Charset请求报头域用于指定客户端接受的字符集
      • eg:Accept-Charset:iso-8859-1,gb2312.如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。
  • Accept-Encoding

    • Accept-Encoding请求报头域类似于Accept,但是它是用于指定可接受的内容编码
      • eg:Accept-Encoding:gzip.deflate.如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。
  • Accept-Language

    • Accept-Language请求报头域类似于Accept,但是它是用于指定一种自然语言
      • eg:Accept-Language:zh-cn.如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。
  • Authorization

    • Authorization请求报头域主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。
  • Host(发送请求时,该报头域是必需的)

    • Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的,
      • eg:我们在浏览器中输入:http://www.guet.edu.cn/index.html
      • 浏览器发送的请求消息中,就会包含Host请求报头域,如下:
        • Host:www.guet.edu.cn
        • 此处使用缺省端口号80,若指定了端口号,则变成:Host:www.guet.edu.cn:指定端口号
  • User-Agent

    • 我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,实际上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息。User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。不过,这个报头域不是必需的,如果我们自己编写一个浏览器,不使用User-Agent请求报头域,那么服务器端就无法得知我们的信息了。
  • 请求报头举例:

GET /form.html HTTP/1.1 (CRLF)
Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF)
Accept-Language:zh-cn (CRLF)
Accept-Encoding:gzip,deflate (CRLF)
If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
Host:www.guet.edu.cn (CRLF)
Connection:Keep-Alive (CRLF)
(CRLF)


响应报头

  • 响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息
常用的响应报头
  • Location

    • Location响应报头域用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。
  • Server

    • Server响应报头域包含了服务器用来处理请求的软件信息。与User-Agent请求报头域是相对应的。下面是Server响应报头域的一个例子:
      • Server:Apache-Coyote/1.1
  • WWW-Authenticate

    • WWW-Authenticate响应报头域必须被包含在401(未授权的)响应消息中,客户端收到401响应消息时候,并发送Authorization报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域。
    • eg:WWW-Authenticate:Basic realm="Basic Auth Test!"
    • 可以看出服务器对请求资源采用的是基本验证机制。


实体报头

  • 请求和响应消息都可以传送一个实体。一个实体实体报头域实体正文组成,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文(eg:有无实体正文)和请求所标识的资源的元信息。
常用的实体报头
  • Content-Encoding

    • Content-Encoding实体报头域被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。
      • Content-Encoding用于记录文档的压缩方法,eg:Content-Encoding:gzip
  • Content-Language

    • Content-Language实体报头域描述了资源所用的自然语言。没有设置该域则认为实体内容将提供给所有的语言阅读者。eg:Content-Language:da
  • Content-Length

    • Content-Length实体报头域用于指明实体正文的长度,以字节方式存储的十进制数字来表示。
  • Content-Type

    • Content-Type实体报头域用语指明发送给接收者实体正文媒体类型。eg:
Content-Type:text/html;charset=ISO-8859-1
Content-Type:text/html;charset=GB2312
  • Last-Modified

    • Last-Modified实体报头域用于指示资源的最后修改日期和时间
  • Expires

    • Expires实体报头域给出响应过期的日期和时间。为了让代理服务器或浏览器在一段时间以后更新缓存中(再次访问曾访问过的页面时,直接从缓存中加载,缩短响应时间和降低服务器负载)的页面,我们可以使用Expires实体报头域指定页面过期的时间。eg:Expires:Thu,15 Sep 2006 16:23:12 GMT
    • HTTP1.1的客户端和缓存必须将其他非法的日期格式(包括0)看作已经过期。eg:为了让浏览器不要缓存页面,我们也可以利用Expires实体报头域,设置为0,jsp中程序如下:response.setDateHeader("Expires","0");

你可能感兴趣的:(tomcat,服务器,http协议)