1、HTTP通讯协议

  根据联机方式与所使用的网络服务不同,会有不同的通信协议。例如,发送信件时会使用SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),传输文件会使用FTP(File Transfer Protocol,文件传输协议),下载信件会使用POP3(Post Office Protocol 3,邮件协议)等,而浏览器跟Web服务器之间所使用的沟通方式则是HTTP(HyperText Transfer Protocol)。Http协议基本上是一种基于请求(Request)/响应(Response)的通信协议,是无状态的通信协议。浏览器在使用http发出请求时,可以有几种请求方法,例如GET、POST、HEAD、PUT、DELETE等,但是对于Servlet或JSP程序而言,最长接触的就是GET与POST协议了。
 
1)GET请求
  GET请求就是向服务器取得(GET)所指定的数据,在发出GET请求时,必须一并告诉服务器所请求数据的URL,以及一些标头(Header)信息。请求参数通常是用户发送给服务器的必要信息,这个信息通常是利用表单来进行发送的,服务器必须有这些信息才可以进一步针对用户的请求作出正确的响应,请求参数是在URL之后跟随一个问号(?),然后是请求参数名称(name)与请求参数值(value),中间以等号(=)表示成对关系。若有多个请求参数,则以&字符连接,使用GET的方式发送请求,浏览器的地址栏上也会出现请求参数信息。GET请求可以发送的请求参数长度有限,对于太大量的数据并不适合用GET请求,这时需要改用POST请求。
 
2)POST请求
  POST请求就是让你请求时发布(POST)信息给服务器,对于大量或复杂的信息发送(例如文件上传),基本上会采用POST来进行发送。POST只是将请求参数移到最后的信息体(Message body)之中,由于信息体的内容长度不受限制,所以大量数据的发送都会使用POST方法,而由于请求参数移到了信息体,所以地址栏也就不会出现请求参数,对于一些较敏感的信息,即使长度不长,也会改用POST的方式发送。
 
3)GET和POST的区别
  · GET跟随在URL之后的请求参数长度是有限的,过长的请求参数,或像文件上传这类的大量数据,就不适合用GET请求,而应该改用POST。
  · GET的请求参数会出现在地址栏上,敏感性或保密性的请求参数(例如信用卡号码、用户名、密码等),就不应该使用GET请求来发送。
  · POST请求的请求参数不会出现在地址栏上,所以无法添加到浏览器的书签(Bookmark)中,如果有些页面是根据请求参数进行不同的页面显示(例如论坛的文章发表),而你希望可以让用户设置书签,以便日后可以直接点击书签进行浏览,则此时应该使用GET。
    · 有些浏览器会根据地址栏来缓存(Cache)数据,如果地址栏是相同的URL,则会直接从浏览器缓存中取出数据,而不会真正发送请求至服务器上查询最新的数据,如果不希望服务器状态改变,而浏览器仍从缓存中取得旧数据,则可以改用POST。(使用GET基本上也有方法可以避免缓存,例如在地址栏上附加时间戳记,让每次GET请求的地址栏都不相同。)
  HTTP当初在设计GET和POST两种请求方式的时候是根据请求是否幂等(idempotent)操作来决定使用GET还是POST。所谓是否为幂等操作,就是请求的操作是否改变服务器状态,用一个操作重复多次,是否返回同样的结果。
   · GET请求应用用于幂等操作,也就是说GET请求纯粹是取得数据,而不改变服务器上的数据或状态。GET的请求参数,只是用来告知服务器,必须进一步根据请求参数(而不只是URL)来识别出所要响应的内容(例如查询数据库的数据),同样的GET请求且使用相同的请求参数重复发送多次,都应该返回相同的结果。
  · POST请求应该用于非幂等(non-idempotent)操作,请求所发送的数据,可能会影响服务器上的数据或状态,例如修改(增、删、更新)数据库的内容,或是在服务器上储存文件。你的请求若会改变服务器的状态,则应改用POST请求。
  表单发送默认为GET请求。
 
4)客户端程序和服务器端程序
  Servlet/JSP是执行服务器上的一个技术,客户端通过HTTP和网络传送请求给Servlet/JSP,服务器上的Servlet/JSP经过运算处理后再将响应返回给客户端,所以一切程序的处理都是在服务器上发生的。
  JavaScript 则是执行于客户端浏览器中的一个技术,可以让你与浏览器沟通,操作浏览器中的网页页面与行为,也可以通过JavaScript 来要求浏览器发出请求给服务器。基本上,可以将JavaScript 编写的程序看成是个人计算机桌面上的应用程序,如即时通信这样的用户接口程序。
  所以客户端程序与服务器端程序根本是执行不同的内存地址空间(Address space),两者无法作直接的互动,而必须通过网络和HTTP来进行互动、数据交换或请求、响应。
  在一些JSP 应用程序中,或许会在JSP 网页中写一些内嵌(Inline)JavaScript,要注意,这些JavaScript并不是在服务器上执行的,服务器会如同处理那些HTML标签一样,将这些JavaScript原封不动地传给浏览器,浏览器收到响应后再处理标签与执行JavaScript,对处理JSP内容的服务器端而言,那些JavaScript跟静态的标签没有两样,所以没有所谓的“可以让JavaScript直接取得HttpServletRequest中的属性吗?”或“为什么JSP没有执行JavaScript?”这样的问题。
 
5)Servlet/JSP简介
  Servlet 是使用Java程序语言所编写的一个Java类,通过Web容器(Container)的加载、初始化,受到容器的管理才能成为一个Servlet。
  容器是Java所编写的一个应用程序,负责与服务器沟通,管理Servlet所需的各种对象与数据、Servlet生命周期。没有了容器,Servlet就只是一个Java程序语言所编写的类,无法响应客户端的请求。
  JSP让网页编辑者可以直接在上面编写熟悉的HTML,并可根据需要添加动态程序的成分,容器会将JSP网页转译为Servlet并加载到容器中进行管理,所有的JSP最后都以Servlet的实例存在于容器中。
  Servlet 是运行在容器之中,容器是由服务器上的JVM所启动的,JVM本身就是服务器上的一个可执行程序。每次请求进来时,都是使用同一个容器来处理,由容器开启一个线程(Thread),并决定由哪个Servlet来处理。如果有多次请求进来,就只是启动多个线程来处理,而不是重复启动多次JVM,线程就像是进程中的轻量级流程,由于不用重复启动多个进程,因此可以大幅减轻性能负担。
 
 
  容器不是HTTP服务器,Web容器是一个用Java所编写的程序,用来加载、管理Servlet。我们所编写的Servlet程序是没有main函数的,所以需要通过容器来启动Servlet程序,找到相应的doGet()方法或doPost()方法,从而进一步处理浏览器的请求。
  我们会使用Tomcat 作为Web容器实现,由于Tomcat本身附带一个简单的Http服务器,下载者直接打开服务器,就可以在上面的Web容器中部署Servlet,因此许多人都以为Tomcat就是Http服务器,或是以为Web容器就是HTTP服务器,其实不然,Tomcat是Web容器,其实可以与其他HTTP服务器相结合,像是Apache。
  浏览器、实体服务器、HTTP服务器程序、容器与Servlet的关系如图所示。
  JSP 会被Web容器转译成Servlet的“.java”源,编译为“.class”文件,然后加载到容器中,所以最后提供服务的还是Servlet实例(Instance)。JSP与Servlet其实是一体两面的事实,因而遇到问题时,可以查看一个JSP转译为Servlet后的源代码,都是执行JSP网页遇到错误时解决问题的重要方法之一。

Web应用程序简介的更多相关文章

  1. 第一章 Web应用程序简介

    1.1 Web应用程序基础知识 URL.URN与URI URL:Uniform Resource Locator URN:Uniform Resource Name URI:Uniform Resou ...

  2. 【转载】ASP.NET MVC Web API 学习笔记---第一个Web API程序

    1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过 ...

  3. ASP.NET MVC Web API 学习笔记---第一个Web API程序

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

  4. 使用ASP.NET 构建 Web 应用程序快速入门-8小时的免费培训视频

    - Scott Hanselman的中文博客[转载] [原文发表地址] Building Web Apps with ASP.NET Jump Start - 8 Hours of FREE Trai ...

  5. (转)Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

  6. 简单java web应用程序搭建与部署

    1. 准备工作 工具:tomcat.editplus.jdk.windows操作系统 操作:在windows操作系统上安装jdk.tomcat.editplus,配置JAVA_HOME,Path,CL ...

  7. 如何使用Docker部署一个Go Web应用程序

    熟悉Docker如何提升你在构建.测试并部署Go Web应用程序的方式,并且理解如何使用Semaphore来持续部署. 简介 大多数情况下Go应用程序被编译成单个二进制文件,web应用程序则会包括模版 ...

  8. 如何使用ASP.NET Core、EF Core、ABP(ASP.NET Boilerplate)创建分层的Web应用程序(第一部分)

    本文是为了学习ABP的使用,是翻译ABP官方文档的一篇实战教程,我暂时是优先翻译自己感兴趣或者比较想学习的部分,后续有时间希望能将ABP系列翻译出来,除了自己能学习外,有可能的话希望帮助一些英文阅读能 ...

  9. web应用程序+HTTP协议

    标签(空格分隔): Django web应用程序案例: 如果我们想通过自己电脑访问京东,就是一个网络编程(因为京东的服务部署在京东,通过自己的电脑浏览器传输到京东服务就是网络编程):只要涉及到网络编程 ...

随机推荐

  1. 第六周 E题 期望.....

    Description Given a dice with n sides, you have to find the expected number of times you have to thr ...

  2. ios里的UIActionSheet的使用

    class ViewController: UIViewController,UIActionSheetDelegate{ @IBOutlet weak var label1: UILabel! @I ...

  3. php必看六本书

    php和mysql web开发 PHP高级程序设计_模式.框架与测试.pdf  PHP专业项目实例开发.pdf PHP5高级应用开发实践.pdf [深入PHP面向对象.模式与实践(第2版)].(美)赞 ...

  4. C#基础原理拾遗——面试都爱问的委托和事件(纠正)

    这篇博客是我昨天写的,文中的观点有些问题,后经过网友留言和个人学习发现错误,原文还是保留,更改补在后面,不怕贻笑大方,唯恐误人子弟.不知道还能不能放在首页,让被误导的同学再被反误导一次. 一.原文 几 ...

  5. java并发编程(一)

    多个线程访问同一个变量时,可能会出现问题.这里我用两个线程同时访问一个int count变量,让他们同时+1.同时让线程睡眠1秒,每个线程执行10次,最后应该输出20才对,因为count++并不是原子 ...

  6. GNOME与KDE的战争

    目录1 序言2 GNOME与KDE交替发展% M" O/ h% R( b  f, ~7 W' n9 V, G3 GNOME获得商业公司的支持4 KDE3.5可实现半透明和阴影效果,界面华丽. ...

  7. For和While在C和MATLAB中的区别——MATLAB的大坑

    For和while是常见的循环关键字,在许多语言中都是通用的.但是想必不是所有人,都被其中的区别困扰过,尤其是MATLAB“程序员”. x=[,,,,,,]; i=; while i<=leng ...

  8. CSS基础知识学习笔记

    1.css基本样式讲解 1.1 css背景background-attachment:背景图像是否固定或者随着页面的其余部分滚动background-color:设置元素的背景颜色background ...

  9. NYOJ-171 聪明的kk AC 分类: NYOJ 2014-01-02 09:01 165人阅读 评论(0) 收藏

    #include<stdio.h> #define max(x,y) x>y?x:y int main(){ int num[22][22]={0}; int n,m; int x, ...

  10. VC6.0环境安装STLport-5.2.1

    今天安装STLport,网上搜资料安装好久,都不行,因为STLport 的版本不对,我这是STLport-5.2.1新版本. (注意:下面的步骤都在一个cmd里操作,很简单的原因:环境变量啊) 1.首 ...