servlet入门学习课件_第1页
servlet入门学习课件_第2页
servlet入门学习课件_第3页
servlet入门学习课件_第4页
servlet入门学习课件_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Servlet入门1、软件体系架构层体系架构模式层(layer):把应用系统分解成子任务组,其中每个子任务组处于一个特定的抽象层次上。层架构模式组织成一个层次结构,每一层为上层服务(ServiceProvider),同时也作为下层的客户端。内部层只对相邻的层可见。层之间的调用通过决定层间如何交换的协议来定义。每一层最多只影响两层,同时只要给相邻两层提供接口,允许每层不同的方法实现,因此为软件重用提供强大的支持。客户层N层N-1层1使用解决的问题源码的修改会影响整个系统,应该被限定在一个部件内部而不影响其他模块。接口应当稳定,甚至要被规范化。系统的架构应该灵活,可以更换。系统的开发要被划分为多个部分,比如团队开发或者异地开发。优点与缺点优点层次的复用性。如果每个层次有很好的抽象接口,那么它可以被其他环境复用。支持基于抽象程度递增的系统设计,使设计者可以把一个复杂系统按递增的步骤进行分解,使系统更容易模块化。支持功能增强,因为每一层至多和相邻的上下层交互,因此功能的改变最多影响相邻上下层。可替换性。因为独立的层次设计很容易被功能相同的模块替换。缺点效率低。通常比单层结构效率低。因为有时高层过分依赖底层的服务,因此必须穿过许多中间层进行数据的传送,甚至多次。改变行为引起连锁反映Client/Server体系架构Server层Client层终端服务器终端终端表示业务逻辑数据库Server层Client层PCDB服务器PCPC业务逻辑数据库表示业务逻辑C/S架构缺点软件部署开销很大。每个客户端都需要进行安装和设置,一旦程序发生变化,就需要重新部署,这意味巨大开销。业务逻辑混杂在客户端。一旦业务需求发生变化,就需要修改客户端代码。改变数据结构的开销很大。客户端应用程序一般通过JDBC、ODBC或ADO等技术直接访问数据库,如果改变数据结构来处理新的过程,就需要修改客户端程序并重新部署每个客户端。改变数据库的类型的开销很大。由于客户端直接使用特定数据库的API和特定的存储过程、触发器等,因此如果数据库类型的改变,也会引起很多修改。三层体系架构Server层Client层PC应用服务器PCPCDatabase层数据库表示业务逻辑数据库业务逻辑层资源层多层体系结构表示层客户端层PC应用服务器PCPC数据库业务逻辑表示多层描述客户端层代表访问系统的人员、应用程序或系统的客户端。它是整个系统的对外接口,可以是Web浏览器、Java应用程序、WAP、其他设备等。表示层该层封装了用来访问系统的所有客户端的表示层逻辑。该层解释客户端的请求,提供登陆,实现会话管理,控制对业务的访问(权限控制),构造客户端的响应,以及把响应传递给客户端。业务逻辑层提供业务服务,包括业务数据和业务逻辑。通常应用程序的大多数业务处理集中在本层。同时它管理事务。集成层负责与外部系统和外部资源通信,它有多种方式,例如数据库连接使用JDBC等。资源层包括业务数据源和外部系统资源,如数据库,JMSServer和其他遗留系统等。J2EE架构2、HTTP基础HTTP协议超文本传输协议(HTTP)是一个简单的、无状态的协议。Web浏览器发出一个请求Web服务器接收请求,处理并发出响应Web浏览器接收响应,结束!无状态:它没有为服务器提供内置方法--识别一系列的请求源自同一个用户。Web服务器ClientrequestresponserequestresponseHTTP请求请求(request)用来告诉Web服务器需要执行的活动,它通过一个HTTP命令method来区分。请求也包括参数和HTTP版本。GET/index.htmlHTTP/1.0请求也可以包含一些可选的头信息,告诉Web服务器一些关于请求的额外信息。User-Agent:Mozilla/4.0(compatible;MSIE4.0;Windows95)告诉关于客户端软件的信息GET方法GET方法用来从Web服务器获取信息(如文档,图表,数据库查询结果等)。当在浏览器中直接输入URL,或单击一个hyperlink时候,就向Web服务器发出了一个GET请求。GET请求可以在URL后面添加一些参数,所谓的查询串(querystring)。这些参数可以发送给Web服务器。http://localhost/getuserinfo.html?id=100&name=abcGET方法也可以用来提交HTML表单(form)。POST方法POST方法用来向Web服务器发送信息(如信用卡号,文件等)。POST请求一般和HTML的表单标记使用,用于录入数据,并传递给Web服务器。POST请求用于向Web服务器发送大量的信息。<formaction=“xxx”method=POST>FirstName:<inputtype=textsize=20name=firstname><br>LastName:<inputtype=textsize=20name=lastname><br><inputtype=submit></form>其他方法HEAD方法用于获取响应的头信息,判断文档大小、更新时间等。PUT方法在Web服务器上直接放置文档。DELETE方法删除Web服务器上的文档。TRACE方法用于调试。OPTIONS方法查询服务器支持哪些方法。HTTP响应客户发出请求后,服务器处理请求,并送回一个响应(response),表示处理结果。第一行表示状态信息,如服务器使用的HTTP版本、状态代码和描述。HTTP/1.1200OK响应的头信息,告诉客户server端使用的软件、响应的内容的类型等。Date:Saturday,23-May-0003:25:12GMTServer:TomcatWebServer/3.2MIME-version:1.0Content-type:text/htmlContent-length:1029最后是结果的内容,如HTML页面的内容。3、介绍ServletServlet做什么?Servlet是用Java代码编写的服务器端软件程序,用于处理客户机和服务器之间的消息传递。Servlet可以通过动态构造一个发回客户机的响应来响应客户机请求。Servlet可以访问整个JavaAPI集合。非常适合实现复杂的商业应用逻辑。可以多次调用一个Servlet来响应来自多个客户机的请求。一个Servlet可以同时处理多个请求,并且可以使这些请求同步。Servlet可以将请求转发到其他服务器和Servlet。Web服务器和应用服务器Web服务器用于处理静态HTML页面请求,它可以将静态的HTML页面作为响应返回给客户端。Apache,IIS等。一些商业Web服务器包含一个简单的Servlet容器,可以用来运行Servlet。应用服务器扩展了Web服务器的功能,它可以处理Servlet、EJB和Web应用程序的请求它包含相应的容器:Servlet/JSP容器,EJB容器等。BEAWebLogic,IBMWebSphere,SuniPlanet,ApacheTomcat,JBoss等。Servlet如何工作?Servlet在支持Java的应用服务器中运行。服务器自己装入、执行和管理Servlet,服务器使用JRE来运行Servlet。客户机将请求发送到服务器;服务器实例化(装入)Servlet,并为Servlet创建线程;(Servlet是在出现第一个请求时装入的,服务器在关闭前不会卸载它)服务器将请求信息发送到Servlet;Servlet创建一个响应,并将它传递到服务器;服务器将响应发回客户机。应用服务器ServletClientResourcese.g.DatabaserequestresponseJavaAPIsuchasJDBC如何运行ServletServlet可以作为显式URL引用调用,或者嵌入在HTML中并从Web应用程序调用。Servlet在应用服务器的机器上的某一个目录中,这个目录可以配置到不同的位置。当第一次从客户机调用Servlet时,将装入这些Servlet。或者,可以在应用服务器启动的时候装入它们。应用服务器必须支持编写JavaServlet的版本级别。JavaServlet版本2.1、2.2、2.3等什么是JavaServletAPI?JavaServletAPI是一组类,用于定义Web客户机和Servlet之间的标准接口。JavaServletAPI有两个包:javax.servlet:包含了支持普通协议无关的Servlet的类;javax.servlet.http:包含了对HTTP协议的特别支持。Servlet接口类定义了管理Servlet一起它与客户机通信的方法。HttpServlet类是基于HTTP协议的Servlet实现;HttpServletRequest类代表发送到Servlet的请求;HttpServletResponse类代表从Servlet发回客户端的响应。处理HTTPServlet的关键方法GET请求:是Web页面的典型浏览器请求,它是在用户输入URL或使用链接时发出的。POST请求:是用户提交指定发出的HTML表单时生成的。HttpServlet的子类必须至少覆盖一个方法:doGet或doPost来处理请求。service:实现Servlet的最低级标准方法doPut:用于HTTPPUT请求doPost:用于HTTPPOST请求init和destroy:用于管理Servlet的生命周期装入和初始化第一次请求服务时,服务器将动态装入并实例化Servlet。还可以将Servlet配置成应用服务器启动的时候装入和实例化特定的Servlet。Servlet的init方法被自动调用。在处理任何请求之前,都会为每个Servlet实例调用它一次。init方法执行的示例包括装入配置数据或建立数据库连接等。处理多线程Servlet由应用服务器装入。同一时间只有一个Servlet对象的实例,并且它在Servlet的使用期间将一直保留。两个客户同时请求Servlet的服务。服务器会根据实例对象为每个请求创建一个处理程序线程。每个线程都可以访问装入Servlet时初始化的变量。每个线程处理它自己的请求。服务器将响应发送回相应的客户机。应用服务器ServletinstanceClient1Client2Thread1Thread24、Web应用概述Web应用Web应用是Web或应用服务器的动态扩展Presentation-oriented:为响应用户的请求,产生交互的Web页面,包含各种标记语言(如HTML、XML等)和动态内容Service-oriented:实现WebService的一端。Presentation-oriented的Web应用通常作为它的客户端Web组件Web组件(components)为Web服务器提供动态扩展的能力JavaservletsJSPpagesWebServiceendpointsWeb容器Web容器(Webcontainer)是支持Web组件运行提供访问的平台Web容器提供一些服务,如:RequestdispatchingSecurityConcurrencyLife-cyclemanagementWeb容器也为Web组件提供访问naming、transactions和e-mail的APIWeb应用被安装(部署deploye)时,它的配置信息在一个XML文件中进行维护,该文件称为Web应用部署描述符:deploymentdescriptorWeb应用生命周期Web应用程序由下列组件构成:Web组件(servlet、jsp等)静态资源文件(html、images等)帮助类和库Web应用程序开发过程:1、开发Web组件代码2、开发Web应用部署描述文件3、编译Web组件和帮助类4、将应用打包成一个可部署单元(可选)5、将应用部署到Web容器6、通过URL访问Web应用Web模块Web组件和静态Web内容文件被称为Web资源(Webresources)Web模块(WebModules)是最小的、可部署的、可运行的Web资源单元。Web模块还可以包括以下内容:服务端工具类:JavaBean客户端工具类:applets等Web模块结构Web模块有一个规范的结构Web模块有两种方式进行部署:不打包的目录结构打包成Webarchive文件(WAR)DocumentRootWEB-INFlibclassestagsjsp,htmlimages等web.xmllibraryfilesserver-sideclassestagfiles5、ServletAPIServlet接口Servlet接口是servletAPI的核心所有servlets都直接或间接地实现该接口ServletAPI中的类GenericServlet和HttpServlet都实现了Servlet接口开发者应该集成HttpServlet来实现直接的servlets处理请求的方法Servlet接口定义了service方法来处理用户的请求当请求到来时,servlet容器调用该方法请求并发请求时,在不同线程中并发执行service方法HttpServlet添加了其他方法用于处理HTTP请求,这些方法被service方法调用:doGetdoPostdoPutdoDeletedoHead等Servlet实例的数量通常,servlet容器仅为每个servlet实例化一个实例实现SingleThreadModel接口的servelt可以有多个实例Servlet

生命周期生命周期定义了Servlet如何被载入和实例化,初始化,处理来自用户的请求,以及如何取消它的服务Init、service、destroy载入和实例化容器负责载入和实例化servlet可以在容器启动时,或延迟到请求到来时初始化容器调用init方法,传入一个ServletConfig对象,通过该对象可以访问servert的初始化参数和ServletContext对象读入配置信息,初始化昂贵资源(JDBC连接),执行其他一次性动作处理请求HttpServletRequest对象代表请求,HttpServletResponse对象代表应答结束服务Servlet对象可以在容器中维持一段时间,或容器的寿命容器调用destroy方法,释放资源,保存持久性数据调用destroy之前,容器保证正在执行的线程执行完成Servlet

上下文ServletContext接口定义了Web应用程序的一个servlet视图通过它,servlet可以把事件记入日志,获得指向资源的URL引用,设置和存储其他servlet可以访问的属性每个部署到容器中的Web应用程序只有一个ServletContext实例初始化参数初始化参数是部署描述文件中为Web应用程序定义的系列初始化参数ServletContext提供下面方法访问这些参数:getInitParametergetInitParameterNames上下文属性一个servlet可以在context中通过名字绑定一个对象属性绑定到context中的属性对同一个Web应用程序中的任何其他servlet都是可见的ServletContext提供下面方法访问:setAttributegetAttributegetAttributeNamesremoveAttribute资源Web应用程序包含一些静态资源HTML,GIF,JPEG等ServletContext提供直接访问这些资源的方法:getResourcegetResourceAsStream方法需要一个String参数,以”/”开头,给出资源的路径(相对于context的root)不能通过这种方式获得动态内容例如“/index.jsp”返回JSP的源码,而不是它的执行结果Request对象Request对象封装了来自用户请求的所有信息HTTP协议参数Servlet的请求参数是用户发送给servlet容器的请求的一部分(字符串形式)来自URI查询串或POST-ed数据参数以name-value对的方式存储,一个参数名可以有多个值和它对应通过下列方法可以获得这些参数:getParametergetParameterNamesgetParameterValues查询串参数位于POST数据之前Querystring:a=hello,Postdata:a=goodbye&a=worlda=(hello,goodbye,world)属性属性是和一个request相关的对象可以有两种方式设置属性容器设置:表达一些不能通过API表达的信息Servlet设置:用于和其他servlet通信属性名和属性值是一一对应的关系以”java.”、”javax.”、”sun.”、“com.sun.”为前缀的属性是保留的ServletRequest提供下列方法访问属性:getAttributegetAttributeNamessetAttributeHTTP头可以通过HttpServletRequest的下列方法访问HTTP请求的头getHeadergetHeadersgetHeaderNamesgetIntHeadergetDateHeader请求路径requestRUI=contextPath+servletPath+pathInfocontextPath:服务器上的每个Web应用程序被映射到一个URI前缀getContextPathservletPath:处理该请求的servlet的映射路径getServletPathpathInfo:其他路径信息用于标示服务器上的一个文件,servlet可能使用它完成某些功能getPathInfo、getPathTranslated、getRealPath路径实例ContextPath/catalogServletMappingPattern:/lawn/*Servlet:LawnServletServletMappingPattern:/garden/*Servlet:GardenServletServletMappingPattern:*.jspServlet:JSPServletRequestPathPathElements/catalog/lawn/index.htmlContextPath:/catalogServletPath:/lawnPathInfo:/index.html/catalog/garden/implements/ContextPath:/catalogServletPath:/gardenPathInfo:/implements//catalog/help/feedback.jspContextPath:/catalogServletPath:/help/feedback.jspPathInfo:nullResponse对象Response对象封装了服务器返回给用户的所有信息Response可以向浏览器返回任何格式的内容,如纯文本,HTML,图像,二进制文件等通过setContentType设置类型,如:res.setContentType(“text/html”);如何向浏览器返回数据?有两种方式可以向浏览器返回数据:getWriter():返回一个PrintWriter对象,用于返回文本数据getOutputStream():返回ServletOutputStream对象,用于返回二进制数据重定向请求使用另外URL来响应用户的请求将用户引向一个新的位置负载均衡通过sendRedirect(Stringlocation)方法<ahref="/goto/http://www.servlets.com">Servlets.com</a>

publicclassGoToextendsHttpServlet{publicvoiddoGet(HttpServletRequest

req,HttpServletResponse

res)throwsServletException,IOException{//DeterminethesitewheretheywanttogoStringsite=req.getPathInfo();Stringquery=req.getQueryString();//Cutofftheleading"/"andappendthequerystring//We'reassumingthepathinfoURLisalwaysabsoluteStringurl=site.substring(1)+(query==null?"":"?"+query);

res.sendRedirect(url);}}错误处理当错误发生时,我们怎么办?告诉用户什么?错误码?错误页面?问题解释?堆栈信息?如何记录这些问题?记录到文件?服务器日志?发送给用户?忽略?如何恢复?Servlet还能处理随后请求吗?还是需要重新载入?6、SessionHTTP协议的问题HTTP协议是一个无状态协议,这意味:服务端没有内置机制来识别一系列请求来自同一用户两种解决方式:服务端在每个响应(response)中返回所有信息(这些信息和当前用户有关),这些信息将作为下次请求的一部分回送到服务端服务端将状态信息保存在服务端,只返回给用户端一个标示符,标示符作为下次请求的一部分回送到服务端,服务端通过该标示符来定位保存在服务端的信息会话Session指用户的Web浏览器和一个特定Web服务器之间的一组交换会话从最初浏览器调用Web服务器的URL开始,到Web服务器结束会话,这个会话“超时”,或当用户关闭浏览器时结束。Servlet与特定的HTTPURL一一对应,servlet自己是无状态的。每个Servlet类的一个单独实例为它的特定URL处理所有的doGet和doPost请求。每一个HTTP请求都在一个运行该实例的service方法的唯一线程上处理。因为每个servlet实例都是共享资源,你不能在servlet本身存储客户会话数据,会话数据必须存储在servlet之外。CookiesCookie是被Web服务器发送到用户浏览器的一段信息,这段信息以后可以被读回浏览器接收到cookie后,保存。以后,浏览器每次访问该Web服务器上的页面时,将把cookie送回给Web服务器javax.servlet.http.Cookie创建:publicCookie(Stringname,Stringvalue)发送:response.addCookie(Cookiecookie)读回:Cookie[]request.getCookies()Cookie.setMaxAge(intexpiry)Cookie.setPath(Stringuri)URLRewriting用户单击的本地URL被动态修改(或重写),来包含而外的信息http://server/servlet/a 原始URLhttp://server/servlet/a/123 添加extrapathinformationhttp://server/servlet/a?sessionid=123 添加参数http://server/servlet/a;jsessionid=123server-specificURLchange隐藏域添加一些Fields到HTML的form里面,但是并不显示给用户<FORMACTION=“/servlet/abc”METHOD=“POST”>…<INPUTTYPE=hiddenName=“sessionid”value=“123”>…</FORM>示意图Session实现方式应用服务器通过分配一个存储在用户浏览器里的一个专用cookie中的会话标示符来确定那个HttpSession实例属于一个特定的用户。要使会话工作,浏览器必须启用cookie。会话cookie不是永久保存的,在浏览器关闭的时候就会过期。如果用户关闭cookie,另一种做法是:使用URL重写技术存储会话标识符。要使用URL重写,你要使用HttpResponse接口的encodeUrl方法向你的servlet或JSP生成的URL附加一个唯一的会话标识符。不论使用那种存储会话标识符的方法,HttpSession实例最初都保存在应用服务器的JVM的内存中,只有标识符保存在客户机上。HttpSession对象javax.servlet.http.HttpSession创建:request.getSession()添加数据:setAttribute(Stringname,Objectvalue)检索数据:getAttribute(Stringname)删除数据:removeAttribute(Stringname)Session如何工作?当用于第一次访问Web应用程序,用户被指定一个新的HttpSession对象和一个唯一的SessionIDSessionID标示该用户,在随后的请求中,用于匹配该用户和他的HttpSession对象SessionID通过Cookie或URL重新技术实现Cookie:JSESSIONIDURL重写:http://server/servlet/abc;jsessionid=123通过HttpSession.getId()可以获得该ID7、DispatchingRequests概述我们经常需要将request的处理传递给另外一个Servlet我们也经常需要在response中包含其他servlet的输出RequestDispatcher接口用于完成这些任务RequestDispatcherjavax.servlet.RequestDispatcher获取:request.getRequestDispatcher(path)ServletContext.getRequestDispatcher(path)ServletContext.getNamedDispatcher(name)传递请求:forword(request,response)比较:HttpServletResponse.sendRedirect()包含响应:include(request,response)ForwardpublicvoiddoGet(HttpServletRequest

req,HttpServletResponse

res)throwsServletException,IOException{//Wedon'tsetthecontenttypeorgetawriter//GetthestringtosearchforStringsearch=req.getParameter("search");//CalculatetheURLscontainingthestringString[]results=getResults(search);//Specifytheresultsasarequestattribute

req.setAttribute("results",results);//ForwardtoadisplaypageStringdisplay="/servlet/SearchView";

RequestDispatcherdispatcher=req.getRequestDispatcher(display);

dispatcher.forward(req,res);}//Inrealusethismethodwouldcallactualsearchenginelogic//andreturnmoreinformationabouteachresultthanaURLString[]getResults(Stringsearch){returnnewString[]{"http://","http://"};}IncludepublicvoiddoGet(HttpServletRequest

req,HttpServletResponse

res)throwsServletException,IOException{

res.setContentType("text/html");

PrintWriterout=res.getWriter();

out.println("<HTML><HEAD><TITLE>WelcometoNile</TITLE></HEAD>");

out.println("<BODY>");//Showaniteminanonlinecatalog

out.println("Feastyoureyesonthisbeauty:");

RequestDispatcherdispatcher=

req.getRequestDispatcher("/servlet/NileItem?item=0596000405");

dispatcher.include(req,res);

out.println("And,sinceIlikeyou,it's20%off!");

out.println("</BODY></HTML>");}8、Filter&ListenerFilter过滤器(Filter)是转换request或修改response的对象它工作在两个位置:Request到达servlet之前Response离开servlet之后它可以应用于一个特定的servlet或匹配一个URL模式的所有request一个Se

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论