1J2EE应用开发实例精解(RAD+WAS)第5章使用RAD进行Servlet开发25.1DB2简介5.2DB2的安装与管理5.3RAD的数据访问功能5.4通过RAD访问数据库5.5通过RAD创建数据库5.6Cloudscape内容提要3学习要点重点内容使用RAD进行Servlet开发、部署的基本方法和步骤Servlet过滤器的开发45.1Servlet概述Servlet起源Servlet是一种独立于平台和协议的服务器端java应用程序,可以生成动态的Web页面Servlet用于接受客户端的请求,将处理结果返回客户端Servlet由Web服务器进行加载Servlet没有main方法,只有一些特定的方法用于启动,执行和退出55.1Servlet概述(cont.)Servlet生命周期Servlet有良好的生命周期的定义这个生命周期由javax.Servlet.Servlet接口的init,service和destroy方法表达65.1Servlet概述(cont.)在RAD中跟踪Servlet生命周期RAD中,要探索Servlet的生命周期首先需要创建一个Web项目创建Web项目的目的是管理静态Web站点或J2EEWeb模块资源75.1Servlet概述(cont.)在RAD中跟踪Servlet生命周期步骤选择“窗口打开透视图其他Web”来打开Web透视图创建新的Web项目,选择“文件新建动态Web项目”启动创建动态Web项目向导,指定项目名称85.1Servlet概述(cont.)选择“下一步”,进入“创建动态Web项目向导”的第二页选择“下一步”,进入“创建动态Web项目向导”的第三页95.1Servlet概述(cont.)选择“完成”结束向导。此时,在工作空间中就增加了两个新项目:ServletExample和ServletExampleEAR在Web透视图的项目资源管理器中也可看到增的两个新项目105.1Servlet概述(cont.)选择“文件新建其他”打开“新建向导”窗口,选中Servlet115.1Servlet概述(cont.)选择“下一步”,打开“创建Servlet向导”窗口。在该对话框中中可以设定Servlet名称和对该Servlet功能的描述125.1Servlet概述(cont.)选择“下一步”,进入“创建Servlet向导”第二页在该页中,可以设定Servlet所在的文件夹、Java包名、类名和Servlet继承的超类,可选择默认值135.1Servlet概述(cont.)选择“下一步”,进入“创建Servlet向导”第三页在该页中,选择要生成哪些方法存根,通常的选择为doGet()和doPost()对于这个生命周期练习,还要选择与Servlet生命周期相关的方法init()和destroy(),然后选择“完成”实现Servlet的创建145.1Servlet概述(cont.)要向Servlet添加跟踪消息,可以在Servlet的构造函数FirstServlet()和init()方法中添加System.out.println()调用要检查服务周期间发生的流,可以在Service(HttpServletRequest,HttpServletResponse)、Service(ServletRequest,ServletResponse)、doPost()和doGet()方法中添加System.out.println()调用要重载这两个service()方法和init()方法,可以在“项目资源管理器”视图中选择“动态Web项目ServletExampleJavaResourcesJavaSource缺省包FirstServlet.java”,单击右键,在弹出的菜单中选择“源代码覆盖/实现方法”155.1Servlet概述(cont.)在弹出的“覆盖/实现方法”窗口中,您可以看到两个service()方法在javax.Servlet.http.HttpServlet类中实现,而init()方法在javax.Servlet.GenericServlet类中实现,选中这3个方法并单击“确定”,添加跟踪消息的四个服务周期方法都首先调用System.out.println(),然后为派给超类实现165.1Servlet概述(cont.)在“项目资源管理器”中选中“FirstServlet.java”文件并单击右键,选择“运行1在服务器上运行”此时会弹出“选择服务器”窗口,RAD系统会自动选择WAS服务器175.1Servlet概述(cont.)运行该Servlet并跟踪控制台信息,根据我们添加的跟踪信息,可以看到在Servlet的生命周期中先后调用了构造函数、初始化、两个Service()方法和doGet()方法185.2Servlet编程接口HTTPServlet使用HTML表格来发送和接收数据要创建一个HTTPServlet要扩展HttpServlet类HttpServlet类包含init()、destroy()、service()等方法195.2Servlet编程接口(cont.)init()方法在Servlet的生命期中,仅执行一次init()方法在服务器装入Servlet时执行service()方法service()方法是Servlet的核心每当一个客户请求一个HttpServlet对象,该对象的service()方法就要被调用,而且传递给这个方法一个请求(ServletRequest)对象和一个响应(ServletResponse)对象作为参数在HttpServlet中已存在service()方法缺省的服务功能是调用与HTTP请求的方法相应的do功能205.2Servlet编程接口(cont.)doGet()方法当一个客户通过HTML表单发出一个HTTPGET请求或直接请求一个URL时,doGet()方法被调用与GET请求相关的参数添加到URL后面,并与这个请求一起发送当不会修改服务器端的数据时,应该使用doGet()方法doPost()方法当一个客户通过HTML表单发出一个HTTPPOST请求时,doPost()方法被调用与POST请求相关的参数作为一个单独的HTTP请求从浏览器发送到服务器当需要修改服务器端的数据时,应该使用doPost()方法215.2Servlet编程接口(cont.)destroy()方法destroy()方法仅执行一次,即在服务器停止且卸装Servlet时执行该方法一个Servlet在运行service()方法时可能会产生其它的线程,因此需确认在调用destroy()方法时,这些线程已终止或完成GetServletConfig()方法GetServletConfig()方法返回一个ServletConfig对象,该对象用来返回初始化参数和ServletContextServletContext接口提供有关Servlet的环境信息GetServletInfo()方法GetServletInfo()方法是一个可选的方法,它提供有关Servlet的信息,如作者、版本、版权225.2Servlet编程接口(cont.)Servlet类接口的分类与Servlet实现相关定义Servlet时要继承的类或实现的接口,通过继承HttpServlet类定义的,而HttpServlet类继承了GenericServlet,GenericServlet又实现了Servlet接口Servlet接口GenericServlet类HttpServlet类235.2Servlet编程接口(cont.)Servlet类接口的分类与Servlet配置相关与Servlet配置相关主要是ServletConfig接口javax.ServletConfig接口代表Servlet的配置,包括Servlet的名称、Servlet的初始化参数和Servlet上下文与Servlet异常相关ServletException类UnavialableException类245.2Servlet编程接口(cont.)Servlet类接口的分类与请求和响应相关和请求和响应相关的类和接口非常的多ServletRequestServletResponseServletInputStreamServletoutputStreamServletRequestWrapperServletResponseWrapperHttpServletRequestHttpServletResponseHttpServletRequestWrapperHttpServletResponseWrapper255.3使用部署描述符编辑器配置Servlet要部署Servlet,必须在web.xml文件中对其进行注册,为服务器提供部署Servlet所需的信息在Web透视图中创建一个动态Web项目ServletConfig,然后创建一个名为SecondServlet的Servlet在“项目资源管理器”中,双击“Web动态项目ServletConfig部署描述符”,在“Web部署描述符编辑器”中打开该文件,同时在“Web部署描述符编辑器”中选择“Servlet”选项卡,在这里可对Servlet进行详细的配置265.3使用部署描述符编辑器配置Servlet(cont.)详细信息指定Servlet的类名称、添加该类的描述信息和指定在发布时显示的名称URL映射定义Servlet和URL模式之间的映射275.3使用部署描述符编辑器配置Servlet(cont.)初始化init-param元素中包含用作Servlet的初始化参数的名/值对每个参数使用独立的一组init-param标记启动时装入服务器启动时,服务器将初始化此Servlet指明Servlet的加载顺序285.3使用部署描述符编辑器配置Servlet(cont.)安全角色引用security-role-ref元素将security-role定义的安全角色名链接到使用Servlet逻辑进行硬编码的备用角色名使用此附加提取层,可以在部署时配置Servlet,且不必更改Servlet代码运行方式指定将用于Web应用程序执行的run-as标识。该元素包含可选描述和安全角色的名称295.3使用部署描述符编辑器配置Servlet(cont.)图标icon元素指定用于在GUI工具中表示Web应用程序的大小图像在Web应用程序中的位置305.4使用RAD开发Servlet实例使用向导开发一个最简单的Servlet项目创建一个“动态Web项目”右键单击“项目资源管理器”窗口中的“动态Web项目”,在弹出菜单中选择“新建动态Web项目”启动创建动态Web项目向导指定动态Web项目的名称、Servlet版本号、目标服务器、EAR项目和上下文根315.4使用RAD开发Servlet实例(cont.)使用向导开发一个最简单的Servlet项目选择“下一步”,设定RAD自动生成的Web项目组件,选默认值325.4使用RAD开发Servlet实例(cont.)使用向导开发一个最简单的Servlet项目选择“下一步”,可以为Web站点选择缺省页面模板,也可以不做任何选择335.4使用RAD开发Servlet实例(cont.)使用向导开发一个最简单的Servlet项目选择“完成”结束向导生成动态Web项目框架HelloWorld和对应的企业应用程序HelloWorldEAR345.4使用RAD开发Servlet实例(cont.)使用向导开发一个最简单的Servlet项目创建一个Servlet右键单击“项目资源管理器”窗口中的“Helloworl