《表示层技术》PPT课件.ppt

上传人:za****8 文档编号:12724362 上传时间:2020-05-19 格式:PPT 页数:391 大小:3.40MB
返回 下载 相关 举报
《表示层技术》PPT课件.ppt_第1页
第1页 / 共391页
《表示层技术》PPT课件.ppt_第2页
第2页 / 共391页
《表示层技术》PPT课件.ppt_第3页
第3页 / 共391页
点击查看更多>>
资源描述
J2EE实用技术,第7章表示层技术,学习内容,7.1表示层技术概述7.2基于WEB的表示层7.3图书管理系统中的WEB层技术7.4Servlet技术7.5JSP技术7.6Servlet过滤器,表示层技术概述,表示层是用户与系统交互的组件集合,用户通过这一层向系统提交请求或发出指令,系统通过这一层接收用户请求或指令,然后,将指令消化吸收后调用下一层,再将调用的结果展现到这一层。表示层应该是轻薄的不应该具有业务逻辑。,表示层技术概述,GUI(AWT和Swing等):采用了GUI(图形用户界面)表示层是我们常说的C/S结构,我们在学习核心Java时候学习过AWT和Swing图形用户界面的开发。即使我们使用AWT和Swing图形用户界面开发都应考虑表示层是轻薄的,不应改有业务逻辑代码,具体的说在Swing和AWT中不应该访问数据库的代码。图书管理系统的Swing版本,就是这样设计的,访问数据库的业务代码放到业务服务层中来完成的。,表示层技术概述,WEB(JSP,Servlet)表示层:如果我们的系统是一个Web系统的话,我们使用的技术JSP、Servlet等,可以使用MVC框架例如Struts等框架技术,这时我们可以将表示层称为web层更准确一点,因为在MVC框架中JSP作为表示层,Servlet作为控制层。但是不论采用什么技术这层都应该是轻薄的,也就是说我们无论我们使用JSP和Servlet作为表示层还是使用Swing作为表示层都应该是轻薄的。,表示层技术概述,分成设计的一个好处是,提高系统可复用性,在我们的图书管理系统的Swing版和Web版中间,我们业务服务层和数据持久层是可以复用的。,基于WEB的表示层,HTTPHTMLJavaScript,HTTP协议,众所周知,Internet的基本协议是TCP/IP协议,目前广泛采用的FTP、ArchieGopher等是建立在TCP/IP协议之上的应用层协议,不同的协议对应着不同的应用。WWW服务器使用的主要协议是HTTP协议,即超文体传输协议。由于HTTP协议支持的服务不限于WWW,还可以是其它服务,因而HTTP协议允许用户在统一的界面下,采用不同的协议访问不同的服务,如FTP、Archie、SMTP、NNTP等。另外,HTTP协议还可用于名字服务器和分布式对象管理。,HTTP协议,HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(NextGenerationofHTTP)的建议已经提出。,HTTP协议,HTTP协议的主要特点可概括如下:1.支持客户/服务器模式。2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。,HTTP协议,4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。,HTTP协议的几个重要概念:,1.连接(Connection):一个传输层的实际环流,它是建立在两个相互通讯的应用程序之间。2.消息(Message):HTTP通讯的基本单位,包括一个结构化的八元组序列并通过连接传输。3.请求(Request):一个从客户端到服务器的请求信息包括应用于资源的方法、资源的标识符和协议的版本号,HTTP协议的几个重要概念:,4.响应(Response):一个从服务器返回的信息包括HTTP协议的版本号、请求的状态(例如“成功”或“没找到”)和文档的MIME类型。5.资源(Resource):由URI标识的网络数据对象或服务。6.实体(Entity):数据资源或来自服务资源的回映的一种特殊表示方法,它可能被包围在一个请求或响应信息中。一个实体包括实体头信息和实体的本身内容。,HTTP协议的几个重要概念:,7.客户机(Client):一个为发送请求目的而建立连接的应用程序。8.用户代理(Useragent):初始化一个请求的客户机。它们是浏览器、编辑器或其它用户工具。9.服务器(Server):一个接受连接并对请求返回信息的应用程序。10.源服务器(Originserver):是一个给定资源可以在其上驻留或被创建的服务器。,HTTP协议的几个重要概念:,11.代理(Proxy):一个中间程序,它可以充当一个服务器,也可以充当一个客户机,为其它客户机建立请求。请求是通过可能的翻译在内部或经过传递到其它的服务器中。一个代理在发送请求信息之前,必须解释并且如果可能重写它。12.网关(Gateway):一个作为其它服务器中间媒介的服务器。与代理不同的是,网关接受请求就好象对被请求的资源来说它就是源服务器;发出请求的客户机并没有意识到它在同网关打交道。,HTTP协议的几个重要概念:,13.通道(Tunnel):是作为两个连接中继的中介程序。一旦激活,通道便被认为不属于HTTP通讯,尽管通道可能是被一个HTTP请求初始化的。当被中继的连接两端关闭时,通道便消失。当一个门户(Portal)必须存在或中介(Intermediary)不能解释中继的通讯时通道被经常使用。14.缓存(Cache):反应信息的局域存储。,HTTP协议的运作方式,HTTP协议是基于请求响应范式的。一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为,统一资源标识符、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。,最简单的情况,一个或多个中介出现在请求响应链中时,HTTP协议的内部操作过程,HTTP协议下客户/服务器模式中信息交换的实现,1.建立连接2.发送请求3.发送响应4.关闭连接,HTML超文本标识语言,Web是一个大规模分布式的信息仓库。Web用链接的方法可以非常方便地从Internet上的一个站点访问另一个站点,能够从整个Internet上获取丰富的信息。万维网的推广使用是计算机网络发展中的一个重要的里程碑,正是由于万维网的出现,才使Internet在全球得到空前的发展。,HTML超文本标识语言,万维网起源于1989年的欧洲粒子物理研究室CERN。当时推出万维网的目的是为了使分布在不同国家的物理学家们更方便地协同工作(因为他们需要经常交换各种报告、图形、照片等)。1991年12月,在美国德州的SanAntonio91超文本会议上进行了一次万维网的公开演示。1993年2月,随着第一个图形界面浏览器Mosaic的发布,Web达到其历史发展的第一个高峰。,HTML超文本标识语言,尽管万维网已经诞生很多年了,但长期以来,万维网完全是静态的。也就是说,它是基于一种简单的传输协议,向用户传送静态的文本。最初设计万维网完全是为了共享信息,或者说是帮助科学家们解决一些论文即时共享的问题。结果它只是通过超级链接把一系列文件链接起来。不过在当时看来这已经足够了,因为毕竟比原来的Gopher浏览器看到的东西要好多了。现在,随着JavaScript、VBScript、CSS、ASP等概念的引入,万维网得到了空前的发展)再也没有人敢小觑它了,因为它已经发展成为全球最大的信息库!,HTML超文本标识语言,没有人能统计出万维网中包含的信息量,因为它是那样的庞大,而且无时无刻不在更新。其传播的信息也不再只是简单的文本,越来越多的图形、声音、动画和视频影像等形式的信息也通过万维网广泛传播。正是由于这些形式的信息的加入,才使得万维网变得如此绚丽多彩。,HTML超文本标识语言,在万维网上,成千上万的站点之间进行着激烈的竞争。那些只有简单静态页面的站点完全被其他站点淹没。而那些动态的,拥有友好的、交互性强的界面和丰富内容的Web页则受到了广泛的青睐。当然,这样的站点也赢得了更多的商机。,HTML4.0,HTML是超文本标注语言(HyperTextMarkupLanguage)的缩写。所谓超文本,是指具有自我引用、自我定义能力的文本。(1)Web页面这种带有超级链接功能的文本就是超文本;(2)HTML是实现Web页面的语言。,初识HTML,HTML的前身是ISO在1986年指定的标准ISO8879,即SGML(StandardGeneralizedMarkupLanguage)。这是一个描述标注语言的标准,它非常复杂,有许多选项功能十分强大。HTML定义了许多用于排版的命令,即“标签”(Tag),这也是HTML最主要的特点。元素(Element)是HTML文档的基本组成部分。,一个简单的例子,HTML的例子欢迎来学习Java这是一个HTML的小示例,一个简单的例子,HTML中最基本的标签,“”表示一个标签的结束HTML一般用一对标签(即一个开始标签和一个结束标签)或几对标签来标识一个元素。开始标签由一个小于字符“”组成。结束标签和开始标签的区别只是在小于字符的后面加上一个斜杠字符“”标签名是不区分大小写的(例如,、和是等效的)。,HTML中最基本的标签,中还有另一个特殊字符“,document.write()与document.writeln()方法,documentwriteln()方法能够直接输出信息到用户的窗口中。如:document.write(“字符串”);document.writeln(“字符串”);write()和writeln()方法都是用于向浏览器窗口输出文本字串;writeln()方法自动在文本之后加入回车符;,JavaScript的数据类型,可以使用以下几种数据类型:数值型整数浮点数字符串,字符串为程序提供了进行交流的能力,这非常重要,所以没有一门程序语言不使用字符串。字符串是由单引号或双引号界定的一串字符,可以由任何数量的字符组成,0个字符也可以。字符串的内部可以包含单引号和双引号。同c语言一样,javascript也支持“”作为转义字符以输出特数量的用法,例如:,其他类型,在计算机领域之外,日常生活中还会遇到许多不确定的或无法定义的数值。如果用计算机程序模拟我们生活的这个世界,就必须处理这些不确定的或无法定义的数值。为此,JavaScript提供了许多特殊的数据类型。,布尔型,布尔型就是逻辑值,逻辑数据类型比其他数据类型简单得多,因为它只有2个可能的数值真(true)和假(false)。其中“真”就是“开”或“是”,“假”就是“关”或“非”。在JavaScript中,“真”和“假”经常由1(真)和0(假)表示。,null,JavaScript提供关键字“null”表示没有值的情况。在有些语言中0和null取值相同,但在JavaScript,中0和null的数值完全不同。,null,JavaScript提供关键字“null”表示没有值的情况。在有些语言中0和null取值相同,但在JavaScript,中0和null的数值完全不同。不确定数值专门用来指明一个已经创建,但是却还没有一个初值的变量。,null,不确定数值与null不同之处在于:不确定数值只是一个概念,而null是一个关键字。对于数字,不确定数值等于NaN;对于字符串,不确定数值表示字符串“undefined”;对于逻辑值,不确定值表示“假”。,变量的赋值变量的赋值,变量有了名称还需要声明和赋值。定义变量的格式是关键字Var后加变量名称。下面几个实例程序演示了如何声明变量;,JavaScriptSample/VariabledeclarationwithoutassignmentVarfirstName;/VariableassignmentwithourdeclarationfirstName=David;/VariabledeclarationandassignmentVarage=25;Varheight=5.6;/Displaytheresultsdocument.write(firstName,is,ageand,height,feettall.);,变量类型,JavaScript的变量分为全局变量和局部变量。只有在函数中定义的变量才是局部变量(这时该变量只在该函数中有效),否则就是全局变量。全局变量可以与局部变量同名,在该函数中是局部变量,在该函数外是全局变量。,变量类型,给变量赋值应注意的是对var的使用。在JavaScript中,var的作用是限定变量的使用范围,即在函数内部用var声明的变量是函数的局部变量,其他函数不能利用此变量。而在函数内部无var声明或是在函数外部声明的变量都是全局变量,在一个HTML文档中所有的JavaScript语句都可以访问到它。在这里建议读者在声明函数的局部变量时注意使用var进行声明。,字符串操作符,加法操作赋对处理字符串具有特殊功效。如果加法两边都是字符串,计算结果是两个字符传连接起来;如果其中只有一个是字符串,加法操作符会把另一个转换成字符串在于第一个字符串相连。,JavaScriptSampleTheResultofStringadditionis:,sStringAdd,);document.write(TheResultofNumberadditionis:,intNumberAdd,);document.write(TheResultofStringaddtionnumberis:,sString);/EndHide-,字符串操作符,注意:javascript下不支持双引号的嵌套,双引号将和最近的配对,如果要嵌套内部需要用单引号来实现,这一点希望同学们注意!,字符串操作符,同一性操作符(=):同一性操作符(=)比较“=”两边表达式的值,如果值相等,则运算结果为真如果值不相等,则运算结果为假。在进行同一性运算前不作类型转换。,字符串操作符,不同一性操作符(!=)不同一性操作符(!=)比较“!=”两边表达式的值。如果值不相等则结果为真如果相等,则运算结果为假。在进行不同一性运算前不作类型转换。,JavaScript的流控制结构,在JavaScript中,每条语句后应该以一个分号结尾,但JavaScript的要求并不严格,在编写脚本时,语句后可以加上分号也可以不加分号,不过,我们建议还是加上分号较合适,这是一种良好的编程习惯。,JAVASCRIPT中的注释,注释在程序执行的时候没有任何作用,但可以对程序进行解释,增强程序的可读性,作为良好的编程风格,应该养成书写注释的良好习惯,注释有两种表达方式:,JAVASCRIPT中的注释,通过双斜线注释一行varstringl=JavaScrip;/Initiateastring通过符号/*和*/来规定注释语句/*ThisisanexampleOfmultiplelines*/,函数,函数的定义:function函数名(参数列表)代码块,函数的定义,在JavaScript中使用函数时,必须先定义这个函数,然后才能对这个函数进行调用。下面先介绍函数的定义方式:function函数名(参数列表)代码块,函数的定义由3个部分组成:,函数名调用函数时通过函数名进行调用。对于函数的命名,一般应该使用能够描述函数功能的单词进行描述,往往也可以使用多个单词组合进行命名,这样能够提高脚本的可读性。参数列表参数列表是可选的,在必要的时候;可以使用参数列表向函数传递一些参数,以便在函数中可以使用这些参数。代码块代码块中的代码包含在一对大括号中,通过代码块的执行完成函数的功能,如果需要返回一个值给调用函数的语句,应该在代码块中使用return语句。但是函数是可以嵌套的,即在一个函数中还可以调用其他函数。,一个简单函数的例子,FunctionMaxNumber(numberl,number2)if(number1number2)returnnumberl;elsereturnnumber2;,这里定义了一个简单的函数,函数完成的功能是对2个数进行比较,然后返回其中较大的一个数。所以对于函数的命名,我们采用MaxNumber。函数中有2个参数numberl和number2,在函数中对这2个参数进行比较,在numberlnumber2的情况下,返回numberl,反之,则返回number2,函数的返回值可以被调用函数的语句使用。,在一般情况下,函数的定义应该放在HTML页面的HEAD部分,这样不但在页面中任何部分都可以直接使用这个函数,而且在页面下载时也可以使用这个函数。在这个例子中,浏览器将在页面下载时对函数进行调用。,JavaScriptSamplenumber2)returnnumberl;elsereturnnumber2;document.write(MaxNumber(12,56);/-,在这个例子中,因为要求在页面下载时就在document.write()中使用MaxNumber函数,所以应该将函数定义在HTML页面的HEAD部分。如果在页面下载时不需要使用这个函数,那么这个函数可以在页面的任何部分进行定义,甚至于可以在这个页面的结束标签之外。,函数的调用,JavaScript中定义了函数后并不会立即执行,而是在该函数被调用的时候才执行。在上面的实例中已经使用到了对函数的调用。在函数MaxNumber(number1,number2)中,number1和number2都是函数的形式参数,因为它们只是一种形式而已,他们所指代的实际值在函数被调用的时候才会赋给numberl和number2,在实例中使用MaxNumber(12,56)语句调用这个函数,在调用的时候,将12赋给numberl,将56赋给number2,在这个例子中,是返回2个数的最大值。,图书管理系统中的WEB层技术,1HTTP部分:(略)2JSP部分:,index.jsp用户登录页面,图书查询系统,index.jsp用户登录页面,“+request.getAttribute(error_message)+);%,index.jsp用户登录页面,用户名:,index.jsp用户登录页面,密码:,index.jsp用户登录页面,index.jsp用户登录页面,index.jsp用户登录页面,JavaScript代码,functionsubmitForm(itemName)document.forms0.fn.value=itemName;document.forms0.submit();/*functionanchorSubmit(index,itemName)document.forms0.elementsRecord.value=index;document.forms0.fn.value=itemName;document.forms0.submit();*/functionshowWaiting(itemName)processing.style.visibility=visible;document.forms0.fn.value=itemName;document.forms0.submit();,JavaScript代码,functionconfMessage(flag)varconfMsg=;switch(flag)caseadd:/添加confMsg=是否确定添加数据?;break;caseupd:/修改confMsg=是否确定修改数据?;break;casedel:/删除confMsg=是否确定删除数据?;break;casereturn:/取消confMsg=是否取消?;break;default:break;,JavaScript代码,if(confMsg!=)returnconfirm(confMsg);elsereturntrue;functionconfSumbit(fn)if(confMessage(fn)document.forms0.fn.value=fn;document.forms0.submit();,JavaScript代码,这是一个JavaScript文件,我们要在使用的页面中引入JavaScript文件:。,Servlet代码,publicclassControllerextendsHttpServlet/ProcesstheHTTPGetrequestpublicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptionrequest.setCharacterEncoding(gb2312);/取得功能区分子Stringfn=request.getParameter(fn);/页面迁移路径Stringurl=index.jsp;if(fn.equals(logon)/登录StringpageUserName=request.getParameter(username);StringpagePassWord=request.getParameter(password);LogonServicelogicBean=newLogonServiceImp();,Servlet代码,Useruser=logicBean.getUserInfo(pageUserName,pagePassWord);if(user=null)url=index.jsp;request.setAttribute(error_message,登录失败!);elseif(!pagePassWord.equals(user.getPassword()url=index.jsp;request.setAttribute(error_message,登录失败!);elseHttpSessionsession=request.getSession();session.setAttribute(userinfo,user);url=search(,request);,Servlet代码,/查询分支elseif(fn.equals(search)/取得查询条件StringbookName=request.getParameter(bookname);Stringauthor=request.getParameter(author);Stringpublisher=request.getParameter(publisher);url=search(author,bookName,publisher,request);/删除数据elseif(fn.equals(del)StringbookId=request.getParameter(showSecEx);BookServicesv=newBookServiceImp();sv.delete(bookId);url=search(,request);,Servlet代码,/插入画面迁移elseif(fn.equals(add)BookServicesv=newBookServiceImp();StringbookID=sv.getNextBookId();BookEditFormBeanform=newBookEditFormBean();form.setBookid(bookID);request.setAttribute(data,form);url=add.jsp;/插入画面返回elseif(fn.equals(add_back)|fn.equals(mod_back)BookServicesv=newBookServiceImp();url=search(,request);,Servlet代码,/插入确定elseif(fn.equals(add_ok)/书籍编号StringbookId=request.getParameter(bookId);/书籍名称StringbookName=request.getParameter(bookName);/作者Stringauthor=request.getParameter(author);/出版社Stringpub=request.getParameter(pub);/出版日期StringpubDate=request.getParameter(pubDate);/在库数量Stringstroge=request.getParameter(stroge);BookEditFormBeanform=newBookEditFormBean();form.setBookid(bookId);form.setBookname(bookName);,Servlet代码,form.setAuthor(author);form.setPublishing(pub);form.setPublishingdate(pubDate);form.setStorage(stroge);/验证Listerrors=form.validate();if(errors!=null,Servlet代码,BookServicesv=newBookServiceImp();sv.insert(book);url=search(,request);elserequest.setAttribute(data,form);request.setAttribute(error_message,errors);url=add.jsp;/修改画面迁移elseif(fn.equals(upd)StringbookId=request.getParameter(showSecEx);BookServicesv=newBookServiceImp();,Servlet代码,BookdataBean=sv.search(bookId);BookEditFormBeanform=newBookEditFormBean();form.setBookid(dataBean.getBookid();form.setBookname(dataBean.getBookname();form.setAuthor(dataBean.getAuthor();form.setPublishing(dataBean.getPublishing();form.setPublishingdate(dataBean.getPublishingdate();form.setStorage(String.valueOf(dataBean.getStorage();request.setAttribute(data,form);url=modify.jsp;/修改确定,Servlet代码,elseif(fn.equals(mod_ok)/书籍编号StringbookId=request.getParameter(bookId);/书籍名称StringbookName=request.getParameter(bookName);/作者Stringauthor=request.getParameter(author);/出版社Stringpub=request.getParameter(pub);/出版日期StringpubDate=request.getParameter(pubDate);/在库数量Stringstroge=request.getParameter(stroge);BookEditFormBeanform=newBookEditFormBean();form.setBookid(bookId);form.setBookname(bookName);form.setAuthor(author);form.setPublishing(pub);,Servlet代码,form.setStorage(stroge);/验证Listerrors=form.validate();if(errors!=null,Servlet代码,elserequest.setAttribute(data,form);request.setAttribute(error_message,errors);url=modify.jsp;RequestDispatcherdispatcher=request.getRequestDispatcher(url);dispatcher.forward(request,response);,Servlet代码,privateStringsearch(Stringauthor,StringbookName,Stringpublisher,HttpServletRequestrequest)BookServicesv=newBookServiceImp();Listlist=sv.search(author,bookName,publisher);BookSearchFormBeanform=newBookSearchFormBean();form.setAuthor(author);form.setBookname(bookName);form.setPublisher(publisher);form.setTable(list);request.setAttribute(search_result,form);returnsearch.jsp;,Servlet概述,JavaServlet是基于Java技术的Web组件,用来扩展以请求响应为模型的服务器的能力。它可以响应任何类型的请求。但我们通常使用HTTPServlets处理HTTP请求(request)和提供HTTP响应(response)。,Servlet概述,Servlet是使用JavaServlet应用程序设计接口及相关类和方法的Java程序。它在Web服务器上或应用服务器上运行并扩展了该服务器的能力。JavaServlet对于Web服务器就好像JavaApplet对于Web浏览器。Applet装入Web浏览器并在Web浏览器内执行,而Servlet则是装入Web服务器并在Web服务器内执行。JavaServletAPI定义了Servlet和服务器之间的一个标准接口,这使得Servlet具有跨服务器平台的特性。Servlet通过创建一个框架扩展服务器的能力,采用请求/响应模式提供Web服务。当客户机发送请求至服务器时,服务器将请求信息发送给Servlet,Servlet生成响应内容并将其传给Server,然后再由Server将响应返回给客户端。,Servlet概述,JavaServlet是基于Java技术的Web组件运行于Web服务器端Java程序可以开发B/S(Browser/Server)结构的系统,Web浏览器,Web服务器,HTTP请求,HTTP响应,Servlet,Servlet的技术特点,Servlet是用Java编写的服务器端的软件组件,也即(Java服务小程序),它能动态扩展服务器的功能(通常指HTTP服务器)。Servlet执行于支持Java的应用服务器中。Servlet工作在服务器“后台”,只将处理结果返回给客户(通常以HTML形式)。,Servlet的技术特点,Servlet是一些按照自身规范编写的Java类。Servlet对于开发人员最大的好处是它可以处理客户端传来的Http请求,并能够返回一个响应。总的来说,Servlet有以下优势:,Servlet的技术特点,可移植性功能强大安全模块化扩展性和灵活性高效耐久,Servlet的技术特点,可移植性:因为Servlet是由Java开发并符合规范和定义的API,它可以在不同的操作系统平台和不同的应用服务器平台下进行移植。,Servlet的技术特点,功能强大:Servlet可以使用JavaAPI核心的所有功能,这些功能包括Web和URL访问、图像处理、数据压缩、多线程、JDBC、RMI、序列化对象等。,Servlet的技术特点,安全:有几个不同的层次为Servlet的安全提供了保障:首先,它是用Java编写的,所以它可以使用Java的安全框架;其次,ServletAPI被实现为类型安全的;另外,容器也会给Servlet的安全进行管理。在Servlet安全策略中,可以使用编程的安全也可以使用声明性的安全,声明性的安全由容器进行统一管理。,Servlet的技术特点,简洁:Servlet代码面向对象、在封装方面具有先天性的优势。集成:Servlet和服务器紧密集成,它们可以密切合作完成特定的任务。,Servlet的技术特点,模块化:每一个Servlet可以执行一个特定任务,并且可以将它们并在一起工作。Servlet之间是可以相互交流的。,Servlet的技术特点,扩展性和灵活性:Servlet本身的接口设计得非常精简,使得它有很强的扩展性。需要指出的是,Servlet不等于HttpServlet,后者是前者的一个常用扩展。,Servlet的技术特点,高效耐久:Servlet一旦载入,它就驻留在内存中,这样加快了系统响应的速度。,Servlet的生命周期,Servlet部署在容器里,它的生命周期由容器管理。Servlet的生命周期概括为以下几个阶段:,Servlet的生命周期,加载Servlet创建一个Servlet实例调用Servlet的init()方法服务销毁,Servlet的生命周期,加载Servlet这项操作一般是动态执行的。有些服务器提供了相应的管理功能,可以在启动的时候就装载Servlet并能够初始化特定的Servlet。创建一个Servlet实例调用Servlet的init()方法,Servlet的生命周期,服务如果容器接收到对此Servlet的请求,那么它调用此Servlet的service()方法。销毁实例被销毁,通过调用Servlet的destory()方法来销毁Servlet。在这几个阶段中,是对外提供服务是最重要的阶段,service()方法是我们最关心的方法,因为它才是真正处理业务的方法。,Servlet的生命周期,Servlet的功能,Servlet在几乎所有能够想到的方面都能够扩展服务器功能,一般来说Servlet有以下功能:,Servlet的功能,基于客户的请求,动态创建并返回一个HTML文件。处理用户的HTML表单输入并返回适当的响应。公布由许多客户提交的信息从而保障多用户之间的通信。提供用户身份验证和其它安全机制。,Servlet的功能,与服务器资源如数据库、其它应用程序和文件交互,以返回有用的信息到客户。处理来自许多客户的输入,对应用程序如多人游戏来说,客户是在同级上进行交互的。允许服务器通过一个用户协议与一个客户端applet程序通信,并在整个会话期间保持连接。,Servlet的功能,为最有效处理一项任务而在跨服务器或在Servlet之间的分割单个逻辑服务。其它功能。,HttpServlet的继承关系图,Servlet接口,init(ServletConfigconfig)用于初始化Servletdestroy()销毁ServletgetServletInfo()获得Servlet的信息getServletConfig()获得Servlet的配置相关信息service(ServletRequestreq,ServletResponseres)运行应用程序逻辑的入口点,GenericServlet抽象类,跨协议的Servlet类提供了对Servlet接口的基本实现它的service()方法是一个抽象方法GenericServlet的派生类(子类)必须直接或者间接实现这个方法,HttpServlet抽象类,针对使用Http协议的Web服务器的Servlet类HttpServlet的子类实现以下方法中的至少一个doGet:支持Http的Get请求doPost:支持Http的Post请求doPut:支持Http的Put请求(上传)doDelete:支持Http的Delete请求(删除文件)serivce:可以接受任何标准Http请求init和destroy:管理Servlet占用的资源getServletInfo:获得Servlet自身的信息,Servlet请求和响应,ServletRequestServlet的请求,它是一个高层的接口ServletResponseServlet的响应,它是一个高层的接口HttpServletRequestHttp的请求,继承了ServletRequest接口HttpServletResponseHttp的响应,继承了ServletResponse接口,HttpServletRequest接口,getSession()返回和客户端关联的SessiongetParameter(Stringname)获得请求中名为name的参数的值getParameterValues(Stringname)返回请求中名为name的参数值,获得的值是一个String数组(一般是表单中的多项选择),HttpServletResponse接口,setContentType(Stringtype)设置响应的MIME类型setCharacterEncoding设置响应的字符集类型,Servlet会话跟踪,会话跟踪相关的类和接口-HttpSessiongetValue(Stringname)返回一个以给定的名字绑定到Session上的对象getValueNames(Stringname)以一个数组返回绑定到Session上的所有数据的名称putValue(Stringname,Objectvalue)以给定的名字绑定给定的对象到Session中removeValue(Stringname)取消给定名字的对象在Session上的绑定,使用HttpServlet处理客户请求,HttpServlet被设计成请求驱动的。HttpServlet的请求中可能包含多个数据项,当Web容器接收到某个对HttpServlet的请求时,HttpServlet把它封装成一个HttpServletRequest对象,然后把此对象传给HttpServlet对应的服务方法,服务方法通常是doGet和doPost方法。另外,HttpServlet也提供了一些高级的处理方法,它们有doPut、doTrace、doDelete。,使用HttpServlet处理客户请求,doGetdoPostdoPutdoDeleteservice,doGet方法,Http的GET调用用于获取服务器信息,并将其作为响应返回给客户端。当经由Web浏览器,或者通过HTML、JSP直接访问Servlet的URL时,一般使用Get调用。Get调用在URL里显示正传送给Servlet的数据,但这将在系统的安全方面可能带来一些问题,比如说用户登录时,表单里的用户名和密码需要发送到服务器端,如果使用Get调用,就会在浏览器的地址栏里显示用户名和密码。,HttpServlet的doGet处理客户端请求,doGet方法例子:doGetservlet.html请输入数据:,HttpServlet代码,doGet方法例子:HelloServlet.javapublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletExceptionrequest.setCharacterEncoding(gb2312);response.setContentType(text/html;charset=gb2312);PrintWriterout=response.getWriter();out.println(你输入的是:+request.getParameter(name);out.flush();out.close();,获得参数,在HelloServlet.java中,通过request.getParameter()方法来获得请求中的输入参数。如上面的代码中被加黑的语句。,配置web.xml文件,doGet方法例子:配置web.xml文件helloservletj2ee.HelloServlethelloservlet/helloservlet,配置web.xml文件,部署时,一定要注意在web.xml中正确描述这个Servlet,并且指定URL映射为helloservlet,doPost方法,利用doPost处理相关数据:同样是处理客户端传送的数据。使用它的好处是客户段可以隐藏发送给服务器端任何数据。因此Post适合于发送大量的数据,尤其是需要保密的数据。下面我们来看一个具体的例子,在客户端,同样通过表单的方式来发送参数,如:doPostServlet.html,doPost方法,doPost方法例子:doPostServlet.html请输入数据:,Servlet代码,doPost方法例子:HelloServlet.javapublicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletExceptionrequest.setCharacterEncoding(gb2312);response.setContentType(text/html;charset=gb2312);PrintWriterout=response.getWriter();out.println(你输入的是:+request.getParameter(name);out.flush();out.close();,小结,当在HelloServlet.html网页中输入相关数据后点击“输入”按钮显示HelloServlet生成的网页。web.xml配置同上。以上的两个例子其实是相同的,只不过在请求的HTML代码中method由GET换成了POST,在服务器端处理POST请求的HttpServlet需要覆盖HttpServlet的doPost方法。,Web应用系统的目录结构,TongKingBook文件夹这是这个应用系统(案例)的名字TongKingBookWEB-INF文件夹这个目录下放着web.xml等配置文件TongKingBookWEB-INFclasses文件夹系统中的class文件TongKingBookWEB-INFlib文件夹系统中用到的类包,Servlet在web.xml文件中的配置1/2,Servlet的名字、类Servlet的配置Test_ServletMyServletcom.test.servlets.TestServlet,Servlet在web.xml文件中的配置2/2,Servlet的映射TestMappingcom.test.servlets.TestMappingTestMapping/testmapping,小结,提示:一个web应用系统可以压缩成一个文件,这个文件的压缩格式与.jar是一样的,但是,文件名必须是.war结尾的,所有我们的应用系统可以压缩成一个这样的文件TongKingBook.war。,演示,Servlet,讨论,Get方法和Post方法有什么区别?,JSP概述,JSP组件技术使我们能够很容易地创建动态和静态的Web内容,JSP提供了Servlet技术具有的所有构建动态内容的功能,而且为静态内容提供了更自然的创建方式。JSP是Sun公司推出的一种新型的Internet/Intranet开发语言。和前一代Internet/Intranet开发语言(ASP、PHP)相比,JSP在许多方面取得了重大的突破。(JavaServerPages)JSP技术的设计目的是使得构造基于Web的应用程序更加容易和快捷,而这些应用程序能够与各种Web服务器、应用服务器、浏览器和开发工具共同工作。,JSP概述,JSP技术被设计为一个开放的、可扩展的建立动态Web页面的标准。开发人员可以使用JSP页面创建可移植的Web应用,在不同的Web应用服务器上为不同的场合运行,而不论采用什开发工具。,JSP概述,在开发JSP规范的过程中,Sun公司与许许多多主要的Web服务器、应用服务器和开发工具供应商以及各种各样富有经验的开发团体进行合作,其结果是找到了一种为应用和页面开发人员平衡了可移植性和易用性的开发方法。JSP技术在多个方面加速了动态Web页面的开发。JSP提供以下技术:,JSP概述,解决Servlet开发的繁琐将表示层和业务层分离可重用组件方便采用标签简化页面开发,JSP概述,将内容的生成和显示进行分离:使用JSP技术,Web页面开发人员可以使用HTML或者XML标识设计和格式化最终页面,使用JSP标识或者java脚本生成动态页面内容。生成内容的逻辑被封装在JSP标识和JavaBeans组件中,并且捆绑在java脚本中,所有的脚本在服务器端运行。如果核心逻辑被封装在标识和Beans中,那么其他人,如Web管理人员和页面设计者,能够编辑和使用页面,而不影响内容的生成。在服务器端,JSP引擎解释JSP标识和java脚本,生成所请求的内容(例如,通过访问JavaBeans组件使用JDBC技术访问数据库,或者包含文件),并且将结果以HTML(或者XML)页面的形式发送回浏览器。这有助于作者保护自己的代码,又可以保证任何基于HTML的Web浏览器的完全可用性。,JSP概述,强调可重用的组件:绝大多数JSP页面依赖于可重用的、跨平台的组件(JavaBeans或者EnterpriseJavaBeans组件)来执行应用程序所要求的更为复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使得这些组件为更多的使用者或者客户团体所使用。基于组件的软件开发方法加速了总体开发过程,并且使得各种组织在它们现有的技能和优化结果的开发努力中得到了平衡。,JSP概述,采用标识简化页面开发:Web页面开发人员不会都是熟悉脚本语言的编程人员。JavaServerPage技术封装了许多功能。通过应用服务器,JSP将它的HTML标记、JSP标记和java脚本程序转换成Servlet,使得JSP是可操作的。这个过程负责将JSP文件中声明的动态和静态元素转换成为Java的Servlet代码,这些代码将转换了的内容通过Web服务器输出流传送到浏览器。由于JSP是服务器端的技术,所以页面的
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!