《Servlet培训(共36张).pptx》由会员分享,可在线阅读,更多相关《Servlet培训(共36张).pptx(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m浪潮软件浪潮软件* 技术研究中心技术研究中心2004年年8月月1日日浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m Servlet简单介绍 Servlet Servlet基础基础 Servlet Servlet例子讲解例子讲解 Servlet Servlet高级功能高级功能 实战实战浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t.
2、c o m浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o mServlet简单介绍 历史背景 最初的网页 静态没有搜索引擎,没有客户与服务器之间的交互。 CGI 出现CGI结合html表单,提供了一种机制,实现了客户与服务器的双向交互。 实践中发现的问题: 性能较差,速度慢,灵活性差,可移植性差(尤为重要)。 新技术的出现新技术竞相取代CGI来作为建立动态web站点的标准接口。其中 Servlet 成为一种较为受欢迎的 Internet 开发技术。浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n
3、 g c h a o s o f t. c o mServlet简单介绍 关于Servlet Servlet是用java编写的服务器的软件组件,能够动态的扩展http服务器的功能、工作方式是后台运行,将处理结果返回给用户。 Servlet给出了一个框架,用于创建执行 请求/响应 的应用程序。 浏览器发送一个请求给服务器,服务器把请求送给一个Servlet,这是Servlet就能处理(数据库,运算等)请求,并构造一个合适的响应(通常是html格式数据)返回给客户。 Servlet不只是支持Web服务器,它能够支持所有支持Java和Servlet API的服务器的功能。 ftp,telnet,邮件
4、,和新闻服务器。Servlet是独立于http协议的。浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m 能够以进程运行 传统的传统的CGICGI是一个请求一个进程。是一个请求一个进程。ServletServlet是本身以进程运行,但是对是本身以进程运行,但是对每个请求是在服务器进程空间里独立的线程所处理的。线程之间的轻度每个请求是在服务器进程空间里独立的线程所处理的。线程之间的轻度的上下文关联,比起进程之间的重度的上下文关联开销要小的多。要快的上下文关联,比起进程之间的重度的上下文关联开销要小的多。要快的多。的多。 已
5、编译 与脚本语言不同与脚本语言不同,Servlet,Servlet首先被编译成首先被编译成JavaJava字节代码,提高了速度。字节代码,提高了速度。在编译期间的错误和类型检测,避免的很多问题,易于开发和调试。在编译期间的错误和类型检测,避免的很多问题,易于开发和调试。 防崩溃 Servlet是由Java编写的,是由Java虚拟机执行的。JVM不允许Servlet直接访问内存区。最后一个防止崩溃的措施是JVM会将异常送到调用链的顶端。一直到它被捕获。如果没被捕获,JVM自己会处理。而不是崩溃。浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o
6、 f t. c o m跨平台 因为是用Java编写的,Java本身就是跨平台的。 跨服务器 很多Web服务器支持本地Servlet。那些不支持本地Servlet的服务器,一般会有第3方附加系统可允许服务器加载和运行Servlet持久性 Servlet是可持久使用的对象。 加载之后,一直保持在内存重,直到由明确的指令把它删除调。这样Servlet只要被实例话一次,就可以服务多次请求。动态加载 Servlet能够从本地后网络中动态加载。可以服务启动的时候加载,也可以是等到调用的时候再加载。(资源有时候很少用的可以这样做)浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g
7、 c h a o s o f t. c o m易于部署 Servlet是一个标准的部署模型。可扩展性 多线程 系统开销小。面向对象 Servlet把所有的必要的信息和功能封装到精心设计的对象中。比如 请求,响应,会话,cookies。通过基本的调用,这些对象提供的对信息和功能的基本访问浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o mServletServlet简单介绍简单介绍 Servlet Servlet的优点的优点 (续(续) ) 独立于协议 它是扩展Http服务器的功能,但是不仅仅限于这个协议。相反,Servle
8、t是完全独立于协议之外的。 它可以支持ftp,smtp,pop3,telnet等协议。不管这些是标准的,还是开发者自己创建的。安全性 1:无效内存访问调用和类型严重冲突是不可能的。 2:Servlet利用服务器的安全管理器来实现特定的安全策略的定制和强制实施 3:一个Servlet可以访问每个客户请求中的所有信息。Servlet可以对这些数据进行安全性检查。用Java编写 具有Java的所有优点。浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m Servlet在几乎所有能想象到的方面扩展的服务器的功能。允许客户和服务器
9、之间由真正的双向交互。部分功能: 1:基于客户的实质请求,动态构建并返回一个HTML文件 2:处理用户的html表单输入并返回适当的响应 3:公布由许多用户提交的信息而保障多用户之间的通信 4:提供用户身份验证和其他安全机制 5:与服务器资源如 数据库,其他应用程序和文件交互。以返回由用的信息到客户 6:等等。(你所能想象到的关于增强或者扩展服务器的功能的其他任何方法)浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m现在主要介绍 Servlet结构和语法已经调用它的方式 1 1:基本:基本ServletServlet结
10、构结构 2 2:ServletServlet生命期生命期 3 3:讲解两个:讲解两个ServletServlet示例示例浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m基类 HttpServlet,GenericServlet 我们编写的Servlet功能实现,都需要继承上面的其中一个。他们本身的关系就是 HttpServlet继承了 GenericServlet。所有Servlet至少要实现覆盖(override)一个方法。在其中可实现自定义功能。如果继承 GenericServlet,则定要实现 service(S
11、ervletRequest request,ServletResponse response)如果继承HttpServlet 则可以选择实现 HttpServlet提供的几个方法 或者实现其父类GenericServlet 的 service方法浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m Servlet生命周期:1、装载和激活:依据部署参数装载类、设置上下文参数2、实例化:调用init()3、服务:调用service() 重复服务4、销毁: 调用destory()浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼
12、w w w. l a n g c h a o s o f t. c o m init()Servlet首次加载的时候调用一次。和构造函数类似。用于初始化资源。 service() 每个请求都会调用 destroy() Servlet被卸载时执行的方法。由于释放资源 ServletRequest接口 介绍浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m getParameter(String)setAttribute(String, Object )getAttribute(String ) 用于非http servle
13、t,客户请求信息放到该对象中,传递到servlet的service() 方法中浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m用于非http servlet,用于定制一个响应的必须方法,包含在ServletResponse对象中,这个对象将被传递到servlet的service()方法getWriter();getOutputStream();浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m 我们可以选择实现其中的方法。 service方法是其
14、父类GenericServlet的方法。是必定执行的。如果没有覆盖这个方法,该方法会调用其他一个方法来执行客户请求。(这是基于苦户请求的类型) init() destroy()浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m HttpServletRequest 继承ServletRequest接口 用于http servlet,在客户请求中将传递的信息封装到HttpServlet中,这个对象被传递到servlet的service方法中,之后被传递到doGet(),doPost()方法中。 重要方法:gettCooki
15、es();getSession(); getMethod();getQueryString(); HttpServletResponse 继承ServletResponse接口 用于定制一个响应的必须方法包含在其对象中。同样传递到servlet的service() 方法中,之后被传递到doGet(),doPost()方法中。 重要方法: addCookies(); sendRedirect();/重定向浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m 浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l
16、a n g c h a o s o f t. c o m http:/ip:port/appnane/Time 浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m 线程安全的servelt 过滤器filter http重定向 cookies 状态和会话管理 请求转发,服务器端引
17、用,servlet链接浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m 线程安全 如果应用程序不管在它的进程空间中有多少个并行线程运行,它的行为总是可预知的,那么这个应用程序就是线程安全的。 实现方法: 确保没有线程能够在另外一个线程改变共享资源的过程中读取这些共享资源。这个是很难的。 银行取钱 线程不安全的例子 测试浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m 浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g
18、 c h a o s o f t. c o m synchronized 可以确保代码块每次只被一个线程执行。 java的同步过程是在一个对象上获取互拆锁的过程。以便该对象每次能有一个线程读取和修改。 synchronized(this) synchrinized(Object)/推荐 public synchrinized void service() 一般来说,如果共享变量可以被独立的线程读取和修改或者变量本身不是线程安全的话,我们就应该考虑将它同步。相反 比如 数据库连接池浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c
19、 o m确保一个servlet是线程安全最简单的方法。实现SingleThreadModel接口。不能被并行执行 性能问题servlet实例池 大多数servlet容器试图通过维护一个servlet的实例池来是性能上的问题减到最小。当servlet容器加载实现SingleThreadModel接口的servlet是,为了向并行请求提供服务,该容器会创建一个servlet实例池。池的大小是可以进行配置的。 如果同时到达的请求过多,到实例池被消耗尽,那么多出来的请求就会进行串行化,放到队列中,直到有实例可以执行。通常会产生很大的性能影响。浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w
20、. l a n g c h a o s o f t. c o m 例子 字符集过滤浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m 浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m http客户和服务器之间传送的小块信息。服务器端创建 ,保存在客户端的文本文件,通常不会超过512个字节可以使用HttpServletRequ
21、est/HttpServletResponse或者JavaScript来访问。Cookie对象 封装一组name/value getName();返回名称 get/getValue();取/设 值 get/setMaxAge() 设置cookie的保持时间 0 值删除 get/setVersion() 取/设定版本示例浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m 无状态协议的含义 http是无状态协议,不记忆先前的连接,也不能把客户的请求与另外一个客端区分开。就说这个协议是无状态的。浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m 浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m 浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m谢谢!谢谢!谢 谢!欢迎各位提出宝贵意见!浪 潮 软 件技术研究中心 欲穷千里目,更上一层楼w w w. l a n g c h a o s o f t. c o m演讲完毕,谢谢观看!
限制150内