J2EE课件第六讲Servlet.ppt_第1页
J2EE课件第六讲Servlet.ppt_第2页
J2EE课件第六讲Servlet.ppt_第3页
J2EE课件第六讲Servlet.ppt_第4页
J2EE课件第六讲Servlet.ppt_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

第六讲Servlet开发,湖南文理学院计算机学院王蓉,内容回顾,WebLogicServer下的JDBC开发实例JDBC高级话题批量更新PreparedStatement结果集JTAJTA主要接口,本讲教学,教学内容:第十章JavaServlet技术教学目标:6.1Web应用程序6.2Servlet的概念6.3Servlet的生命周期6.4Servlet的工作方式6.5Servlet的编程接口6.6Servlet与客户端的交互教学重点:Servlet的生命周期、Servlet与客户端的交互教学难点:Servlet与客户端的交互的不同方式,6.1Web应用程序,Web应用程序是一个JavaServlet和Jsp的集合,其中还包括其他的辅助类和类库,像Html、XHtml或者XML文档那样的静态资源、图像等等。HTML文件图像ServletJSP页面JavaBeanJar文件Applet标签文件标签库描述符文件部署描述器,6.1.1Web应用程序的结构,Web容器,是Web应用程序的基本运行环境和框架。,Web应用程序,对应一个目录(或者网站),包括html、servlet、applet、jsp、图片等。,6.1.1Web应用程序的结构,WEB-INF,index.html,test.jsp,lib,classes,*.jar,HelloServlet.class,web.xml,显示页面,第三方jar文件,.java编译后的.class文件,程序配置文件,必须的,Web应用程序典型目录结构,WEB-INF文件夹中的内容无法对外发布,6.1.2Web应用程序开发过程,设计目录结构编写Web应用程序代码编写部署描述符编译代码将Web应用程序打包部署Web应用程序执行Web应用程序,6.1.3Web应用程序的部署,Web应用程序打包后成.War文件自动部署WebLogic域为开发模式时,可以直接将Web应用程序复制到域目录autodeploy目录下。手工部署WebLogic域为生产模式时,需要通过管理控制台进行手工部署。,6.2Servlet的概念,什么是Servlet在Web服务器端加载并运行的Java小程序,能够接收Web客户端的请求,并能对Web客户端进行响应,通常是通过HTTP协议进行工作。,请求,响应,Servlet运行于服务器端,6.2Servlet的概念,特点:Servlet容器负责Servlet和用户的通信以及调用Servlet的方法。Servlet和用户的通信采用请求/响应模式。以线程形式处理用户请求。创建并返回基于客户请求的动态HTML页面。可与其它服务器资源(如数据库或基于Java的应用程序)进行通信。,6.2Servlet的概念,一个Servlet在同一时刻只有一个实例,并且它在Sevlet的使用期间将一直保留。,客户A,客户B,线程B,线程A,Web容器,Servlet实例,Web服务器,客户机与Servlet间没有直接的交互,以Web服务器为中介,6.2Servlet的概念,与传统Java应用程序相比较不是从命令行启动。而是由包含JVM的Web服务器进行加载。,6.2Servlet的概念,Servlet与Applet相比较:相似之处:(1)它们不是独立的应用程序,没有main()方法。(2)它们不是由用户调用,而是由另外一个应用程序(容器)调用。(3)它们都有一个生存周期,包含init()和destroy()方法。不同之处:(1)Applet运行在客户端,具有丰富的图形界面。(2)Servlet运行在服务器端,没有图形界面。,6.2Servlet的概念,Servlet的优点(vsCGI和类CGI开发语言)功能强大与客户端交互,直接与服务器交互,与不同的应用程序交换数据,使得与数据库的连接变得十分容易。跨平台性好开发难度低执行效率高性能优化Servlet是开发服务器端应用程序的一个很好选择,Servlet与JSP结合使用,能提供更强大的服务器端功能。,6.3Servlet的生命周期,Servlet的生命周期开始于被装载到Servlet容器中,结束于被终止或重新装入时。加载Servlet初始化阶段服务阶段终止阶段,6.3Servlet的生命周期,注意:并不是为每个请求创建一个Servlet对象,而是根据请求创建不同的HttpServletRequest和HttpServletResponse的对象,然后再调用Servlet的service方法,所有请求共享相同的Servlet。,初始化阶段:Servlet加载之后,调用构造方法进行实例化,然后调用init方法进行初始化。,终止阶段在服务器关闭的时候,或者不再需要Servlet的时候,系统Servlet的destroy()方法来释放资源。,6.3Servlet的生命周期,加载Servlet当服务器第一次启动的时候或者第一次访问Servlet的时候,Web容器加载Servlet。在下列情形下Servlet容器装入Servlet在Servlet容器启动后,客户首次向Servlet发出请求。Servlet容器启动时。Servlet的类文件被修改后,重新加载。,6.3Servlet的生命周期,服务阶段如果容器接收到对此Servlet的请求时,容器则创建HttpServletRequest(请求信息)和HttpServletResponse(响应信息)的对象。然后把这两个对象作为参数调用Servlet的service()方法。如果请求方式是get调用doGet()方法,如果请求方式是post则调用doPost()方法。方法执行完,这次请求就结束了,等待新的请求。,6.3Servlet的生命周期,GET方法用于检索信息(如文档、图表或数据库请求结果)请求的页面可以被设置为书签和使用电子邮件发送请求信息作为查询字符串发送,POST方法用于发送敏感信息(如信用卡号)或要保存到数据库中的信息请求的页面不能设置为书签或不能通过电子邮件发送发送的数据没有大小限制,6.3Servlet的生命周期,可以把方法写在doGet()方法中,在doPost()方法中调用执行,这样,无论你提交的是post还是get方法都可以执行。publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletExceptiondoGet(request,response);/调用doGet()方法另外,HttpServlet处理客户端请求方式还有doPut、doDelete、doTrace、doHead、doOptions,但使用的比较少。,6.4Servlet的工作方式,Servlet工作方式,HTTP请求,容器,请求,响应,1,2,Servlet实例,Servlet,通过URL找到,执行,service(请求,响应),3,4,doGet(请求,响应),5,响应,6,6.4Servlet的工作方式,Servlet基本工作流程客户机将请求发送到服务器。服务器上的Web容器实例化(装入)ServletWeb容器将请求信息发送到Servlet。Servlet创建一个响应,并将其返回到Web容器。Web容器将响应发回客户机。服务器关闭或Servlet空闲时间超过一定限度时,调用destroy()方法退出。,WebClient,ServletContainer,HttpServletRequest,HttpServletResponse,HttpServlet,1.sendHTTPrequest,2.parseHTTPrequest,3.newInstance,4.newInstance,5.callservicemethod,7.getrequestinformation,7.outputresponseinformation,8.sendHTTPresponse,Servlet容器响应Web客户请求的时序图,6.5Servlet的编程接口,Servlet框架核心是javax.servlet.Servlet接口,所有的Servlet都必须实现该接口。与Servlet实现相关与Servlet配置相关与Servlet异常相关与请求和响应有关会话跟踪Servlet上下文Servlet协作过滤器其他类,6.5.1与Servlet实现相关,在定义Servlet时要继承的类或实现的接口Servlet接口GenericServlet类HttpServlet类用户开发自己的Servlet类时,必须扩展两个类中的一个,service方法为抽象的方法,该方法的声明形式为:publicabstractvoidservice(ServletRequestreq,ServletResponseres)throwsservletException,IOException,6.5.1与Servlet实现相关,如果Servlet类扩充HttpServlet类,通常不用实现service()方法,因为HttpServlet类已经实现了service方法,该方法的声明形式为:protectedvoidservice(HttpServletRequestreq,HttpServletResponseres)throwsservletException,IOExceptionHttpServlet的service方法首先从HttpServletRequest对象中获取HTTP请求方式的信息,然后再根据请求的方式调用相应的方法。例如,如果请求的方式为GET,那么调用doGet()方法;如果请求的方式为POST,那么调用doPost()方法。,6.5.2开发一个简单的Servlet实例,创建Servlet组件过程程序员需要编写Servlet并将其部署到相应的容器中。建立一个eb应用程序:建立Web应用程序的目录结构编写Servlet组件编译:Servlet是Java类,需要进行编译才能使用,放在classes目录下。定义web.xml部署执行,如何访问Servlet,HelloServletedu.j2ee.HelloServletHelloServlet/HelloServlet,两个名称必须相同,为了方便使用Servlet,取个别名,完整的包名+类名,访问Servlet的URL,在web.xml文件中配置Servlet,web.xml文件常见错误,servlet-mapping中的name与servlet-name中的name不一致添加多个mapping映射,Helloservlety2javaee.sg.ch02.HelloServletHelloServlet/HelloServlet,请指出哪里有错误?,servlet-name不一致,HelloServlety2javaee.sg.ch02.HelloServletHelloServlet/HelloServletHelloServlet/HelloServlet2,多余的mapping,请指出哪里有错误?,6.5.2开发一个Servlet实例,编写Servlet程序可以直接实现interface,但因为目前大多数Servlet是针对HTTP协议的Web服务器,所以通过从HttpServlet继承来编写Servlet程序,根据请求方式是GET还是POST,覆盖doGet、doPost方法之一或全部。创建用户自己的Httpservlet,通常涉及以下4个步骤扩展Httpservlet抽象类。覆盖Httpservlet抽象类的部分方法。获取HTTP请求信息。生成HTTP响应结果。,6.5.2开发一个Servlet实例,importpublicclassFirstServletextendsHttpServletprivatestaticfinalStringCONTENT_TYPE=text/html;charset=gb2312;publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletExceptionresponse.setContentType(CONTENT_TYPE);PrintWriterout=response.getWriter();out.println();out.println(第一个Servlet测试程序);out.println();out.println(第一个Servlet测试程序);out.println();publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptiondoGet(request,response);,覆盖部分方法,扩展HttpServlet,获取HTTP请求信息生成HTTP响应结果,6.6Servlet与客户端的交互,Servlet能够通过request对象获取客户端的请求信息,并能够访问session中的信息,还能对cookie进行操作。此外,Servlet可以通过response对客户端进行响应,并能够把请求转发给其他的文件处理。,6.6.1通过request对象获取请求信息,HttpServletRequest是一个接口,能够为HttpServlet提供请求信息。通常由服务器根据请求信息他创建该接口的对象,然后把该对象作为参数调用service方法。获得请求中参数值:getParameter(java.lang.Stringname)getParameterValues(java.lang.Stringname)前者获取单值表单元素的值后者用于获取多值表单元素的值,例如复选框,6.6.1通过request对象获取请求信息,/ProcesstheHTTPGetrequestpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptionStringvName=request.getParameter(name);if(vName=null)vName=;out.println(Theservlethasreceivedaparam.TheNameis+vName+.);out.close();,6.6.1通过request对象获取请求信息,1、HTTP协议有什么特点?无状态2、什么是无状态?,访问,访问,我刚刚被访问了两次,但是我不知道,是一个人访问了两次?还是两个人各访问一次,HTTP协议不记录用户的信息,6.6.1通过request对象获取请求信息,HTTP协议HTML(HypertextMarkupLanguage)即超文本标记语言,是一种无状态的协议,客户端每次打开一个Web页面,它就会与服务器建立一个新的连接,发送一个新的请求到服务器,服务器处理客户端的请求,返回响应到客户端,并关闭与客户端建立的连接。当客户端发起新的请求,那么它重新与服务器建立连接,因此服务器并不记录关于客户的任何信息。,对Session进行操作,3、如何显示张三和李四分别访问某一网页多少次?,请求,请求,响应,响应,张三,李四,为了区分用户,需要为不同用户作登记,6.6.2对Session进行操作,购买2个商品,张三,李四,4、在线购物系统中如何对用户进行区分?,购买3个商品,一共购买了5个商品,钱应该从谁的帐户上扣呢?,6.6.2对Session进行操作,5、购物系统需求描述,查看所有商品,选择商品放入购物车,继续购物,结账,满载而归,6.6.2对Session进行操作,Web程序能不能像银行卡号那样,根据卡号锁定一个用户呢?,请求,响应,响应的时候,由服务器给我分配一个唯一ID号,这样就能区别不同的用户了,再次请求的时候,我带着ID号,告诉服务器“我是谁”,如何标识用户?,6.6.2对Session进行操作,HttpSession对象服务器为每个会话创建一个HttpSession对象每个会话对象都有一个唯一的ID把用户的数据保存在相应的HttpSession对象内,第一次请求,响应,服务器创建一个HttpSession对象并把该对象的ID返回给用户,同时,服务器在内存中开辟一空间,用来保存该对象数据,把ID发送给客户端,第二次请求把ID一起发送给服务器,根据ID号服务器寻找内存中相应的数据,6.6.2对Session进行操作,请求1,请求2,请求n,.,什么是会话当前浏览器与服务器间多次的请求、响应关系,被称作一个会话会话能够在多个页面之间共享信息。,6.6.2对Session进行操作,publicHttpSessiongetSession();publicHttpSessiongetSession(booleanvalue);,会话的创建使用HttpServletRequest的getSession()方法创建会话,语法如下:,会话的使用使用HttpSession接口的方法,进行保存数据:取出数据:,publicvoidsetAttribute(Stringparam,Objectvalue);publicObjectgetAttribute(Stringparam);,获取session对象的方法,getSession(),getSession(booleanbool),getSession(true),true,false,返回与当前关联的会话,如果没有就创建后将其返回,返回与当前关联的会话,如果没有返回null,使用时,将其转换成原来数据类型,6.6.2对Session进行操作,session对象的存在周期session的创建浏览器访问服务器时,服务器为每个浏览器创建不同的session对象session的关闭调用session.invalidate()方法,使session对象失效访问时间间隔大于非活动时间间隔,session对象失效关闭浏览器时,session对象失效,请求,在内存开辟空间保存数据信息,清空内存内当前浏览器相关数据信息,6.6.2对Session进行操作,publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptionHttpSessionsession=request.getSession(true);Objectcount=session.getAttribute(COUNTER);intcounter=0;if(count=null)counter=1;/将第一次计数存入sessionsession.setAttribute(COUNTER,newInteger(1);elsecounter=(Integer)count).intValue();counter+;/计数加一/将计数存入sessionsession.setAttribute(COUNTER,newInteger(counter);,取出session对象内存储的值,把数据存储在session对象内,记录不同用户的访问次数,获得session对象,6.6.2对Session进行操作,在登录页面用户已录入用户名,现编写一个Servlet接收该数据,并把用户名值保存在HttpSession对象内,publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptionStringuserName=request.getParameter(userName);HttpSessionsession=request.getSession();if(userName!=null.,6.6.3通过response对象对用户进行响应,HttpServletRequest是一个接口,主要定义的是与响应相关的方法。设置响应内容的MIME类型response.setContentType(CONTENT_TYPE);创建输出流对象PrintWriterout=response.getWriter();

温馨提示

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

评论

0/150

提交评论