资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,主讲:李俊青,第,6,章,JavaServlet,理论,:,Servlet,技术、,Servlet,的应用、生命周期和各种常用的类接口,技能 很好地处理,Servlet,与,JSP,之间的关系,灵活应用,JSP,开发网站的两种模式,要求 掌握,Servlet,的结构、接口方法和生命周期等概念,学会使用,Servlet,进行编程,与表单交互、控制会话等,11/27/2024,2,6.1,Servlet,技术概述,什么是,Servlet,Servlet,是运行在服务器端,用来响应客户端请求的,java,代码模块。,Servlet,并没有跟客户端的特定协议绑定,但是通常使用的是,HTTP,,通常所用的,Servlet,指的就是“,HTTP,Servlet,”,。,Servlet,在,javax.servlet,(基本的,Servlet,框架)和,javax.servlet.http,(为,Servlet,响应,HTTP,请求的,Servlet,框架的扩展)包中作为,Java,的标准扩展类使用。,Servlet,是一种独立于平台和协议的服务器端的,Java,应用程序,可以生成动态的,Web,页面。,Servlet,是位于,Web,服务器内部的服务器端的,Java,应用程序,与传统的从命令行启动的,Java,应用程序不同,,Servlet,由,Web,服务器进行加载,该,Web,服务器必须包含支持,Servlet,的,Java,虚拟机。,Servlet,运行在,Web,服务器端,它是一个可信赖的程序,不受,Java,安全性的限制,拥有和普通,Java,应用程序一样的权限。,Servlet,是,CGI Script,的一种替代技术,由于,Servlet,在性能、可移植性、代码重用等方面比,CGI,具有显著的优势,因此在未来的技术发展过程中,,Servlet,有可能彻底取代,CGI,。,11/27/2024,3,6.1,Servlet,技术概述,Java,Servlet,及其特点,Servlet,是,Java,技术对,CGI,编程的回答。,Servlet,程序在服务器端运行,动态地生成,Web,页面。与传统的,CGI,和许多其他类似,CGI,的技术相比,,Java,Servlet,的特点:高效 方便 功能强大 可移植性好 节省投资,11/27/2024,4,6.1,Servlet,技术概述,编译,Servlet,文件所需要的环境,将,servlet-api.jar,和,jsp-api.jar,加入,CLASSPATH,如果不设置,CLASSPATH,,,Java,在当前目录和标准系统库中寻找类;则将,servlet-api.jar,;,jsp-api.jar,放在,JDK,安装目录下的,jre,libext,目录下。,servlet-api.jar,、,jsp-api.jar,的获取:,Tomcat5.0.25,版本下,在,Tomcat,安装目录下的,commonlib,目录下。,11/27/2024,5,6.1,Servlet,技术概述,开发,Servlet,的过程,编写,Servlet,代码编写,HelloServlet.java,实现如下功能:当用户通过浏览器访问该,Servlet,时,该,Servlet,向客户端浏览器返回一个,HTML,页面。文件,HelloServlet.java,编译,Servlet,代码利用,JDK1.3,对,Servlet,代码进行编译,其命令行为,:c:,javac,HelloServlet.java,进行编译时必须保证,JDK,的,JavaServlet,类已经包含在,CLASSPATH,中,将,.class,代码放置在虚拟目录下的,WEB-INF/classes/,目录下。,11/27/2024,6,6.1,Servlet,技术概述,开发,Servlet,的过程,编写,XML,配置文件:在,WEB-INF,目录下新建或修改,web.xml,文件,应添加的内容为:,HelloServlet,HelloServlet,HelloServlet,/,HelloServlet,11/27/2024,7,6.1,Servlet,技术概述,开发,Servlet,的过程,测试:,现在可以对,HelloServlet,进行测试了,打开浏览器,键入,http:/127.0.0.1:8080/,虚拟目录名,/HelloServlet,中文问题将,HelloServlet.java,中加入要显示的中文,并重新进行编译为:,c:,javac,encoding ISO8859_1,HelloServlet.java,11/27/2024,8,6.1,Servlet,技术概述,Servlet,的接口,在,Servlet,API,中最重要的是,Servlet,接口(,interface,),所有的,Servlets,都必须执行该接口,途径有:是直接实现该接口;是通过扩展类(,class,)当一个,servlet,接收来自客户端的调用请求,它接收两个对象:,ServletRequest,可以获取到这样一些信息,如由客户端传送的阐述名称,客户端正在使用的协议,产生请求并且接收请求的服务器远端主机名。它也提供获取数据流的,ServletInputStream,这些数据是客户端引用中使用,HTTP POST,和,PUT,方法递交的。一个,ServletRequest,的子类可以让,servlet,获取更多的协议特性数据。,ServletResponse,ServletResponse,接口给出相应客户端的,Servlet,方法。它允许,Servlet,设置内容长度和回应的,MIME,类型,并且提供输出流,ServletOutputStream,,通过编写者可以发回相应的数据。,ServletResponse,子类可以给出更多,protocol-specific,内容的信息。这个,ServletRequest,类概括从客户端到服务器之间的联系,而,ServletResponse,类概括从,Servlet,返回客户端的联系。,11/27/2024,9,6.2,Servlet,与,JSP,之间的关系,JSP,主要关注于,HTML,(或者,XML,)与,Java,代码的结合,以及加入其中的,JSP,标记。如果一个支持,JSP,的服务器遇到一个,JSP,页面,它首先查看该页面是否被编译成为一个,Servlet,。由此可见,,JSP,被编译成,Servlet,,即被转变为纯,Java,,然后被装载入服务器执行。,JSP,引擎基本上就是架构在,Servlet,引擎之上,以,Servlet,的形式存在的,利用,Servlet,引擎或者,Content Type,对映,把,JSP,文件转译成,Servlet,的源文件,调用,Java,编译器,编译成,Java,执行码,以,Servlet,方式加以运行。由于上述原因,第一次,JSP,执行需要花较长的时间,而后,JSP,执行时,直接运行,Java,的执行码,从而大大提高的,JSP,的执行速度,这正是,JSP,的优点之一。,11/27/2024,10,6.3,Servlet,应用范围及其缺陷,从网络三层结构的角度看,一个网络项目最少分三层:数据层、应用层和表示层。,Servlet,用来写应用层是很强大的,但是对于写表示层就很不方便。,JSP,则主要是为了方便写表示层而设计的,当然也可以写应用层。写惯了,ASP,、,PHP,、,CGI,的朋友,经常会不自觉地把表示层和应用层混在一起。比如把数据库处理信息放到,JSP,中,其实,它应该放在应用层中。,JSP,中应该仅仅存放与表示层有关的部分,也就是说,只放输出,HTML,网页的部分。而所有的数据计算、数据分析、数据库连接处理,统统是属于应用层,应该放在,Java Beans,中。通过,JSP,调用,Java Beans,,实现两层的整合。综上所述,,Servlet,是一个不完善的产品,写应用层很好,写表示层就逊色许多了,并且两层混杂。,11/27/2024,11,6.4,Servlet,的生命周期,Servlet,的生命周期始于将它装入,Web,服务器运行时,在终止或重新装入,Servlet,时结束。是当服务器装载运行,servlets,,接收来自客户端的多个请求并且返回数据给客户端,然后再删除移开,servlets,。,初始化时期,Servlet,的执行时期,Servlet,结束时期,11/27/2024,12,6.5,Servlet,的常用类接口,在,Servlets,API,中,最常用的是,Servlet,interface,,所有的,servlets,都执行这个接口。这些,servlets,或者是直接执行,Servlet,接口,或者是通过扩展类执行。,11/27/2024,13,6.5,Servlet,的常用类接口,HttpServlet,通常编写的,Servlet,类,一般从,Javax,包中的,HttpServlet,类继承而来,在,HttpServlet,中加入了一些附加的方法,这些方法可以协助处理,HTTP,基本请求,这些基本请求由,HttpServlet,类中的方法,service(),自动地调用。这些方法有:,doGet,用来处理,HTTP,的,GET,、头部,HEAD,请求,doPost,用来处理,HTTP,的,POST,请求,doPut,用来处理,HTTP,的,PUT,请求,doDelete,用来处理,HTTP,的,DELETE,请求,doHead,用来处理,HTTP,的,HEAD,请求,doOptions,用来处理,HTTP,的,OPTIONS,请求,doTrace,用来处理,HTTP,的,TRACE,请求,11/27/2024,14,6.5,Servlet,的常用类接口,HttpServletRequest,HttpServerletRequest,被传到,service(),方法用来提供客户的请求信息。,HttpServerletRequest,接口可以获取由客户端传送的阐述名称,也可以获取客户端正在使用的通信协议,也可以获取产生请求并且接收请求的远端主机名和,IP,地址等一些信息。,HttpServerletRequest,接口提供获取数据流的,Servlet,、,ServletInputStream,方法,这些数据是客户端引用的,POST,和,PUT,方法提交的。一个,ServerletRequest,的子类可以让,Servlet,获取更多的协议特性数据。,11/27/2024,15,6.5,Servlet,的常用类接口,HttpServletResponse,HttpServerletResponse,用来向客户端发送响应信息。,HttpServerletResponse,接口给出相应客户端的,Servlet,方法,它允许,Servlet,设置内容长度和回应的,MIME,类型,并且提供输出流的,ServletOutputStream,。,HttpServerletRequest,子类可以给出更多的,protocal,-specific,容量的信息。,11/27/2024,16,6.5,Servlet,的常用类接口,HttpSession,HttpSession,接口被,Servlet,用来实现在,HTTP,客户端和,HTTP,会话两者之间的关联。这种关联可能在多处连接和请求中持续一段给定的时间。,session,用来在无状态的,HTTP,协议下越过多个请求页面来维持状态和识别用户。一个,session,可以通过,Cookie,或重写,URL,来维持。,11/27/2024,17,6.6 JSP,内置对象与,Servlet,中类的对应关系,在,JSP,提供了的内置对象中,其中有,3,个内置对象对应于,Servlet,API
展开阅读全文