




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章WEB原理与应用开发提纲3.1 HTTP协议3.2 Web开发技术简介3.3 CGI3.4 Web会话3.5 Applet和Servlet3.6 SSH框架与应用开发
WWW是到目前为止最著名的分布式应用,中文名字为“万维网”,常简称为Web。WWW是目前世界上最具影响力的互联网服务,起源于1990年底,最早由欧洲核物理研究中心的Tim-BernersLee提出的超文本传输协议HTTP,其目的是为研究中心分布在世界各地的科学家提供一个共享信息的平台。WWW从应用功能看,WWW是一种交互式图形界面的Internet服务,具有强大的信息连接功能,它使得成千上万的用户通过简单的图形界面就可以访问各个大学、组织、公司等的最新信息和各种服务。从技术上看,WWW是一个基于HTTP的客户-服务器应用系统,即属于客户-服务器范型的分布式计算应用。WWWWWW的核心技术有哪些?超文本标记语言HTML HTML语言是WWW服务的信息组织形式,用于定义在WWW服务器中存储的信息格式。超文本传输协议HTTP HTTP是WWW服务使用的应用层协议,用于实现WWW客户机与WWW服务器之间的通信WWW的核心技术TCP/IP协议HTTP协议是TCP/IP协议栈中的应用层协议,而TCP/IP是TransmissionControlProtocol/InternetProtocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议和Internet国际互联网络的基础。TCP/IP定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。注意:TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族。与七层OSI参考模型不同,从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。各层的协议如下图所示,其中HTTP为应用层最重要的协议之一。HTTP协议 HTTP是HyperTextTransportProtocol(超文本传输协议)的缩写,它用于传送WWW方式的数据,是互联网上应用最为广泛的一种网络协议,下图为HTTP协议传输的网页。HTTP协议的网页HTTP协议发展史
HTTP/0.9:从1990年就已经用来作为WWW的传输协 议,当时非常简单,只支持GET方法,响应中携带 的消息必须HTML文件。已过时。只接受GET一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持POST方法,所以客户端无法向服务器传递太多信息。
HTTP/1.0:
1996发布RFC1945,这是第一个在通讯中指定版本号的HTTP协议版本,至今仍被广泛采用,特别是在代理服务器中。
HTTP/1.1:1997推出RFC2068,HTTP/1.1的标准。当前版本。持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式同时发送多个请求,以便降低线路负载,提高传输速度。
HTTP/1.1:1999推出RFC2616,废弃了RFC2068标准。HTTP通信过程Web浏览器与Web服务器之间将完成下列7个步骤:(1)建立TCP连接(2)Web浏览器向Web服务器发送请求命令(3)Web浏览器发送请求头信息(4)Web服务器应答(5)Web服务器发送应答头信息(6)Web服务器向浏览器发送数据(7)Web服务器关闭TCP连接HTTP请求消息举例:GET/books/java.htmlHTTP/1.1Accept:*/*Accept-Language:en-usConnection:Keep-AliveHost:localhostReferer:http://localhost/links.aspUser-Agent:Mozilla/4.0Accept-Encoding:gzip,deflate请求消息的结构: 由请求方法URI协议/版本、若干请求头、以及请求正文3个部分组成,其中的一些请求头和请求正文都是可选的,请求头和请求正文之间要用空行隔开。
请求方法URI协议/版本
一个空行
若干请求头请求方法方法名备注GET获取一个URL指定的资源,即资源实体HEAD获取一个指定资源的信息,POST向服务器提交数据PUT向服务器提交资源DELETE请求源服务器删除Request-URI标识的资源TRACE网络跟踪CONNECT与PROXY之间的连接管理OPTIONS查询能力请求头(1)请求头字段用于客户端在请求消息中向服务器传递附加信息,主要包括客户端可以接受的数据类型、压缩方法、语言、以及发出请求的超链接所属网页的URL地址等信息。Accept:text/html,image/*Accept-Charset:ISO-8859-1,unicode-1-1
Accept-Encoding:gzip,compress
Accept-Language:en-gb,zh-cn
Authorization:Basicenh4OjEyMzQ1Ng==
Expect:100-continueFrom:zxx@
Host::80
If-Match:"xyzzy","r2d2xxxx"
请求头(2)If-Modified-Since:Tue,11Jul200018:23:51GMTIf-None-Match:"xyzzy","r2d2xxxx"If-Range:Tue,11Jul200018:23:51GMTIf-Unmodified-Since:Tue,11Jul200018:23:51GMTMax-Forwards:1
Proxy-Authorization:Basicenh4OjEyMzQ1Ng==Range:bytes=100-599 Range:bytes=100- Range:bytes=-100Referer:/index.jspTE:trailers,deflate
User-Agent:Mozilla/4.0(compatible;MSIE5.5;WindowsNT5.0)HTTP响应消息举例:HTTP/1.1200OKServer:Microsoft-IIS/5.0Date:Thu,13Jul200005:46:53GMTContent-Length:2291Content-Type:text/htmlCache-control:private<HTML><BODY>……响应消息的结构:
由版本代码描述/协议状态、若干响应头、以及响应正文
3个部分组成,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。
版本代码描述/协议状态
一个空行
多个响应头
响应正文
响应头响应头字段用于服务器在响应消息中向客户端传递附加信息,包括服务程序名,被请求资源需要的认证方式,被请求资源已移动到的新地址等信息。Accept-Range:bytes
Age:315315315Etag:b38b9-17dd-367c5dcdLocation:/index.jspProxy-Authenticate:BASICrealm="it315"Retry-After:Tue,11Jul200018:23:51GMTServer:Microsoft-IIS/5.0Vary:Accept-LanguageWWW-Authenticate:BASICrealm="it315"
响应状态码响应状态码用于表示服务器对请求的各种不同处理结果和状态,它是一个三位的十进制数。响应状态码可归为5种类别,使用最高位为1到5来进行分类,如下所示:(1)100~199表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程。(2)200~299表示成功接收请求并已完成整个处理过程。(3)300~399为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址。(4)400~499客户端的请求有错误。(5)500~599服务器端出现错误。
响应状态码典型情况200(正常)表示一切正常,返回的是正常请求结果。206(部分内容)客户发送了一个带有Range头(要求服务器只返回文档中的部分内容)的GET请求,服务器按要求完成了这个请求。302/307(临时重定向)指出被请求的文档已被临时移动到别处,此文档的新的URL在Location响应头中给出。304(未修改)表示客户机缓存的版本是最新的,客户机应该继续使用它。401(未经授权)表示客户机访问的是一个受口令和密码保护的页面,结合使用一个WWW-Authenticate响应头提示客户机应重新发出一个带有Authorization头的请求消息。404(找不到)服务器上不存在客户机所请求的资源。500(内部服务器错误)服务器端的CGI、ASP、JSP等程序发生错误。
响应正文响应正文响应正文就是服务器返回的HTML页面:<html><head><title>HTTP响应示例<title></head><body>HelloHTTP!</body></html>注意:响应头和正文之间也必须用空行分隔。使用GET和POST方式传递参数在URL地址后面可以附加一些参数 举例:/servlet/ParamsServlet?param1=abc¶m2=xyzGET方式 举例:GET/servlet/ParamsServlet?param1=abc¶m2=xyzHTTP/1.1
特点:传送的数据量是有限制的,一般限制在1KB以下。POST方式
举例:
POST/servlet/ParamsServletHTTP/1.1 Host: Content-Type:application/x-www-form-urlencoded Content-Length:28 param1=abc¶m2=xyz
特点:传送的数据量要比GET方式传送的数据量大得多。请求头示例响应头示例HTTPS协议HTTPS(全称:HyperTextTransferProtocoloverSecureSocketLayer),即超文本传输安全协议,简单讲是HTTP的安全版,是一种基于SSL/TLS的HTTP,所有的HTTP数据都是在SSL/TLS协议封装之上传输的。HTTPVSHTTPS特性HTTPHTTPS证书需求不需要证书需要向CA(证书颁发机构)申请数字证书,通常涉及费用传输方式明文传输,数据在网络中以明文形式存在,易被截取或篡改SSL/TLS加密传输,数据在网络中以加密形式存在,更安全连接方式使用非加密的TCP连接使用加密的TCP连接,并且默认使用SSL/TLS协议端口号默认端口号为80默认端口号为443连接特性无状态协议,每次请求都是独立的,不保留会话信息同样是无状态协议,但由于加密层的存在,增加了安全性安全性较低,不适合传输敏感信息较高,适合传输敏感信息,如密码和个人信息提纲3.1 HTTP协议3.2 Web开发技术简介3.3 CGI3.4 Web会话3.5 Applet和Servlet3.6 SSH框架与应用开发WEB开发技术简介目标功能Web开发技术静态网页技术HTML
JavaScriptCSS
XML
动态网页技术
HTML(HyperTextMarkupLanguage),超文本标记语言或超文本链接标示语言,是一种制作万维网页面的标准语言,是万维网浏览器使用的一种语言,它消除了不同计算机之间信息交流的障碍。它是目前网络上应用最为广泛的语言,也是构成网页文档的主要语言。HTML基本语法1.基本结构标记HTML文件是由HTML命令组成的描述性文本,HTML命令可以说明文字、图形、动画、声音、表格、链接等。HTML文件的结构包括头部(Head)、主体(Body)两大部分,其中头部描述浏览器所需的信息,而主体则包含所要说明的具体内容。2.段落标记HTML中最基本的元素是段落,段落可以用<P>表示,浏览器将段落的内容从左到右,从上到下显示。HTML基本语法3.图像标记定义图像的语法是:<img
src="url"/>,URL指存储图像的位置。如果名为"boat.gif"的图像位于
的images目录中,那么其URL为
/images/boat.gif。4.超链接标记—文字它类似这样:<ahref="url">Linktext</a>,href属性规定链接的目标。开始标签和结束标签之间的文字被作为超级链接来显示。<HTML><HEAD><TITLE>
计算机网络
</TITLE></HEAD><BODY>
计算机网络就是利用通信线路将具有独立功能的计算机连接起来而形成的计算机集合,计算机之间可以借助于通信线路传递信息,共享软件、硬件和数据等资源。<P><IMGsrc=”6/network.jpg”><P><AHREF=”6/lan.html”>局域网</A><P><AHREF=”6/man.html”>城域网</A><P><AHREF=”6/wan.html”>广域网</A></BODY></HTML>HTML示例运行效果JavaScript是一种基于对象(Object)和事件驱动(EventDriven)并具有安全性能的脚本语言。使用它的目的是与HTML超文本标记语言、Java脚本语言(Java小程序)一起实现在一个Web页面中链接多个对象,与Web客户交互作用。从而可以开发客户端的应用程序等。它是通过嵌入或调入在标准的HTML语言中实现的。它的出现弥补了HTML语言的缺陷,它是Java与HTML折衷的选择。1. 常量2. 变量3. 运算符4. 表达式5. 基本语句 (1) if-else条件语句 (2) for循环语句 (3) break语句 (4) continue语句 (5) switch语句6. 函数JavaScript基本语法……
<scripttype="text/javascript">
varc=0,t functiontimedCount() {
document.getElementById('txt').value=c c=c+1 t=setTimeout("timedCount()",1000) } functionstopCount() { c=0;
setTimeout("document.getElementById('txt').value=0",0);
clearTimeout(t); } </script> </head> <body> <form><inputtype="button"value="开始计时!"onClick="timedCount()"> <inputtype="text"id="txt"> <inputtype="button"value="停止计时!"onClick="stopCount()"></form> <p>请点击上面的“开始计时”按钮来启动计时器。输入框会一直进行计时,从0开始。点击“停止计时”按钮可以终止计时,并将计数重置为0。</p>……JavaScript示例运行效果级联样式表(CascadingStyleSheet)简称“CSS”,通常又称为“风格样式表(StyleSheet)”,它是用来进行网页风格设计的。比如,如果想让链接字未点击时是蓝色的,当鼠标移上去后字变成红色的且有下划线,这就是一种风格。通过设立样式表,可以统一地控制HTML中各标志的显示属性。级联样式表可以使人更能有效地控制网页外观。使用级联样式表,可以扩充精确指定网页元素位置,外观以及创建特殊效果的能力。<html><head><styletype="text/css">p:first-letter{color:#ff0000;font-size:xx-large}</style></head>
<body><p>Youcanusethe:first-letterpseudo-elementtoaddaspecialeffecttothefirstletterofatext!</p></body></html>CSS示例首字母特效XML(EXtensibleMarkupLanguage)即可扩展标记语言,它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言,它是一种很类似于HTML的标记语言,它被设计用来传输和存储结构化数据。XML是一种平台无关的数据表示方法和数据交换语言,即使用XML创建的数据可以被在任何平台上的任何应用程序读取,或者说使用XML标记语言可以做到数据或数据结构在任何编程语言环境下的共享
XML和HTML的区别 XML和HTML都是用于操作数据或数据结构,在结构上大致是相同的,但它们在本质上却存在着明显的区别,它们的区别主要有以下几点:
语法要求不同标记不同作用不同在HTML中不区分大小写,在XML中对大小写要求非常严格。HTML使用固有的标记,而XML没有固有标记。HTML用于显示页面,而XML用于描述页面内容的数据或数据的结构。HTML把数据和显示合在一起,在页面中把这些数据显示出来,而XML则将数据和显示分开。XML的优势
每种语言的产生都能完成某些特定的功能,XML作为一种标记语言也不例外。XML最大的优势在于它能对各种编程语言编写的数据进行管理,使得在任何平台下都能通过解析器来读取XML数据。它的优势可归纳为以下几点:数据的搜索数据的显示数据的交换在XML中可以提取文档中任何位置的数据XML将数据的结构和数据的显示形式分开,根据需要使数据呈现出多种显示方式。如HTML、PDF等格式。XML标记语言的语法非常简单,可以通过解析器在任何机器上解读。并可以在各种计算机平台上使用。逐渐成为一种数据交换的语言。
XML文档的组成 XML文档也属于纯文本文件,该文档一般如下四部分组成:
XML文档注释
XML标识及其内容
XML文档的声明
XML文档类型定义
按照这种文档格式来编写的一个XML文件,如下所示:<?xmlversion="1.0"encoding="UTF-8"?> <!--XML文档注释--> <?xml:stylesheettype="text/xsl" href="stu.xsl"?> <!--班级中学生的信息--> <class> <student> <name>Jone</name> <age>20</age> </student> </class>前三部分都是可选的使用Javascript解析XML文档<html><body><h1>XMLParseExample</h1><p><b>To:</b><spanid="to"></span><br/><b>From:</b><spanid="from"></span><br/><b>Message:</b><spanid="message"></span><scripttype="text/javascript">if(window.XMLHttpRequest){//codeforIE7+,Firefox,Chrome,Opera,Safari xmlhttp=newXMLHttpRequest();}else{//codeforIE6,IE5 xmlhttp=newActiveXObject("Microsoft.XMLHTTP");}xmlhttp.open("GET","note.xml",false);xmlhttp.send();xmlDoc=xmlhttp.responseXML;document.getElementById("to").innerHTML=xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;document.getElementById("from").innerHTML=xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;document.getElementById("message").innerHTML=xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;</script></body></html>note.xml文件内容运行效果:
动态网页与静态网页之间最大的区别在于网页与用户之间是否有交互反馈的过程,如动态网页上的留言板,点击数等等,采用了动态网页技术的同一网页能够对不同用户的同样操作做出不同的反应,而静态网页则没有这个交互过程,呈现给用户的是同一个无差别的页面。
常用的动态网页技术有PHP、ASP和JSP等。下面以JSP为例进行讲解。动态网页技术JSP是JavaServerPages的缩写,是由Sun公司倡导、许多公司参与,于1999年推出的一种动态网页技术标准。JSP是基于JavaServlet以及整个Java体系的Web开发技术,利用这一技术可以建立安全、跨平台的先进动态网站,这项技术还在不断的更新和优化中。当服务器上的一个JSP页面被第一次请求执行时,服务器上的JSP引擎首先将JSP页面文件转译成一个java文件,再将这个java文件编译生成字节码文件,然后通过执行字节码文件响应客户的请求,这个字节码文件的主要工作是:
(1)把JSP页面中普通的HTML标记符号(页面的静态部分)交给客户的浏览器负责显示。
(2)执行“<%”和“%>”之间的java程序片(JSP页面中的动态部分),并把执行结果交给客户的浏览器显示。
(3)当多个客户请求一个JSP页面时,JSP引擎为每个客户启动一个线程而不是启动一个进程,这些线程由JSP引擎服务器来管理,与传统的CGI为每个客户启动一个进程相比较,效率要高的多。JSP的运行原理
JSP文件需要先放入一个Web容器中(如Tomcat,Weblogic,Websphere等),然后通过URL访问的方式才能运行,通常有以下步骤:
(1)安装Web引擎服务容器,并配置好环境变量(2)编写JSP文件,把文件放入工程中,并把工程放入容器的相应目录下(如webapps目录下)(3)在浏览器中通过如下URL进行访问:
http://IP:端口号/工程名
(如1:8080/Webtest)JSP的运行步骤
JSP页面的基本结构在传统的HTML页面文件中加入java程序片和JSP标签就构成了一个JSP页面文件。一个JSP页面可由5种元素组合而成:
(1)普通的HTML标记符。
(2)JSP标签:如,指令标签、动作标签。
(3)变量和方法的声明。
(4)Java程序片。
(5)Java表达式。
<%@pagecontentType="text/html;charset=GB2312"%> <%@pageimport="java.util.*"%><HTML><BODYBGCOLOR=cyan><FONTSize=1><P>请输入三角形的三个边的长度,输入的数字用逗号分割:
<%!doublea[]=newdouble[3];Stringanswer=null;%><% inti=0;
else { answer="您输入的三边不能构成一个三角形"; out.print("<BR>"+answer); }}%> <P>您输入的三边是:<BR><%=a[0]%><BR><%=a[1]%><BR><%=a[2]%></BODY></HTML>JSP示例输入111之后(注意数字之间的空格),网页效果如图所示:提纲3.1 HTTP协议3.2 Web开发技术简介3.3 CGI3.4 Web会话3.5 Applet和Servlet3.6 SSH框架与应用开发
公共网关接口CGI(CommonGatewayInterface)是WWW技术中最重要的技术之一,有着不可替代的重要地位。CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程。CGI(TheCommonGatewayInterface)是一个标准化的协议,能够使应用程序(通常称为CGI程序或CGI脚本)同web服务器和客户端进行交互。CGI程序能够用Python,PERL,Shell,CorC++等语言来实现。CGI工作原理CGI工作步骤如下:Step1:客户端发出请求Step2:Web服务器激活CGI程序Step3:CGI程序对客户端的请求做出反应Step4:Web服务器将CGI的处理结果传送给客户端Step5:Web服务器中断和客户端浏览器的链接Step6:Web浏览器将CGI程序的输出显示到浏览器的窗体CGI工作步骤2025/3/21DistributedComputing54CGI运行环境配置1、去掉conf/web.xml中的如下段中的注释;<servlet>
<servlet-name>cgi</servlet-name>
<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>passShellEnvironment</param-name>
<param-value>true</param-value>//?
</init-param>
<init-param>
<param-name>cgiPathPrefix</param-name>
<param-value>WEB-INF/cgi</param-value>//此处映射真实路径形式为tomcatpath+projectname+param-value
</init-param>
CGI程序要想运行在网站容器中(比如apache、tomcat等),这里以tomcat为例,讲解下如何配置并运行CGI程序。2025/3/21DistributedComputing55
<init-param>
<param-name>executable</param-name>
<param-value>cmd/c</param-value>
//c++的cgi解析方式,若为perl脚本,则修改为:<param-value>C:/Perl/bin/Perl.exe</param-value>
</init-param>
<init-param>
<param-name>clientInputTimeout</param-name>
<param-value>100</param-value>
</init-param>
<load-on-startup>5</load-on-startup></servlet>2.在web.xml文件中,把关于对CGI进行映射的那段的注释去掉。参考如下:
<servlet-mapping>
<servlet-name>cgi</servlet-name>
<url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>3.把servlets-cgi.renametojar(在%CATALINA_HOME%/server/lib/目录下)改名为servlets-cgi.jar。CGI运行环境配置2025/3/21DistributedComputing564、此外,如出现java.lang.SecurityException:Servletofclassorg.apache.catalina.servlets.CGIServletisprivilegedandcannotbeloadedbythiswebapplication这一异常。则需要修改tomcat权限配置,在conf/context.xml中:<Contextprivileged="true"><!--Defaultsetofmonitoredresources--><WatchedResource>WEB-INF/web.xml</WatchedResource><!--UncommentthistodisablesessionpersistenceacrossTomcatrestarts--><!--<Managerpathname=""/>--><!--UncommentthistoenableCometconnectiontacking(provideseventsonsessionexpirationaswellaswebapplifecycle)--><!--<ValveclassName="org.apache.catalina.valves.CometConnectionManagerValve"/>--></Context>CGI运行环境配置Asamplewebscripthello.pl说明:把cgi文件放在/cgi-bin/目录下就可以调用了。CGI运行步骤2025/3/21DistributedComputing58Asamplewebscripthello.c/***ThisCprogramisforaCGIscriptwhichgenerates*theoutputforawebpage.Whendisplayedbya*browser,themessage"Hellothere!"willbeshown*inblue.*/#include<stdio.h>
main(intargc,char*argv[]){
printf("Content-type:text/html%c%c",10,10);printf("<fontcolor=blue>");printf("<H1>Hellothere!</H1>");printf("</font>");}WEB表单是一种处理特殊类型的WEB页面,该类型页面可以是:1)提供了提示用户输入数据的图形用户界面;2)当用户点击页面上提交按钮时,将调用WEB服务器主机上的外部程序的执行。WEB表单的核心是一种HTML的<form>标签,该标签主要用于向服务器传输数据。WEB表单从浏览器请求服务器的方法有GET和POST两种(与HTTP协议中的两种请求方法相一致)。如果方法(METHOD属性值)是GET,则CGI程序就从环境变量QUERY_STRING中获取Form数据;若方法是POST,则CGI程序就从标准输入(stdin)中获取Form数据。WEB表单下面是一个Web表单请求CGI程序的一个简单例子。WEB表单例子<html><head><title>AWEBFORM</title></head><body><form>what'syourname?<inputtype="text"name="name"action="hello.cgi“method="post"><inputtype="submit"value="提交表单"/></form></body></html>提纲3.1 HTTP协议3.2 Web开发技术简介3.3 CGI3.4 Web会话3.5 Applet和Servlet3.6 SSH框架与应用开发当用户在购物网上进行购物时,通常会有一个购物车,用户将只需将想购买一系列商品保存到购物车内,最后一起结账就行了。在购物车等Web应用的一个会话期间,将发送多个HTTP请求,每个请求都可能调用外部程序,如CGI脚本等。下图为该应用的一个简化会话:一个Web会话过程WEB会话WEB会话是指web客户端与服务器的一次连接、中间多次交互到最后断开的过程。由于HTTP协议是无状态的,因此需要会话跟踪技术管理客户端的多次请求的状态信息。会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。会话(Session)Cookie通过在客户端记录信息确定用户身份。Session通过在服务器端记录信息确定用户身份,从而达到不同程序之间数据的共享。WEB会话WEB会话——为什么需要会话跟踪Http协议有什么特点?HTTP协议不记录用户的信息被访问了两次,但是不清楚,是一个人访问了两次?还是两个人各访问一次?访问访问WEB会话——为什么需要会话跟踪在线购物系统中如何对用户进行区分?如何解决这些问题?购买2个商品张三李四购买3个商品一共购买了5个商品,应该从谁的账户上扣款?请求1请求2请求n…….什么是会话跟踪借助于会话跟踪技术,能将同一会话中的一系列请求和响应过程关联起来,使它们之间可以相互依赖和传递信息会话跟踪技术如何唯一标识客户?WEB会话——什么是会话跟踪
第一次请求服务器创建一个会话并将该对象的ID返回给用户响应
把ID发送给客户端第二次请求把ID一起发送给服务器publicclassServlet1extendsHttpServle{...publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html;charset=gbk");PrintWriterout=response.getWriter();//通过request的getSession()方法得到SessionIDStringsessionId=request.getSession().getId();//输出out.print("产生了一次会话,sessionId为:"+sessionId);out.print("<ahref='servlet2'>访问servlet2</a>");}}在不同的浏览器中运行,会得到不同的SessionIDWEB会话——会话跟踪原理会话跟踪实现的几种方式Web服务器为客户端开辟的一块存储空间,用于存放状态信息Cookie是一小段文本信息,伴随用户请求在Web服务器和浏览器之间传递,Cookie存放于客户端通过表单隐藏域来存储数据,便于在不同请求间传递,这些数据对于客户端不可见URL重写技术在URL结尾添加一些附加数据,用于标识该会话Cookie机制需要统计同一客户端访问某网站的次数 在登录网站时,设置自动登录
这些功能如何实现?为什么要使用CookieCookie是一种会话跟踪机制。它可以弥补HTTP协议无状态的不足/Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。Cookie使用key-value键值对的形式保存用户状态什么是Cookie很多网站都会使用Cookie。例如,Google会向客户端颁发Cookie,Baidu也会向客户端颁发Cookie。那浏览器访问Google会不会也携带上Baidu颁发的Cookie呢?或者Google能不能修改Baidu颁发的Cookie呢?Cookie域名隔离Cookie具有不可跨域名性。根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。
Cookie在客户端是由浏览器来管理的。浏览器能够保证Google只会操作Google的Cookie而不会操作Baidu的Cookie,从而保证用户的隐私安全。浏览器判断一个网站是否能操作另一个网站Cookie的依据是域名。Google与Baidu的域名不一样,因此Google不能操作Baidu的Cookie。
需要注意的是,虽然网站与网站同属于Google,但是域名不一样,二者同样不能互相操作彼此的Cookie。
Cookie域名隔离Cookie的应用举例Cookie对象编程相关知识点方法名功能Cookiecookie=newCookie(Stringname,Stringvalue)创建一个Cookie对象Cookie[]cookies=request.getCookies()得到所有的Cookiespublicvoidresponse.addCookie(Cookiecookie)添加一个Cookiespublicvoidcookie.setMaxAge(intarg0)设置Cookie对象的有效时间,单位为秒publicvoidcookie.setValue(Stringvalue)设置指定Cookie的值publicStringcookie.getvalue()得到Cookie的值Cookie的应用举例//定义全局变量privateCookietempCookie=null;
...
//设置color变量,默认为白色背景Stringcolor="white";//说明有设置背景,则重新赋予用户设置的背景if(tempCookie!=null) { color=tempCookie.getValue(); }out.print("<bodybgcolor='"+color+"'>");out.print("<formname='form1'method='post'action='cookieServlet'>");out.print("请选择你喜爱的背景颜色<br/>");out.print("<inputtype=radioname='radColor'value='red'>红色<br>");out.print("<inputtype=radioname='radColor'value='blue'>蓝色<br>");out.print("<inputtype=radioname='radColor'value='yellow'>黄色<br>");out.print("</p><p><inputtype='submit'name='Submit'value='提交'></p></form></body>");
...
动态生成个性设置界面//接受用户所选择的背景色StringbgColor=request.getParameter("radColor");//得到所有CookieCookie[]cookies=request.getCookies();//如果存在cookieif(cookies!=null){//迭代输出每一个cookiefor(Cookiecookie:cookies){//如果存在用于设置背景色的Cookieif("bgColor".equals(cookie.getName())){ //取出赋值给tempCookie tempCookie=cookie; //为tempCookie赋值为用户选中的背景色
tempCookie.setValue(bgColor); break;//跳出循环} }}//如果不存在用于设置背景色的Cookie,说明之前没有设置过背景色if(tempCookie==null){tempCookie=newCookie("bgColor",bgColor);} //设置tempCookie的时效为一年tempCookie.setMaxAge(360*24*60*60);//保存cookieresponse.addCookie(tempCookie);this.doGet(request,response);
根据用户设置保存CookieSession机制Session是一种保存上下文信息的机制,它针对每一个用户,在服务器端开辟一块存储空间,用于存放用户的会话状态,通过SessionID区分不同的客户使用Session对象存储特定用户会话信息,当用户在应用程序Web页面之间跳转时,存储在Session对象中的变量不会丢失,而将一直存在于整个会话中什么是Session技术Session与Cookie的最大区别是什么?Session对象工作原理HttpSession对象服务器为每个会话创建一个HttpSession对象每个会话对象都有一个唯一的ID将用户的数据保存在相应的HttpSession对象内第一次请求响应服务器创建一个HttpSession对象并将该对象的ID返回给用户同时,服务器在内存中开辟一块空间,用于保存该对象数据将ID发送给客户端第二次请求将ID一起发送给服务器根据ID号服务器寻找内存中相应的数据根据Session的定义说明在线购物应用程序中的购物车是否适合存入Session中Session会话的超时管理在Http协议中,Web服务器无法判断当前的客户端浏览器是否还会继续访问,也无法检测客户端浏览器是否关闭即使客户已经离开或关闭了浏览器,Web服务器仍然保留与之对应的Session对象Web服器采用”超时限制”的方法来处理Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。
由于会有越来越多的用户访问服务器,因此Session也会越来越多。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。
Session对象实质是在服务器端开辟一个内存空间,为节省资源,服务器会在某个特定的场合回收该空间服务器,那么会在何时回收?浏览器关闭之后,服务器会立即回收吗?<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.4">...<!--设置会话超时间隔为20分钟--><session-config><session-timeout>20</session-timeout></session-config>...</web-app>Web.xml会话超时配置Session应用举例Session对象的创建
publicHttpSessiongetSession()
调用此方法时,容器会先检查是否存在用户请求的会话,若存在则直接返回本次会话,若不存在则创建新会话publicHttpSessiongetSession(booleanflag)
此方法中的flag用于指定是否有必要创建会话。为false表示:若客户之前没有建立过会话则返回null
方法名功能publicboolean
isNew()判断当前会话对象是否是一个新创建的会话publicObjectgetAttribute(Stringname)根据指定名从会话中取出某个属性publicvoidsetAttribute(Stringname,Objectvalue)根据指定名将某个对象存放到会话中publicvoidremoveAttribute(Stringname)根据指定名从会话中移除某个属性publicStringgetId()获取会话IDpublicvoidinvalidate()使会话失效publicvoidsetMaxInactiveInterval(intinterval)设置会话超时的时间秒值HttpSession接口提供的常用方法
Session应用举例//得到session对象HttpSessionsession=request.getSession();//从session中获取car(购物车对象)List<Integer>car=(List)session.getAttribute("car");//如果购物车为空if(car==null){ //创建一个购物车对象
car=newArrayList(); //将购物车放入session中
session.setAttribute("car",car);} //获取100之内的随机数
inti=newRandom().nextInt(100); //将数值作为商品放入购物车中
car.add(newInteger(i)); //定位到get方法
this.doGet(request,response); }把商品放入购物车HttpSessionsession=request.getSession();//从session中获取car(购物车对象)List<Integer>car=(List)session.getAttribute("car");//循环迭代输出购物车的所有商品for(Integeritem:car){ out.print("商品:"+Value()+"<br>");}显示购物车内的商品URL地址重写URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。什么是URL地址重写URL地址重写举例HttpServletResponse类提供了encodeURL(Stringurl)实现URL地址重写,例如:<td><ahref="<%=response.encodeURL("index.jsp?c=1&wd=Java")%>">Homepage</a></td>
该方法会自动判断客户端是否支持Cookie。如果客户端支持Cookie,会将URL原封不动地输出来。如果客户端不支持Cookie,则会将用户Session的id重写到URL中。重写后的输出可能是这样的:<td><ahref="index.jsp;jsessionid=0CCD096E7F8D97B0BE608AFDC3E1931E?c=1&wd=Java">Homepage</a></td>
即在文件名的后面,在URL参数的前面添加了字符串“;jsessionid=XXX”。其中XXX为Session的id。分析一下可以知道,增添的jsessionid字符串既不会影响请求的文件名,也不会影响提交的地址栏参数。用户单击这个链接的时候会把Session的id通过URL提交到服务器上,服务器通过解析URL地址获得Session的idSession中禁止使用Cookie对于WAP程序,由于大部分的手机浏览器都不支持Cookie,WAP程序都会采用URL地址重写来跟踪用户会话。比如用友集团的移动商街等。既然WAP上大部分的客户浏览器都不支持Cookie,索性禁止Session使用Cookie,统一使用URL地址重写会更好一些。JavaWeb规范支持通过配置的方式禁用Cookie。下面举例说一下怎样通过配置禁止使用Cookie。打开项目sessionWeb的WebRoot目录下的META-INF文件夹(跟WEB-INF文件夹同级,如果没有则创建),打开context.xml(如果没有则创建),编辑内容如下:<?xmlversion='1.0'encoding='UTF-8'?><Contextpath="/sessionWeb"cookies="false"></Context>或者修改Tomcat全局的conf/context.xml,修改内容如下:<!--Thecontentsofthisfilewillbeloadedforeachwebapplication--><Contextcookies="false"><!--...中间代码略--></Context>
提纲3.1 HTTP协议3.2 Web开发技术简介3.3 CGI3.4 Web会话3.5 Applet和Servlet3.6 SSH框架与应用开发Applet小应用程序是JAVA编写的客户端小程序,可通过因特网下载并在接收计算机上运行的一小段程序。运行在浏览器软件中,Applet典型用于为万维网网页页面定制或添加交互格式元素。Applet一个applet小程序
Applet必须运行于某个特定的“容器”,这个容器可以是浏览器本身,也可以是通过各种插件,或者包括支持Applet的移动设备在内的其他各种程序来运行。与一般的Java应用程序不同,Applet不是通过main方法来运行的。在运行时Applet通常会与用户进行互动,显示动态的画面,并且还会遵循严格的安全检查,阻止潜在的不安全因素(例如根据安全策略,限制Applet对客户端文件系统的访问)。Applet特点语言特点1)从Applet类扩展而创建的用户Applet新类。2)类定义举例:publicclasshello2extendsApplet3)Applet依赖于浏览器的调用。4)通过〈Applet〉标记嵌入在HTML文件中。Applet的生命周期的四个过程:init()、start()、stop()、destroy()方法都是Applet类中已经定义的方法,系统根据上述规则自动执行Applet的生命周期。用户Applet中也可重新定义这些方法(重载)。Applet的生命周期:首先执行init()方法,构造了Car类的实例Car1,并计算了price1和mycar1。然后执行start()方法,计算了price2。然后执行paint()方法,在页面上显示Price1和price2的信息,过程如下图。Applet生命周期生命周期示意图Applet在用户的计算机上执行时,还可以下载其它的资源,如声音文件、图像文件或更多的Java代码,有些Applet还允许用户进行交互式操作。但这需要重复的链接与下载,因此速度很慢,这是一个亟待解决的问题,可以想到的一个好办法是采用类似高速缓存的技术,将每次下载的文件都临时保存在用户的硬盘上,虽然第一次使用时花的时间比较多,但当再次使用时,只需直接从硬盘上读取文件而无需再与Internet连接,便可以大大提高性能了。在此过程中,浏览器与服务器的交互过程如下图。Applet工作原理浏览器与服务器交互过程图2025/3/21DistributedComputing88TheHelloWorldApplet<HTML><BODY><APPLETcode=hello.classwidth=900height=300></APPLET></BODY></HTML>//applettodisplayamessageinawindowimportjava.awt.*;importjava.applet.*;publicclasshelloextendsApplet{
publicvoidinit(){ setBackground(Color.yellow); }
publicvoidpaint(Graphicsg){finalintFONT_SIZE=42; Fontfont=newFont("Serif",Font.BOLD,FONT_SIZE);
//setfont,andcoloranddisplaymessageon //thescreenatposition250,150 g.setFont(font); g.setColor(Color.blue);//Themessageinthenextlineistheoneyouwillsee g.drawString("Hello,world!",200,150); } }2025/3/21DistributedComputing89TheHelloWorldApplet提示:1)把HelloApplet.html和applet类文件拷贝到tomcat服务器的root目录下运行;2)运行javaapplet时提示:您的安全设置已阻止本地应用程序运行,如何解决? ——将Java控制面板中的安全级别调至“中”
servlet是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。Servlet
服务器上需要一些程序,常常是根据用户输入访问数据库的程序。这些通常是使用公共网关接口(CGI(CommonGatewayInterface))应用程序完成的。然而,在服务器上运行Java,这种程序可使用Java编程语言实现。在通信量大的服务器上,Javaservlet的优点在于它们的执行速度更快于CGI程序。各个用户请求被激活成单个程序中的一个线程,而无需创建单独的进程,这意味着服务器端处理请求的系统开销将明显降低。
最早支持Servlet技术的是JavaSoft的JavaWebServer。此后,一些其它的基于Java的WebServer(如tomcat,WebLogic,iPlanet,WebSphere)开始支持标准的ServletAPI。Servlet的执行过程为:
客户端发送请求至服务器端服务器将请求信息发送至ServletServlet生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求服务器将响应返回给客户端Servlet执行过程Servlet响应过程2025/3/21Servlet时序图2025/3/21GenericandHTTPServlets2025/3/21Servlets-DistributedComputing94Servlet生命周期
下面是一个servlet的示例,用servlet处理html页面的表单信息:form.html。Servlet示例<html><head><title>AWEBFORM</title></head><body><formaction="/FormServlet”method="post">what'syourname?<inputtype="text"name="name"><inputtype="submit"value="提交表单"/></form></body></html>在网站的web.xml中配置servlet的映射<servlet><servlet-name>FormServlet</servlet-name><servlet-class>com.ping.servlet.FormServlet</servlet-class></servlet><servl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 一站式CPSM考试试题与答案
- 物流成本结构解析试题及答案
- 核酸与蛋白质的关系研究试题及答案
- 植物种类的主要特征试题及答案
- 透视2024年CPMM试题与答案
- 2025年中国冷暖风扇项目投资可行性研究报告
- 2025年中国养殖鸡用水箱数据监测报告
- 光合细菌与绿藻的比较试题及答案
- 分析2024年CPMM考试疑难试题及答案
- 二零二五年度农村田亩流转租赁经营合同
- 2025年宁夏电投新能源限公司招聘工作人员13人高频重点提升(共500题)附带答案详解
- 合肥市2025届高三第二次模拟考试英语试卷含解析
- 《雷达原理》课件-3.5.5教学课件:inSAR雷达工作原理
- 口腔医学技术的知识产权保护
- 起重吊装作业专项安全培训
- 上海市算力基础设施发展报告2024年
- 2024年重庆市公务员录用考试《行测》真题及解析
- 《义务教育数学课程标准(2022年版)》初中内容解读
- 电工5级练习题库(含参考答案)
- “中华老字号”申报书
- DB11T 1562-2018 农田土壤固碳核算技术规范
评论
0/150
提交评论