第14章_Servlet基础知识_第1页
第14章_Servlet基础知识_第2页
第14章_Servlet基础知识_第3页
第14章_Servlet基础知识_第4页
第14章_Servlet基础知识_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

JavaEE基础教程 第14章Servlet基础知识 14 1什么是Servlet 14 2Servlet的生命周期 14 3Servlet体系结构和层次结构 14 4Servlet与JSP之间的关系 14 5主要ServletAPI介绍 14 6在Myeclipse中利用向导创建Servlet 14 7编程示例 网上书店 JavaEE基础教程 2 2020年4月6日星期一 Servlet程序是由服务器调用和执行的Java类 由浏览器内嵌的JVM执行的Java类叫Applet 由Web服务端的JVM执行的Java类则叫Servlet程序 Servlet程序可以看做是运行在服务器上的一个模块 它可以接收从客户端传递过来的数据 对数据进行处理后将结果返回给客户端 当然 这里说的客户端指的是浏览器 14 1什么是Servlet 返回 JavaEE基础教程 3 2020年4月6日星期一 Javax servlet和Javax servlet http包为编写servlet提供了接口和类 所有的servlet必须执行定义了生命周期的servlet接口 执行服务时 你可以使用或者扩展JavaServletAPI提供的GenericServlet类 为了HTTP专有的服务 HttpServlet类提供了一些方法 例如 doGet和doPost 14 1什么是Servlet JavaEE基础教程 4 2020年4月6日星期一 返回 Servlet的主要功能在于交互式地浏览和修改数据 生成动态Web内容 这个过程为 客户端发送请求至服务器端 服务器将请求消息发送至Servlet Servlet生成响应内容并将其传给Server 响应内容通常取决于客户端的请求 服务器将响应返回给客户端 14 1什么是Servlet JavaEE基础教程 5 2020年4月6日星期一 例14 1在Hello jsp页面中输入一个用户的名字 然后提交给HelloServlet 在页面上输出 你好 欢迎使用servlet 这个字符串 程序清单 ch14 HelloServlet java程序清单 ch14 Hello jsp在浏览器地址栏中输入 http localhost 8080 javaEE ch14 hello jsp 14 1什么是Servlet JavaEE基础教程 6 2020年4月6日星期一 运行在Web服务器中的Servlet是Web服务器进程的一部分 Web服务器负责Servlet的生命周期 即加载和实例化 初始化 调用和销毁 14 2 1加载和实例化14 2 2初始化14 2 3服务14 2 4销毁 14 2Servlet的生命周期 返回 JavaEE基础教程 7 2020年4月6日星期一 14 2 1加载和实例化当启动Servlet容器 这里是Tomcat 时 容器首先到发布目录的WEB INF下查找一个配置文件 称为描述符文件 web xml 这个配置文件中有相关的Servlet的配置信息 主要是定义Servlet和对已定义的Servlet的映射 14 2 1加载和实例化 JavaEE基础教程 8 2020年4月6日星期一 Servlet容器会为每个配置自动装入选项 在配置文件中使用了1 的Servlet创建一个实例 而没有设置自动装入选项的Servlet只有在第一次请求时才被创建实例 为了能让容器创建实例 每个Servlet类必须有一个公共的无参数的构造函数 通常 在设计Servlet类时不创建构造函数 而是使用默认的构造函数 14 2 1加载和实例化 JavaEE基础教程 9 2020年4月6日星期一 14 2 2初始化 当Servlet被实例化以后 Servlet容器将调用每个Servlet的init 方法来为实例进行初始化 其中作为init 方法参数的ServletConfig类中定义了初始Servlet需要的所有参数 Init 方法对于一个Servlet只可以被调用一次 初始化的时机是可以通过配置文件进行配置的为了缩短服务器的响应时间 可以在web xml文件中为相应的Servelet添加1进行预先初始化 这样就可以保证在服务器启动时就对这些Servlet进行初始化 JavaEE基础教程 10 2020年4月6日星期一 Servlet被初始化以后 就处于能响应请求的就绪状态 当客户的请求到来时 服务器创建一个请求对象和一个响应对象 每个Servlet的请求都会产生一个ServletRequest对象 Servlet给客户端的响应由一个ServletResponse对象来完成 这两个对象以参数的形式传给service 方法 在service 内 对客户端的请求方法进行判断 如果是以GET方法提交的 则调用doGet 方法处理请求 如果以POST方法提交的 则调用doPost 方法处理请求 14 2 3服务 JavaEE基础教程 11 2020年4月6日星期一 Servlet实例是由Servlet容器创建的 所以实例的销毁也是由容器来完成的 当Servlet容器不再需要某个Servlet实例时 容器会调用该Servlet的destroy 方法 在这个方法内 Servlet会释放掉所有在init 方法内申请的资源 如数据库连接等 一般情况下 如果Servlet容器本身关闭 会释放所有的Servlet实例 但特殊情况下 如系统资源过低或一个Servlet很长时间没有被使用 Servlet容器也会释放这个Servlet 14 2 4销毁 JavaEE基础教程 12 2020年4月6日星期一 Servlet的生命周期如图所示 JavaEE基础教程 13 2020年4月6日星期一 14 3 1Servlet体系结构14 3 2ServletAPI层次结构 14 3Servlet体系结构和层次结构 返回 JavaEE基础教程 14 2020年4月6日星期一 Servlet容器启动会自动加载Servlet HTTPServlet使用HTTP响应标题与客户端进行交互 因此 Servlet容器支持所有HTTP协议的请求和响应 Servlet应用程序体系结构如图14 4所示 14 3 1Servlet体系结构 JavaEE基础教程 15 2020年4月6日星期一 JavaEE基础教程 16 2020年4月6日星期一 Servlet应用程序体系结构如图14 4所示 JavaEE基础教程 17 2020年4月6日星期一 ServletAPI包含于两个包中 即javax servlet和javax servlet http javax servlet包的主要的类的接口如图所示 14 3 2ServletAPI层次结构 JavaEE基础教程 18 2020年4月6日星期一 以上的接口和类的含义如下 InterfaceServlet 此接口定义了所有Servlet必须实现的方法 InterfaceServletResponse 此接口定义了一个对象 由Servlet用于向客户端发送响应 InterfaceServletRequest 此接口定义了用于向Servlet容器传递客户请求信息的对象 InterfaceServletContext 此接口定义了一系列方法 以便Servlet与其运行的环境通信 14 3 2ServletAPI层次结构 JavaEE基础教程 19 2020年4月6日星期一 InterfaceServletConfig 此接口由Servlet引擎用在Servlet初始化时 向Servlet传递信息 GernericServlet 此类实现了Servlet接口 定义了一个通用的 与协议无关的Servlet ServletInputStream 此类定义了一个输入流 用于由Servlet从中读取客户请求的二进制数据 ServletOutputStream 此类定义了一个输出流 用于由Servlet向客户端发送二进制数据 14 3 2ServletAPI层次结构 JavaEE基础教程 20 2020年4月6日星期一 javax servlet http包的主要类和接口如图14 6所示 14 3 2ServletAPI层次结构 JavaEE基础教程 21 2020年4月6日星期一 以上的接口和类的含义如下 InterfaceHttpServletResponse 此接口继承了ServletRequest接口 为HTTPServlet提供请求信息 InterfaceHttpServletRequest 此接口继承了ServletRequest接口 为HTTPServlet提供请求信息 InterfaceHTTPSession 此接口为维护HTTP用户的会话状态提供支持 Cookie 此类用于在Servlet中使用Cookie技术 HttpServlet 此类定义了一个抽象类 它继承自GernericServlet类 应被所有的Servlet继承 14 3 2ServletAPI层次结构 JavaEE基础教程 22 2020年4月6日星期一 从前面的学习我们知道 JSP和Servlet都可以在页面上动态显示数据 那么它们之间是什么关系呢 实际上 Servlet是JSP的基础 也就是说 在执行JSP前要首先将JSP翻译成Servlet 然后再执行Servlet 所以一个JSP对应一个Servlet 14 4Servlet与JSP之间的关系 返回 JavaEE基础教程 23 2020年4月6日星期一 14 5 1HttpServlet类14 5 2ServletRequest接口14 5 3HttpServletRequest接口14 5 4ServletResponse接口14 5 5HttpServletResponse接口14 5 6ServletContext接口 14 5主要ServletAPI介绍 返回 JavaEE基础教程 24 2020年4月6日星期一 HttpServlet类是Servlet容器中最重要的一个类 其主要功能是处理Servlet请求和回应处理结果 HttpServlet首先必须读取Http请求的内容 Servlet容器负责创建HttpServlet对象 并把Http请求直接封装到HttpServlet对象中 这样做大大简化了HttpServlet解析请求数据的工作量 14 5 1HttpServlet类 JavaEE基础教程 25 2020年4月6日星期一 HttpServlet容器响应Web客户请求流程如下 1 Web客户向Servlet容器发出Http请求 2 Servlet容器解析Web客户的Http请求 3 Servlet容器创建一个HttpServletRequest对象 在这个对象中封装Http请求信息 4 Servlet容器创建一个HttpServletResponse对象 14 5 1HttpServlet类 JavaEE基础教程 26 2020年4月6日星期一 5 Servlet容器调用HttpServlet的service方法 把HttpServletRequest和HttpServletResponse对象作为service方法的参数传给HttpServlet对象 6 HttpServlet调用HttpServletRequest的有关方法 获取HTTP请求信息 7 HttpServlet调用HttpServletResponse的有关方法 生成响应数据 8 Servlet容器把HttpServlet的响应结果传给Web客户 14 5 1HttpServlet类 JavaEE基础教程 27 2020年4月6日星期一 HttpServlet类是一个抽象类 当我们创建一个具体的Servlet类时必须继承此类 同时要覆盖HttpServlet的部分方法 如覆盖doGet 或doPost 方法 HttpServlet类的doGet 和doPost 方法的原型如下 publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException publicvoiddoPost HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException 14 5 1HttpServlet类 JavaEE基础教程 28 2020年4月6日星期一 ServletRequest接口是HttpServletRequest接口的父接口 在这个方法中定义了一些获取请求信息的方法 ServletRequest接口主要有以下一些方法 publicStringgetCharacterEncoding 该方法用于获取客户端请求的字符集编码 publicStringgetContentType 该方法用于获取HTTP请求的类型 返回值是MIME类型的字符串 如text html publicvoidsetAttribute Stringname Objecto 该方法用于设定当前HTTP请求过程请求变量的值 第一个参数是请求变量的名称 第二个参数是请求变量的值 如果已经存在同名的请求变量 它的值将会被覆盖掉 14 5 2ServletRequest接口 JavaEE基础教程 29 2020年4月6日星期一 publicObjectgetAttribute Stringname 该方法用于获取当前请求变量的值 参数是请求变量的名称 publicStringgetParameter Stringname 该方法可以获取客户端通过HTTPPOST GET方式传递过来的参数的值 getParameter方法的参数是客户端所传递参数的名称 这些名称在HTML文件标记中使用name属性指定 publicString getParameterValues Stringname 如果客户端传递过来的参数中 某个参数有多个值 如复选框 可通过该方法获得一个字符串数组 14 5 2ServletRequest接口 JavaEE基础教程 30 2020年4月6日星期一 publicStringgetRemoteAddr 该方法返回当前会话中客户端的IP地址 publicStringgetServerName 该方法用于获取服务器的名称 publicintgetServerPort 该方法用于获取服务器响应请求的端口号 以上是ServletRequest接口中的主要方法 除此以外还有很多其它方法 在此不一一介绍 有兴趣的读者可以查看ServletAPI帮助文档 14 5 2ServletRequest接口 JavaEE基础教程 31 2020年4月6日星期一 HttpServletRequest接口继承自ServletRequest接口 自然继承了ServletRequest接口中的所有方法 在HttpServletRequest接口中自定义了一些方法 增加了对HTTP 1 1支持 主要有以下的几个方法 14 5 3HttpServletRequest接口 JavaEE基础教程 32 2020年4月6日星期一 publicCookie getCookies 该方法可以获取当前会话过程中所有的存在Cookie对象 返回值是一个Cookie类型的数组 publicStringgetHeader Stringname 该方法可以获取特定的HTTPHeader的值 publicStringgetMethod 该方法返回客户端发送HTTP请求所有的方式 返回值一般是GET或POST等 publicStringgetServletPath 该方法获得当前Servlet程序的真实路径 14 5 3HttpServletRequest接口 JavaEE基础教程 33 2020年4月6日星期一 ServletResponse接口可以发送MIME编码数据到客户端 服务器在Servlet程序初始化以后 会创建ServletResponse接口对象 作为参数传递给service 方法 该接口主要有以下方法 14 5 4ServletResponse接口 JavaEE基础教程 34 2020年4月6日星期一 PublicStringgetCharacterEncoding 该方法可以获取向客户端发送数据的MIME编码类型 如text html等 PublicServletOutputStreamgetOutputStream 该方法返回一个ServletOutputStream对象 此对象可用于向客户端输出二进制数据 PublicPrintWritergetWriter 该方法可以打印各种数据类型到客户端 PublicvoidsetContentType Stringtype 该方法指定向客户端发送内容的类型 如 setContentType text html 14 5 4ServletResponse接口 JavaEE基础教程 35 2020年4月6日星期一 HttpServlet接口继承自ServletResponse接口 在此基础上 增加了对HTTP 1 1支持的一些方法 在HttpServletResponse接口中主要定义了以下一些方法 Publicvoidaddcookie Cookiecookie 该方法的作用是添加一个Cookie对象到当前会话中 PublicvoidsendRedirect Stringlocation 该方法的作用是使当前的页面重定向到另一年URL 例14 3示例中的Servlet演示了如何在客户端创建cookie和获取cookie值程序清单 ch14 CookieReader java 14 5 5HttpServletResponse接口 JavaEE基础教程 36 2020年4月6日星期一 ServletContext接口定义了一系列方法用于与相应的Servlet容器通信 每个Web应用只有一个Servletcontext实例 通过此接口可以访问Web应用的所有资源 也可以用于不同的Servlet间的数据共享 但不能与其它Web应用交换信息 该接口主要有以下方法 14 5 6ServletContext接口 JavaEE基础教程 37 2020年4月6日星期一 publicServletContextgetContext Stringuripath 该方法返回一个指定URL地址的一个子ServletContext对象 publicSetgetResourcePaths Stringpath 该方法返回存储在Web应用中的所有资源路径的Set 集合 这个Web应用的子路径必须和参数提供的匹配 以 结尾表示一个子目录 以 开头表示一个对于当前Web应用的相对路径 publicStringgetRealPath Stringpath 该方法返回一个指定虚拟路径的真实路径的字符串 publicObjectgetAttribute Stringname 该方法返回保存在Servlet容器中变量的值 如果无该变量则返回null publicvoidsetAttribute Stringname Objectobject 该方法在Servlet容器内创建一个名为name 值为object变量 如果该变量已经存在 则用新值覆盖原来的值 14 5 6ServletContext接口 JavaEE基础教程 38 2020年4月6日星期一 例14 4通过ServletContext输出Web服务的资源列表和服务器的根目录 程序清单 ServletContextSample java 14 5 6ServletContext接口 JavaEE基础教程 39 2020年4月6日星期一 在Myeclipse中提供了创建Servlet模板 可以很方便地创建Servlet 我们通过一个例子说明如何创建Servlet的过程 14 6在Myecl

温馨提示

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

评论

0/150

提交评论