美文网首页
Javaweb基础(二)服务器和http

Javaweb基础(二)服务器和http

作者: 贾里 | 来源:发表于2017-08-19 14:25 被阅读273次

    一.Web概述

    1.Web发展历史

    原始年代1990-1992:
    1990年,HTML标记语言的出现标志Web开发时代的到来.
    B/S架构开始在之后的岁月中不断的发展壮大,攻城略地蚕食传统C/S的领域。如同所有的新生事物一样,在web的史前岁月,web的开发 技术在在html标记诞生后,无论是在服务端还客户端都缓慢的发展着,在相当长的一个时间内,它并未像今天这样辉煌,甚至于只是静态的文本标识.
    关键字:HTML�技术特性:静态文本显示,表现力和交互能力不足。(hao123)
    封建诸侯年代1993-1996:
    1993年,NCSA提出了CGI1.0草案。Web开发终于迎来了它的第二次重大飞跃,伴随着CGI,带来Web的动态处理能力,CGI就是这个时代的国王。(服务器端动态生成内容)
    1994年,PHP
    1996年,ASP
    关键字:CGI(Common Gateway Interface )(Perl&&C&&Python)
    技术特性:实现了客户端和服务器端的动态交互, 在程序代码中写html标记,是面向过程的开发方式,用多进程运行
    注:CGI是Web服务器端组件,都能产生Web动态页面输出
    工业文明1996-1999:
    1997年,Sun公司推出了Servlet规范。Java阵营终于迎来了自己的web英雄。
    1998年JSP技术诞生,Servlet和JSP再加上JavaBean,让JavaWeb开发者同时拥有了类似CGI程序的集中处理功能和类似于PHP 的HTML嵌入功能,此外,Java的运行编译技术也大提高了Servlet和JSP的执行效率
    1998年,Sun发布了EJB1.0标准.
    1999年,Sun正式发布了J2EE的第一个版本,紧接着,遵循J2EE,为企业级应用提供支持平台的各类应用服务器争先恐后的涌现出来(WebSphere,WebLogic,JBoss),(同时2001微软发布了ASP.NET技术)


    J2EE/JavaEE是企业级开发的领头羊!

    2.CS/BS

    (1)软件的两种架构形式:
    C/S: Client/Servler:客户端/服务器架构.
    B/S: Browser/Server:浏览器/服务器架构.

    C/S: 直接运行在电脑桌面的程序(需要安装).
    开发CS的技术:Java AWT/Swing,Delphi,VB,VC,C#等.

    • 特点:一般说来服务端,只负责了数据的存储,客户端,负责了界面的渲染和业务功能的实现.
    • 优点:界面,用户体验真的很好,比较安全等.
    • 缺点:升级麻烦,移植性差,所有的业务代码存放于客户端中,代码重复.

    B/S:通过浏览器访问的程序(Web应用).
    开发BS的技术:JSP,PHP,ASP等.

    • 特点:其实是一种特殊的C/S,因为浏览器就是客户端程序.
      • 服务端:负责了数据库的连接操作和所有的业务操作;
      • 客户端:只做界面渲染操作.
    • 优点:移植性高!因为业务功能全部在服务端实现,只需要升级服务端即可.
    • 缺点:界面不够华丽,功能不够丰富,用户体验不够好.不够安全.

    我们把传统的BS架构称之为:瘦客户端.
    富客户端开发:弥补了传统的BS在界面上不够友好的问题.

    • 特点:客户端不仅仅做界面的渲染操作,也会负责一部分业务逻辑处理.
      Extjs/Flex/Java Fx/EasyUI.

    3.Web服务器

    BS架构的应用(Web应用),必须使用服务器,我们开发的应用是运行在服务器里面的.
    (1)服务器:

    • 其实就是一个软件:软件服务器,Tomcat.
    • 其实就是一台电脑:硬件服务器,按照了软件服务器.

    (2)JavaWeb中服务器的分类:

    • 1):HTTP服务器,提供了静态网页的运行支持.
    • 2):Web服务器,提供了动态和静态网页运行的能力.比如:Tomcat,Jetty等.
      注意:仅仅只是实现了JavaEE中13种技术规范中的一部分(JSP/Servlet),所以只能运行JSP/Servlet. 我们把Web服务器,也称之为Servlet容器,JavaEE中的EJB是不支持运行.
    • 3):应用服务器:提供了静态网页的支持,同时也支持JavaEE中的13种技术,支持EJB.
      TomEE,WebSphere(IBM),WebLogic(Oracle),JBoss(red hat),免费的等.

    (3)Tomcat服务器:
    Apache组织提供的开源的,由Java语言编写的,实现了JavaEE中部分的规范.
    解析JSP最快的服务器,使用最广泛的服务器.

    二.Tomcat服务器

    1.Tomcat的安装和使用

    Tomcat是使用Java语言编写的一个服务器(程序),要运行Tomcat,必须得有jre.
    1.安装启动:
    注意事项:
    32位的系统:32位的JDK --->32位的Eclipse--->32位Tomcat
    64位的系统:64位的JDK --->64位的Eclipse--->64位Tomcat

    • 1.安装目录不能使中文的,并且安装路径不允许出现空格.
      如:D:\OpenSources\Tomcat7\apache-tomcat-7.0.42:我们把该路径称之为Tomcat的根路径
    Tomcat根目录.png
    • 2.启动Tomcat服务器:Tomcat根/bin/startup.bat
      但是提示:必须先配置JAVA_HOME或者JRE_HOME的环境变量:
      一般的我们只配置JAVA_HOME:配置为JDK的根路径
      JAVA_HOME=D:\OpenSources\jdk1.7.0_06_x86
      配置好之后,再点击Tomcat根/bin/startup.bat:知道控制台没有打印重大的错误,Exception,没有一闪而过,就表示启动成功.
    Tomcat启动1.png
    Tomcat的默认端口是8080:
    Tomcat启动2.png
    2.访问:
    打开浏览器:
    http://服务器所在主机的IP:服务器的端口号/资源名字
    http://服务器所在主机的名字:服务器的端口号/资源名字

    2.Tomcat的常见错误

    使用Tomcat的过程中,常见的问题:

    • 1):没有成功启动Tomcat,就开始访问页面,这是错误的.
      如果Tomcat服务器已经关闭了/启动失败,是不能访问网页的.
    • 2):Tomcat成功启动,但是在访问网页资源的时候出现404的错误.
      造成的原因:表示找不到指定的资源文件,在这里,找不到叫:index2222.jsp文件.
    • 3):Tomcat没有关闭,又再次重新启动,此时会出现端口冲突问题(端口已经被占用).
      此时报错:java.net.BindException: Address already in use: JVM_Bind.
      解决方案:关闭之前所有打开的Tomcat,再重新启动.
    • 4):要保证Tomcat配置文件的:文件本身编码和文件内容编码相同(有中文的时候明显).
      启动报错:2 字节的 UTF-8 序列的字节 2 无效.
      解决方案:如果XML文件中有中文,此时该XML文件使用Editplus工具打开,另存为的时候编码选择为UTF-8即可.
    • 5):Tomcat配置文件中的XML元素结构不能乱改.
      报错如:D:/OpenSources/apache-tomcat-7.0.57/conf/server.xml; lineNumber: 143; columnNumber: 7; 元素类型 "Host" 必须由匹配的结束标记.

    出错,不要紧张!有意识的去看Tomcat生成的日志文件(在Tomcat根/logs中):

    3.Tomcat的常见配置

    (1)修改Tomcat的默认端口:
    Tomcat的默认端口是8080,HTTP协议的默认端口是80;
    步骤:
    1.进入Tomcat根/conf/找到server.xml文件
    2.默认是在第71行,Connector元素的 port属性:
    3.配置为80端口(80端口是http协议的默认端口):

    http://baidu.com:80/index.php 等价于
    http://baidu.com/index.php
    

    4.重新启动Tomcat,看到效果;

    注意:Tomcat中配置文件一旦修改,就必须重启Tomcat.

    (2)管理Tomcat的权限配置:
    在Tomcat根/conf/tomcat-users.xml文件:
    在其中增加:

    管理Tomcat权限配置.png

    表示:先声明使用manager-gui的角色(角色决定了拥有哪些权限),
    再定义了账户为admin,密码为1的用户,并且把manager-gui的权限赋给了admin用户.

    (3)把Tomcat添加到Windows的服务列表:
    把Tomcat配置到服务列表:这样可以随着系统的启动而启动(一般用在服务上):

    • 1.使用cmd工具,并进入Tomcat根/bin目录
    • 2.执行service install命令
    • 3.就可以注册服务

    删除服务:

    • 1.使用cmd工具,并进入Tomcat根/bin目录
    • 2.执行service remove命令
    • 3.就可以删除服务

    4.JavaWeb项目结构

    JavaWeb項目结构.png

    WEB应用程序/Web项目,指供浏览器访问的程序,通常也简称为web应用。
    (1)一个Web应用由多个静态Web资源和动态Web资源组成,如:

    • html、css、js文件,图片,音频,视频,flash,
    • jsp文件、java程序、jar文件(多份字节码文件的打包)、
    • 配置文件

    (2)组成 Web 应用程序的这些文件要部署在相应的目录层次中,根目录代表整个 Web 应用程序的“根”路径。
    从JavaEE6开始(Tomcat7,Servlet3.0规范),JavaWeb应用下可以不需要web.xml文件了.(可以使用注解)。但是建议保留该文件。

    5.基于Eclipse搭建JavaWeb项目

    搭建基于Eclipse的纯的JavaWeb项目:
    步骤:

    • 1.搭建一个Java项目:
    • 2.在该项目下新建一个文件夹,表示根,名字为:webapp(名字随意).
    • 3.在webapp下新建一个文件夹,名字为WEB-INF
    • 4.在WEB-INF中新建一个文件夹,名字为classes
    • 5.在WEB-INF中新建一个文件夹,名字为lib
    • 6.去Tomcat根/webapps/ROOT/WEB-INF目录下拷贝一个web.xml文件到WEB-INF下(只保留头和根元素);
    • 7.改变该项目的输出目录:也就是改变classpath的路径,从默认的bin目录该变为webapp/WEB-INF/classs中;
    • 8.以后要把项目给别人,只给webapp目录.
    改变classpath路径.png

    6.Eclipse的Tomcat插件

    装插件:

    • 1.在需要被装插件的Eclipse根/dropins目录
    • 2.在该目录下新建一个文本文件:里面的内容是
      path=D:/DevelopTools/EclipsePlugins/Tomcat
    • 3.建议修改该文本文件的名字为:tomcat.link
    • 4.重新启动Eclipse.看效果,若看到3只可爱的小猫咪,表示插件安装成功.
    • 5.但是这仅仅表示Eclipse的插件,不代表Tomcat服务器.得和真实的Tomcat服务器做关联.
    • 6.就可以使用了.
    tomcat关联.png

    7.部署Web项目

    方式一:
    直接把应用的根目录,拷贝到Tomcat根/webapps下,这是MyEclipse默认的部署方式:
    缺点:该目录下的应用将会越来越多,启动Tomcat就变慢了.若其中有一个应用有问题,Tomcat就会启动失败.
    解决方案:
    对比给Eclipse安装插件:
    1>.上述部署项目的方式,相对于把插件拷贝到Eclipse/plugins下;
    2>.联想到给Eclipse安装插件的第二种方式,使用link文件来关联插件,告诉Eclipse你应该去哪里找插件.
    把该思想运用到部署项目上来:(第二种方式)
    虚拟路径:告诉Tomcat应该去哪一个路径去找项目被部署.

    方式二:
    以配置文件的方式,告诉Tomcat应该把哪一个路径下的项目给部署起来.
    方式二也有两种用法:

    • 第一种:
      • 1).找到Tomcat根/conf目录下的server.xml文件:
      • 2).在server.xml文件中的Host元素之间,新建一个元素:
    <Context path="pss" docBase="D:\JavaPros\pureWeb\webapp"/>
    

    在部署的时候,也可以把path的值设置"";

    <Context path="" docBase="D:\JavaPros\pureWeb\webapp"/>
    

    改完之后,访问方式:http://IP地址:端口号/资源的名字
    注意:若存在多个<Context/>,必须保证多个Context的path值不能相同.

    第二种:
    从Tomcat5.5开始推荐使用另外的一种方式来部署项目:

    • 1).找到Tomcat根/conf/Catalina/localhost新建一个xml文件:比如abc.xml
      内容是:<Context docBase="D:\JavaPros\pureWeb\webapp"/>
    • 2).此时该文件的名字,就相当于是第一种方式的path值(上下文名字)
      访问: http://localhost/abc/index.html

    意思方式二的两种方式,其实是一个意思.

    部署配置.png

    8.虚拟主机配置

    为什么需要配置虚拟主机:
    有两个公司的Web应用都发布在同一个Tomcat服务器上,可以为每家公司创建一个虚拟主机
    www.google.com www.baidu.com

    虚拟主机配置.png 虚拟主机配置2.png

    三.HTTP

    1.HTTP协议概述

    HTTP: 特点:无状态(不知道上一次的请求是哪一个浏览器发出的),默认端口就是80
    https:
    WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议。
    HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议之上的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程以及数据本身的格式。

    HTTP协议到底约束了什么:
    1.约束了浏览器以何种格式向服务端发生数据: 规范了浏览器发送数据的格式.
    2.约束了服务器应该以何种格式来接受客户端发生的数据:
    3.约束了服务器应该以何种格式来反馈数据给浏览器 规范了服务器响应数据的格式.
    4.约束了浏览器应该以何种格式来接收服务器反馈的数据.

    HTTP1.0规范:
    若请求的有N个资源,得建立N次连接,发送N次请求,接收N次响应,关闭N次连接.
    每次请求的之间都要建立单独的连接,请求,响应,响应完关闭该次连接:

    • 缺点:每请求一个资源都要单独的建立新的连接,请求完并关闭连接.
    • 解决方案: 能在一次连接之间,多次请求,多次响应,响应完之后再关闭连接.

    HTTP1.1规范:
    能在一次连接之间,多次请求,多次响应,响应完之后再关闭连接.
    HTTP 1.1的特点:

    • 在一个TCP连接上可以传送多个HTTP请求和响应
    • 多个请求和响应过程可以重叠进行
    • 增加了更多的请求头和响应头
      浏览器给服务器发送数据:一次请求
      服务器给浏览器反馈数据:一次响应

    HTTP协议的版本
    HTTP/1.0、HTTP/1.1、HTTPS2.0

    HTTP协议.png

    2.httpwatch和firebug工具

    httpwatch观察网络.png firebug观察网络.png

    3.请求消息

    1、包含三大部分
    1.1请求行:
    位于请求消息的第一行
    格式:请求方式 资源路径 HTTP版本号
    常用请求方式:GET和POST方式

    • 1.1.1Get请求方式:
      a、若请求服务器上的某个资源,没有指定请求方式,则默认为GET方式
      b、可以通过GET方式向服务器传递数据。具体方式就是在URL请求路径后加上?,多个参数以&分割。比如
      http://localhost:8080/a.html?username=abc&password=123
      注:GET请求方式,数据不安全且有URL长度限制(1K)

    • 1.1.2Post请求方式:
      a、若使用Post请求方式传递数据,可以借助form表单的method="post"
      b、数据安全,且长度没有限制

    1.2若干请求头:
    从第二行开始到第一个空行。作用:向服务器传递客户端的一些基本信息

    • 1>、Accept:浏览器可接受的MIME类型(文件的内容格式)(Tomcat安装目录/conf/web.xml中查找)

    • 2>、Accept-Charset:告知服务器,客户端支持哪种字符集

    • 3>、Accept-Encoding:浏览器能够进行解码的数据编码方式

    • 4>、Accept-Language:浏览器支持的语言。

    • 5>、Referer:当前页面由哪个页面访问过来的。

    • 6>、Content-Type:通知服务器,请求正文的MIME类型。
      取值:application/x-www-form-urlencoded默认值
      对应的是form表单的enctype属性

    • 7>、Content-Length:请求正文的长度

    • 8>、If-Modified-Since:通知服务器,缓存的文件的最后修改时间。

    • 9>、User-Agent:通知服务器,浏览器类型.

    • 10>、Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接

    • 11>、Cookie:这是最重要的请求头信息之一(会话有关)

    1.3请求正文:
    从第一个空行开始,后面的都是正文。(只有POST请求方式才有)

    4.响应消息

    包含三大部分
    1.1状态行:
    位于响应消息的第一行
    格式: HTTP版本号 状态码

    1.2若干响应头:
    从第二行开始到第一个空行

    • 1>、Location:制定转发的地址。需与302/307响应码一同使用
    • 2>、Server:告知客户端服务器使用的容器类型
    • 3>、Content-Encoding:告知客户端服务器发送的数据所采用的压缩格式
    • 4>、Content-Length:告知客户端正文的长度
    • 5>、Content-Type:告知客户端正文的MIME类型
      Conent-Type:text/html;charset=UTF-8
    • 6>、Refresh:定期刷新。还可以刷新到其他资源
      Refresh:3;URL=otherurl
      3秒后刷新到otherurl这个页面
    • 7>、Content-Disposition:指示客户端以下载的方式保存文件。
      Content-Disposition:attachment;filename=2.jpg
    • 8>、Expires:网页的有效时间。单位是毫秒(等于-1时表示页面立即过期)
      Cache-Control:no-cache
      Pragma:no-cache
      控制客户端不要缓存
    • 9>、Set-Cookie:SS=Q0=5Lb_nQ; path=/search服务器端发送的Cookie(会话有关)

    1.3响应正文:
    从第一个空行开始,后面的都是正文。

    5.常见的响应状态码:

    200: 表示请求和响应成功,完全OK.
    404: 表示当前请求的资源找不到. 自己的问题.
    500: 表示服务端程序有问题(Java代码有问题).

    6.GET和POST请求的区别(面试)

    GET.png POST.png

    GET请求特点:
    请求行:GET /index.html?username=will&email=abc HTTP/1.1

    1):请求的资源和请求参数都暴露在浏览器的地址栏,不安全.
    2):请求的数据大小是不能超过1Kb/2Kb,反正,数据大小有限制,只能传输很少的数据.如此:文件上传就不能使用GET方式.
    3):GET请求参数的数据不会出现在请求的实体(正文)中.
    4):GET请求会缓存响应的数据.

    什么情况会造成GET方式的请求:
    1):直接在浏览器地址栏敲击回车.
    2):点击超链接,跳转到目标界面,发生GET请求.
    3): form表单的method属性值为GET.(建议使用POST).

    如何在GET请求时,查看请求的数据.

    GET查看数据.png

    POST请求特点:
    请求行:POST /index.html HTTP/1.1

    1):浏览器地址不会暴露请求的数据,比较安全.
    2):POST请求的数据在请求的正文(实体)里面.
    3):POST请求的数据大小没有限制,文件上传必须.
    4):POST请求不会缓存数据.

    什么情况会造成POST方式的请求:
    form表单的method属性值为POST.(建议使用POST).

    表单的提交,建议使用POST.

    如何在POST请求时,查看请求的数据.

    POST查看数据.png

    发生GET请求时,参数的携带方式:
    index.html?username=will&email=abc
    资源后第一个参数使用?来连接,以后的参数都是&来做连接.

    相关文章

      网友评论

          本文标题:Javaweb基础(二)服务器和http

          本文链接:https://www.haomeiwen.com/subject/saltdxtx.html