《Servlet核心技术》PPT课件.ppt
《《Servlet核心技术》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《Servlet核心技术》PPT课件.ppt(52页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第第6章章 Servlet核心技术核心技术 6.1Servlet基础6.2Servlet生命周期6.3使用Servlet6.4获取运行环境信息6.5Servlet中会话设置6.6Servlet中异常设置6.7Servlet过滤器6.8Servlet监听器6.1 Servlet基础基础 6.1.1Servlet技术功能6.1.2Servlet特征Servlet是1997年由Sun和其它的几个公司提出的一项技术,使用该技术能将HTTP请求和响应封装在标准Java类中来实现各种Web应用方案。Servlet是使用Java语言编写的服务器端程序,它能够接受客户端的请求并产生响应。与常规的CGI程序相比
2、,Servlet具有更好的可移植性和安全性、以及更强大的功能等特点。返回Servlet是对支持Java的服务器的一般扩充,它最常见的用途就是扩展Web服务器,即:每当请求到达服务器时,Servlet负责对请求做出相应的响应。Servlet最常见的功能包括以下几种:Servlet技术功能技术功能 基于客户端的响应,给客户端生成并返回一个包含动态内容的HTML 页面。可生成一个HTML片段,并能将其嵌入到现有HTML页面中。能够在其内部调用其它的Java资源并与多种数据库进行交互。可同时与多个客户机进行连接,包括接收多个客户机的输入以及并将 结果返回给多个客户机。在不同的情况下,可将服务器与App
3、let的连接保持在不同的状态。对特殊的处理采用MIME类型过滤数据。将定制的处理提供给所有服务器的标准例行程序。例如,Servlet可以 修改如何认证用户。返回Servlet是传统CGI的替代品,它能够动态的生成Web页面,与其他的动态网页编程技术相比,Servlet具有以下几点非常明显的特征:Servlet特征特征(1)高效性传统CGI中,对每个请求都要启动一个新的进程,启动进程所需要的开销在有些情况下就可能很大,而Servlet在服务器上仅有一个Java虚拟机在运行,每个Servlet请求都作为持久性进程中的一个单独线程得以执行,相对于传统CGI而言,显然效率要高得多。方便性Servlet
4、提供了大量的实用工具例程。例如,自动解析和编码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话等等。功能强大许多传统CGI程序很难完成的工作使用Servlet就可轻松完成。例如Serlet能够直接和Web服务器交互,而普通的CGI程序则不能。Servlet还能够在各个应用程序之间共享数据,使得数据库连接池之类的功能很容易实现。Servlet特征特征(2)跨平台性Servlet采用Java语言编写,在有Java运行环境的任何操作系统上都可运行。成本低许多廉价甚至免费的Web服务器可供个人或小规模网站使用,而且对于现有的服务器,即使它不支持Servlet,要加上这部分功能也往往是
5、免费的(或只需要极少的投资)。可扩展性Servlet采用Java语言编写,而且得到了广泛的支持,因此基于Servlet的应用具有很好的扩展性。返回6.2 Servlet生命周期生命周期 6.2.1加载并初始化Servlet6.2.2处理客户端请求6.2.3卸载ServletServlet的生命周期如图所示:返回加载并初始化加载并初始化Servlet Servlet加载和实例化是由容器来负责完成的。加载和实例化Servlet其实指的是将Servlet类载入JVM(Java虚拟机)中并初始化。将Servlet类载入JVM中的时机存在一下3种可能:当服务器启动时。浏览器第一次接收请求时。根据管理员要
6、求。当服务器启动时,首先容器会定位Servlet类,然后加载它,容器加载Servle类以后,就会实例化该类的一个或者可能多个实例,Servlet被实例化后,容器会在客户端请求以前首先初始化它,其方式就是调用它的init()方法,并传递实现ServletConfig接口的对象。执行完init()方法后,Servlet就会处于“已初始化”状态。在初始化阶段,Servlet实例可能会抛出ServletException异常或UnavailableException异常。返回处理客户端请求处理客户端请求 Servlet初始化完毕以后,就可以用来处理客户端的请求了。当客户端发来请求时,容器会首先为请求创
7、建一个ServletRequest对象和ServletResponse对象,其中ServletRequest代表请求对象,ServletResponse代表响应对象。然后会调用service()方法,并把请求和响应对象作为参数传递,从而把请求委托给Servlet。在每次请求中,ServletRequest对象负责接受请求,ServletResponse对象负责响应请求。在HTTP请求的情况下,容器会调用与HTTP请求的方法相应的doXXX()方法,例如,若HTTP请求的方式为GET,容器会调用doGet()方法,若HTTP请求的方式为POST,容器会调用doPost()方法。Servlet在处
8、理客户端请求的时候有可能会抛出ServletException异常或者UnavailableException异常。返回卸载卸载Servlet Servlet的卸载是由容器定义和实现的,因为资源回收或其他原因,当Servlet需要销毁时,容器会在所有Servlet的service()线程完成之后(或在容器规定时间后)调用Servlet的destroy()方法,以此来释放系统资源,比如数据库的连接等等。在destroy()方法调用之后,容器会释放Servlet实例,该实例随后会被Java的垃圾收集器所回收。如果再次需要这个Servlet处理请求,Servlet容器会创建一个新的Servlet实例
9、。返回6.3 使用使用Servlet 6.3.1认识第一个Servlet6.3.2使用HttpServlet 在应用程序中,所有的Servlet都必须直接或者间接地实现javax.servlet.Servlet接口,而我们在开发过程中最常使用的则是扩展javax.servlet.Servlet接口的实现类javax.servlet.GenericServlet和其子类javax.servlet.http.HttpServlet。返回认识第一个认识第一个Servlet(1)一个普通的Servlet只需扩展javax.servlet.GenericServlet即可,GenericServlet类
10、定义了一个普通的、协议无关的Servlet,使用GenericServlet类可使编写Servlet变得简单。例如,创建一个简单的Servlet,主要代码如下:publicclassServletSampleextendsGenericServletpublicvoidservice(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOExceptionresponse.setCharacterEncoding(GBK);/设置响应的编码类型为GBKPrintWriterout=response.getW
11、riter();/获取输出对象out.println();out.println(这是第一个Servlet的例子);out.println();out.close();/关闭输出对象认识第一个认识第一个Servlet(2)配置web.xml文件,通过元素和元素实现,其中元素用来定义,元素用来为Servlet配置映射路径。ServletSamplesunyang.ServletSampleServletSample/servlet程序的运行结果如图所示:返回使用使用HttpServlet(1)创建用于Web的Servlet,需要扩展javax.servlet.http.HttpServlet。H
12、ttpServlet可用于处理HTTP请求,例如,创建用于Web的Servlet:publicclassHttpServletSampleextendsHttpServletprotectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOExceptionresp.setCharacterEncoding(GBK);/设置响应的编码类型为GBKPrintWriterout=resp.getWriter();/获取输出对象Stringname=req.getParameter(na
13、me);/获取请求的参数if(name=null|name.equals()name=sunyang;out.println(你好,+name+这是使用HttpServlet的例子);protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException this.doGet(req,resp);使用使用HttpServlet(2)配置web.xml文件ServletSamplesunyang.HttpServletSampleServletSample/httpS
14、ervlet程序的运行结果如图所示:返回6.4 获取运行环境信息获取运行环境信息 6.4.1获取Servlet信息6.4.2获取服务器端信息6.4.3获取客户端信息运行环境信息包括Servlet信息、服务器端信息和客户端信息。返回获取获取Servlet信息信息(1)Servlet信息包括Servlet的初始化参数、Servlet的初始化参数名和Servlet名称,这些信息通常都是配置在web.xml中的,可通过javax.servlet.ServletConfig接口中定义的方法来获取。1.获取Servlet的初始化参数在Web.xml文件中,元素的相关配置代表Servlet的初始化参数,在S
15、ervlet中这些参数的获取是通过ServletConfig接口的getInitParameter()方法来完成的,getInitParameter()方法的语法格式如下:publicStringgetInitParameter(Stringname)语句中,参数name为元素的值。getInitParameter()方法的返回值为元素的值。获取获取Servlet信息信息(2)2获取Servlet初始化参数名 在web.xml文件中,元素的值即为Servlet初始化参数名。获取Servlet初始化参数名通过ServletConfig接口的getInitParameterNames()方法来完成
16、,该方法的语法格式如下:publicEnumerationgetInitParameterNames()getInitParameterNames()方法的返回值为一个枚举对象(Enumeration),和getInitParameter()方法一样,该方法也可在GenericServlet的子类中直接调用。获取获取Servlet信息信息(3)3获取Servlet名称 可通过ServletConfig接口的getServletName()方法来获取Servlet在web.xml文件中的注册名称,该方法的语法格式如下:publicStringgetServletName()getServletN
17、ame()方法的返回值为元素的值,若Servlet未注册,则返回类名。返回获取服务器端信息(获取服务器端信息(1)服务器端信息包括服务器名、服务器端口号、服务器的属性信息等,Servlet通过ServletContext和ServletRequest接口提供的相关方法可获取这些服务器端信息,这些方法的名称及其作用如表所示:接口方法名称作用ServletContextStringgetServerName()获取服务器名intgetServerPort()获取服务器端口号ServletRequestStringgetServerInfo()获取服务器信息EnumerationgetAttribu
18、teNames()获取服务器属性名ObjectgetAttribute(Stringname)获取服务器属性值intgetMajorVersion()获取服务器支持的Servlet的主版本号intgetMinorVersion()获取服务器支持的Servlet的次版本号获取服务器端信息(获取服务器端信息(2)应用举例:Servlet主要代码如下:public classServerInfoServletextendsGenericServletpublic void service(ServletRequestreq,ServletResponseres)throwsServletExcept
19、ion,IOExceptionServletContextservletContext=getServletContext();/获取Servlet上下文res.setCharacterEncoding(GBK);/设置响应的编码类型为GBKPrintWriterout=res.getWriter();/获取输出对象 out.println(服务器名);out.println(+req.getServerName()+);out.println(服务器端口号);out.println(+req.getServerPort()+);out.println(服务器信息);out.println(+
20、servletContext.getServerInfo()+);out.close();/关闭输出对象获取服务器端信息(获取服务器端信息(3)在XML文件中配置之后,运行结果如图所示:返回获取客户端信息(获取客户端信息(1)客户端信息包括客户端主机名、客户端IP地址、客户端端口号、客户端的请求参数等,Servlet通过ServletRequest接口或其子接口HttpServletRequest提供的相关方法可获取客户端信息,这些方法的名称及其作用如表所示:方法名作用StringgetRemoteHost()获取客户端主机名StringgetRomoteAddr()获取客户端IP地址intg
21、etRemotePort()获取客户端端口号StringgetProtocol()获取客户端请求协议StringgetCharacterEncoding()获取客户端请求的编码格式EnumerationgetParameterNames()获取客户端请求的所有参数名StringgetParameter(Stringname)根据客户端请求的参数名获取参数值获取客户端信息(获取客户端信息(2)实例:Servlet主要代码如下:public classClientInfoServletextendsHttpServletprotected voiddoGet(HttpServletRequestr
22、eq,HttpServletResponseresp)throwsServletException,IOExceptionthis.doPost(req,resp);protected voiddoPost(HttpServletRequestreq,HttpServletResponseresp)throws ServletException,IOExceptionresp.setCharacterEncoding(GBK);/设置响应的编码类型为GBKPrintWriterout=resp.getWriter();/获取输出对象out.println(客户端主机名);out.println
23、(+req.getRemoteHost()+);out.println(客户端IP地址);out.println(+req.getRemoteAddr()+);out.close();/关闭输出对象获取客户端信息(获取客户端信息(3)配置Web.xml文件,运行结果如图所示:返回6.5 Servlet中会话设置中会话设置 6.5.1获取HttpSession对象6.5.2在HttpSession对象中保存数据6.5.3在HttpSession对象中读取数据返回获取获取HttpSession对象对象 当需要为客户端建立session时,Servlet容器会给每一个用户建立一个HttpSessio
24、n对象。获取HttpSession对象的方式是通过调用HttpServletRequest接口提供的以下两个方法:publicHttpSessiongetSession()publicHttpSessiongetSession(Booleancreate)使用无参数的getSession()方法会获取一个HttpSession对象,而对于带参数的getSession()方法,如果当前请求不属于任何会话,而且参数create值为true,则创建一个新会话,否则返回null,此后所有来自同一个的请求都属于这个会话。返回在在HttpSession对象中保存数据对象中保存数据 获取到HttpSessi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Servlet核心技术 Servlet 核心技术 PPT 课件
限制150内