02Servlet模型.ppt_第1页
02Servlet模型.ppt_第2页
02Servlet模型.ppt_第3页
02Servlet模型.ppt_第4页
02Servlet模型.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

第二章 Servlet模型 本章要点 Servlet接收HTTP请求Servlet响应HTTP请求Servlet生命周期Servlet请求资源的跳转与包含Servlet应用示例 Servlet jsp网络拓扑图 涉及到的技术HtmlJavascriptflash Javabean servlet jspEjb structs hibernatespring jdbc 显示层 美工 逻辑层 程序员 数据层 数据库分析员 Servlet接收HTTP请求 对于请求而言客户端主要通过以下几种方式给服务器端发送请求 用户点击HTML页面上的一个超链接通过点击一个表单的提交按钮提交表单用户在URL地址栏直接键入服务器端的URL地址浏览器默认是通过GET方式发送的 当然对于第二种表单的提交我们可以改变其提交方式为POST 格式如下 Servlet处理HTTP请求的流程 Servlet处理HTTP请求的流程 续 Servlet类中将会根据不同的HTTP提交方式 执行相应的doXXX 方法 具体定义为 比如以HTTPGET方式提交的 将会执行doGet 方法 同样POST方式将会执行doPost 方法 其中方法的参数request和response对象是由Servlet容器创建的 protectedvoiddoXXX HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException 了解ServletRequest ServletRequest是定义在java servlet包中的一个接口类 ServletRequest类与具体的协议无关 从客户端发送的请求信息将会被封装在ServletRequest对象当中 通常我们可以通过下面的方法获取封装的数据 publicStringgetParameter Stringname publicString getParameterValues Stringname publicjava util EnumerationgetParameterNames 了解HttpServletRequest HttpServletRequest是ServletRequst的扩展子类 它添加了一些专用于HTTP协议的方法 HttpServletRequest对象由Servlet容器为我们创建 并通过doXXX 方法传递给Servlet使用 我们可以在HttpServletRequest对象中获取大量关于HTTP请求的相关信息 了解HttpServletRequest 续 publicStringgetMethod 通过这个方法可以获取HTTP请求类型的名字 例如GET或POST等 publicStringgetHeader Stringname 此方法返回指定标题名字所对应的值 例如 Stringhost request getHeader host publicEnumerationgetHeaderNames 获取所有头信息中标题名 具体对应的值可以通过上面的方法获取 publicEnumerationgetHeaders Stringname 获取指定标题名的所有对应值 获取分析HTTP请求的头信息 我们现在利用HttpServletRequest中的一些针对HTTP协议的专用方法来分析一下基于HTTP协议请求的头信息 HTTP请求示例 我们综合运用一下上面学到的知识 接收并处理一个由HTML页面发送过来的请求见例2 2 Servlet响应Http请求 Servlet主要通过HttpServletResponse对象封装对用户的响应信息 再由Web服务器发送给客户端 理解ServletResponse 当Servlet接收到请求后 如果需要返回一定的数据信息给客户端 那么封装返回的数据需要使用ServletResponse对象 ServletResponse是定义在javax servlet包中的一个接口 使用此ServletResponse对象可以获得用于发送给客户端数据的输出流 设定返回内容的类型和长度 以及设定返回文本的字符编码等 理解ServletResponse 续 在ServletResponse类中我们可以通过setContentType 方法和setContentLength 方法设定返回内容的类型和长度 具体方法声明如下 设定内容为 text html charset GB2312 可以使用response setContentType text html charset GB2312 返回的是一个pdf文件我们可以这样设置response setContentType application pdf 表明返回的文件类型是PDF格式 publicvoidsetContentType StringcontentType publicvoidsetContentLength intcontentLength 理解ServletResponse 续 不管我们返回给客户端的信息是一些简单的文本还是一些复杂的流式文件 都需要获取输出流对象 在Servlet中可以通过ServletResponse的如下两种方法获取一个输出流 返回一个pdf文件 见例2 3返回一个文本信息 见例2 4 publicServletOutputStreamgetOutputStream throwsIOExceptionpublicPrintWritergetWriter throwsIOException 掌握HttpServletResponse HttpServletResponse是ServletResponse的一个子接口 定义在javax servlet http包中 它添加了一些针对HTTP协议响应的处理方法 比如设置响应的HTTP消息头 我们可以使用setHeader方法 方法声明如下 当然如果一个消息头名对应有多个值 我们可以通过如下方法进行添加 publicvoidsetHeader Stringheader Stringvalue publicvoidaddHeader Stringheader Stringvalue 掌握HttpServletResponse 续 HttpServletResponse提供了一个sendError 方法 用来向客户端发送错误信息 这对调试程序有很大帮助 调用方式有下列两种 常见的HTTP错误代码与表示的意义如表所示 publicvoidsendError intcode publicvoidsendError intcode Stringmsg 掌握HttpServletResponse 续 如果我们需要让客户端浏览器跳转到别的网页资源 可以使用sendRedirect 方法 方法声明如下 其中的参数url即是我们希望浏览器转向的资源地址 具体关于重定向的方法使用我们将会在后面讨论 如果我们需要在客户端设置一个cookie 我们可以使用addCookie 方法 具体的cookie定义与使用请参看第五章关于cookie的说明 publicvoidsendRedirect Stringurl publicvoidaddCookie Cookiecookie 掌握HttpServletResponse 续 HttpServletResponse的另一个重要的方法是 encodeURL与encodeRedirectURL 这两个方法主要是用在客户端浏览器不支持cookie时 当我们需要使用session来存储数据时 必须使用此方法来对url进行编码 关于session的相关信息请读者参阅第五章session的使用说明 publicStringencodeURL Stringurl publicStringencodeRedirectURL Stringurl Servlet生命周期 Sevlet对象的生成与装载 当开发完毕具体的Servlet类 并且部署到Web服务器上以后 是由Web服务器为我们装载并创建Servlet对象的 一般来说 Servlet可以在三种情况下装载到内存并被实例化 Web服务器启动时 系统管理员向Web服务器部署Servlet应用时 通过浏览器第一次访问Servlet时 Web服务器装载一个Servlet对象时 需要明确知道Servlet的类名 比如一个名为myweb HelloServlet的类 当服务器装载其到内存并创建对象时将会使用Class forName myweb HelloServlet newInstance 方法 采用这种方法创建对象需要类中有个不带参数的构建器 所以我们在开发Servlet时需要提供这样的构建器 或者干脆不写构建器 采用默认的构建器即可 Servlet的init 方法 一旦Web服务器创建完servlet对象以后 将会立即调用Servlet的init 方法 对servlet进行初始化 所以就算我们在Servlet中使用了默认的构建器 我们对Servlet的初始化仍然可以放到init 方法中 参数ServletConfig 代表的是配置信息 即在web xml中配置的信息 init方法的具体声明如下 publicvoidinit ServletConfigconfig throwsServletExceptionpublicvoidinit throwsServletException ServletConfig ServletConfig对象包含了用于初始化的参数 它是在容器调用init 方法时传递的参数 我们可以通过以下ServletConfig中的以下方法获取初始化参数以及它们的值 publicjava util EnumerationgetInitParameterNames publicStringgetInitPatameter Stringname Servlet的service 方法 当Servlet初始化完毕以后 Servlet对象就可以响应并处理用户请求了 在Servlet的生命周期中 大部分的时间是用来处理请求的 当一个请求到来时 Web服务器将会调用Servlet对象的service方法 service方法声明如下 service 方法将会区分不同的HTTP请求类型 调用相应的doXXX 方法进行处理 比如请求的是HTTPGET方法 将会调用doGet 而POST则会调用doPost publicvoidservice ServletRequestrequest ServletResponseresponse Servlet的destroy 方法 当Servlet容器决定卸载一个Servlet时 比如 由于Web服务器考虑到Web应用的性能问题或者管理员发送卸载请求 或者系统将要关闭 Web服务器将会卸载容器中的Servlet对象 卸载之前将会调用Servlet的destroy 方法 一般来说 Servlet的destroy 方法是用来释放Servlet所持有的资源 Servlet请求重定向 有时候我们在程序中需要把客户的请求跳转到服务器上的另一个资源或者其他服务器上的资源 这种情况下需要使用请求重定向技术 在Servlet中我们需要使用HttpServletReponse对象的sendRedirect 方法 此方法定义为 参数url表示想要跳转资源的相对地址或者其他服务器上的绝对地址 例如 publicvoidsendRedirect Stringurl response sendRedirect Servlet请求重定向 续 Servlet请求转发 Servlet请求转发与Servlet请求重定向较为相似 是把当前的请求转发到另外一个资源 在Servlet中是使用一个RequestDispatcher对象的forward方法来转发请求资源的 具体的方法定义为 publicvoidforward HttpServletRequestrequest HttpServletResponseresponse Servlet请求转发 续 通过request获取RequestDispatcher对象 没有 表示相对于请求上下文的路径RequestDispatcherrs request getRequestDispatcher index htm 转向特定资源rs forward request response 在Servlet中获取ServletContext对象ServletContextservletContext getServletContext 通过servletContext获取RequestDispatcher对象 含有 表示Web应用上下文路径RequestDispatcherrs servletContext getRequestDispatcher index htm rs forward request response Servlet请求转发 续 转发与重定向的区别 重定向将产生两个不同的请求 而请求转发则是同一个请求 重定向可以定向到任意资源 而请求转发则必须转发到同一应用下的其他资源 重定向客户的地址栏中显示新的地址

温馨提示

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

评论

0/150

提交评论