




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九章 Servlet编程技术,Servlet是用java编写的,运行在WEB服务器上的独立模块。在实际应用中,我们可以灵活地加载和卸下Servlet模块,以此提高WEB服务器功能。 学习目标 了解Servlet的概念 了解Servlet与JSP的关系 熟悉Servlet运行环境 了解Servlet类的基本结构 了解Servlet模块的生命周期 学会在JSP页面中调用Servlet,9.1 Servlet是什么?,Servlet是使用Servlet API编写的java程序。其结构基于请求响应模式。Servlet模块运行模式如图9-1所示。,图9-1 Servlet运行模式,从图中可以看出,整个处理流程如下: HTTP请求:客户将客户请求发送给Servler引擎。 请求:Servlet引擎将请求转发送给处理请求的Servlet模块。 响应:Servlet模块接受请求后,调用相应的服务(service()对请求进行处理,然后将处理结果返回给Servlet引擎。 HTTP响应:Servlet引擎将结果发送给客户端。,9.2 Servlet与JSP,Servlet是JSP的早期版本,JSP是Servlet的简易表达形式。JSP经过转译后的结果就是Servlet。JSP适合于展示用户界面,Servlet适合于企业逻辑处理。因此,我们常使用JSP技术编写用户界面,使用Servlet实现业务逻辑。,9.3 Servlet运行环境,运行一个Servlet,首先要将Servlet原文件编译为字节码文件,然后,将字节码文件保存到相应的WEB目录中,最后设置Servlet的调用路径,即配置web.xml文件。,9.3.1编译Servlet程序 创建用户目录 编写servlet类之前,首先创建一个用户目录,用以保存servlet原文件。这里创建一个目录为: e:test9 编写自已的servlet类 用记事本工具编写一个简单的servlet类,该类包含一个init()方法和service()方法,其功能是向客户端输出一个字符串。将该文件保存在e:test9目录下。Ex9_1.java,获取servlet API包 编译程序Ex9_1.java时,需要用到servlet API基本包,这些包在文件servlet-api.jar中,我们在E:Tomcat 5.0commonlib目录下找到该文件,将该文件复制到e:test9目录下。 编译servlet原文件 在dos命令窗口下,进入e:test9目录,编译程序Ex9_1.java。在dos窗口中,输入命令:javac classpath servlet-api.jar Ex9_1.java 编译后的字节码文件是: Ex9_1.class,9.3.2存放Servlet字节码文件到相应目录 1部署servlet字节码文件 Tomcat 5.0服务器存放servlet字节码文件的目录是:ROOTWEB-INFclasses。将Ex9_1.class文件复制到该目录下。 配置web.xml文件 web.xml文件在ROOTWEB-INF目录下,编辑该文件。 在 和标记之间增加以下代码:, name_1 /给servlet类起个名字 Ex9_1 /servlet的字节码文件名 name_1 /servlet类的名字 /doget1 /给运行servlet类设置一个路径名(自已起名) 说明:保存web.xml文件前,将后面的注释文字删除。,9.3.3 运行 Servlet 保存web.xml文件后,重新启动Tomcat5.0服务器,然后在浏览器地址栏中输入” http:/localhost:8090/doget1” 就可以访问该servlet了。访问结果如图9-2所示。,图9-2 访问servlet模块,9.4 Servlet基本结构,Servlet模块是用Servlet API编写的Servlet API包含两个包:javax.servlet和javax.servlet.http。javax.servlet包中的类与http协议无关;javax.servlet.http包中的类与http协议相关,该包中的部分类继承了javax.servlet包中的部分类和接口下面介绍编写Servlet类时要继承的超类和父类。即GenericServlet和HttpServlet。,1 GenericServlet类 GenericServlet类在javax.servlet包中,它提供了 servlet接口的基本实现,该类包含三个重要的方法,它们是init()、destroy()和service()方法。service()是抽象方法,所有子类都应当实现这个方法。 2 HttpServlet类 HttpServlet类在javax.servlet.http包中,它扩展了GenericServlet类。HttpServlet类定义了两个service()方法和六个doXXX()方法。,(1) 两个service()方法 public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException 本方法是公有方法。该方法接收客户端请求包后,创建request对象和response对象,并分别转换为 HttpServletRequest/ HttpServletResponse类型的对象,然后调用下面的保护service()方法。 protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 该方法接收HttpServletRequest/ HttpServletResponse类型的对象后,根据http请求方法的类型,本方法调用下面6个doXXX()方法之一,进行逻辑处理并响应客户。 ,(2) doXXX()方法 doXXX()方法有6个: doGet(), doPost(),doDelete(),doPut(),doTrace(),doOption()。 它门分别对应Form表单中的method属性。get方法提交的数据量不能超过2kB, 否则提交失败,post提交没有容量限制。下面是doGet()方法和doPost()方法。 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 具体要处理的逻辑代码写在此处 ,或者在此处调用被覆盖的doPost()方法。 ,protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 具体要处理的逻辑代码写在此处,或者在此处调用被覆盖的doGet()方法。 程序员自定义的Servlet类都必须扩展HttpServlet类在扩展类中,覆盖service()、doPost()或doGet()方法实现逻辑处理。,3.编写Servlet类的步骤 下面是程序员编写Servler类时的一般步骤: (1).扩展HttpServlet类 (2).覆盖HttpServlet类中的三个方法service()、doPost()或doGet(),将要处理的逻辑代码写在以上三个方法的任一个中。Servlet模块执行service()方法时,会自动调用doPost()或doGet()这两个方法,实现servlet逻辑处理功能。,9.4.1 获取客户端信息 例子9.2获取客户端信息,并把信息输出到客户端。 程序结构: ex9_2.jsp页面提供一个信息输入窗口,并把信息提交给Servlet(Ex9_2.java)处理。页面交互关系如图9-3所示。,图9-3 访问servlet模块,程序算法: ex9_2.jsp: 创建一个表单,该表单包含一个文本框,一个下拉框。 Ex9_2.java: 1定义类Ex9_2,该类扩展类HttpServlet 2覆盖doPost()方法 3设置输出流的文件类型 4获得输出流对象:out 5设置输出流的字符集为:GB2312 6获取表单数据:name/love 7向客户端输出姓名(name)和爱好(love),9.4.2向客户提交信息 例子9.3 写一Servlet程序,读出文件内容。其中,文件目录和文件名从客户端输入。 问题分析: 我们可以使用上一章例子8.3的读文件类ReadFile.java,通过该类对象读取文件内容。这样只需编写一个Servlet类接受客户端提供的文件目录和文件名,然后将文件目录和文件名传递给类ReadFile.java,创建一个读文件的对象,最后输出文件的内容。,程序结构: 本程序由ex9_3.jsp页面,一个Servlet模块(ReadFileServlet.java),一个java类(ReadFile.java)组成。Ex9_3.jsp页面将客户输入的文件目录和文件名提交给Servlet模块,Servlet模块调用ReadFile.java读取文件内容,然后将内容输出到客户端。页面的交互关系如图9-4所示。,图9-4 访问servlet模块,程序算法: ex9_3.jsp: 创建一个表单,该表单包含两个文本框,分别用来输入文件目录和文件名。 ReadFileServlet.java: 1定义一个类ReadFileServlet,该类扩展类HttpServlet 2覆盖doPost()方法,在该方法体中实现逻辑处理(下面是处理逻辑) 3设置输出的文件类型,采用的字符集。 4获取输出流:out 5从客户表单中获取文件目录(filePath)和文件名(fileName)。 6以文件目录(filePath)和文件名(fileName)为参数,创建一个读文 件内容的对象:readFileBean 7调用getReadContent()方法,获取文件内容:readContent 8输出文件内容:readContent,程序代码: 说明:在web.xml文件中,将Servlet模块(ReadFileServlet.java)的调用路径设置为 “ /doget3 ”。ex9_3.jsp通过 “ /doget3 ”来调用Servlet模块。 说明:ReadFileServlet.java引用了ReadFile.java类,我们必须 用import语句导入该类字节码文件,同时将该类字节码文件与ReadFileServlet字节码文件一起存放在ROOTWEB-INFclassesch9目录中。还要配置web.xml文件,在该文件中设置Servlet模块的调用路径是 /doget3,9.5 Servlet生命周期,当服务器调用Servlet类时,Servlet对象被创建。从服务器创建Servlet对象到该对象被消灭这段时间称为Servlet生命周期。 1Servlet三个基本方法的作用 (1) init()方法 当servlet第一次被加载时,服务器调用该方法创建一个servlet对象,完成必要的初始化工作。在servlet对象生命周期内,本方法只调用一次。,(2) service()方法 每当客户请求到来时,servlet引擎将请求对象传递给本方法,同时创建一个响应对象,service()方法获得请求/响应对象后,进行请求处理(调用被覆盖的doXXX()方法进行逻辑处理),将处理的结果,以响应对象的方式返回给客户端。在servlet对象周期内,该方法可能被多次请求,而被多次调用。 (3) destroy()方法 servlet引擎终止服务时(如关闭服务器),调用该方法销毁 servlet对象。在servlet对象周期内,该方法只调用一次。,2Servlet执行流程 右图是servlet对象的执行流程。,销毁servlet对象吗?,有请求吗?,图9-5 servlet对象执行流程,9.5.1 init()方法初始化Servlet 例子9.4这里按姓名查询学生(表:students)成绩为例,说明Servlet对象的三个基本方法的作用。 问题分析: 本题由一个JSP页面和一个Servlet模块组成。在JSP页面中,由表单提供姓名录入窗口,将姓名提交给一Servlet模块,该Servlet模块查询出学生成绩,并把成绩输出到客户端。,程序结构: ex9_4.jsp页面将客户输入的姓名提交给Ex9_4.java(Servlet模块);Ex9_4.java以姓名为关键字查询出学生的成绩,并将成绩输出到客户端。下面是ex9_4.jsp页面与Ex9_4.java的交互关系如图9-6所示。,图9-6 访问servlet模块,Servlet模块(Ex9_4.java)包含三个方法,下面是它的初始化方法init()方法。 init()方法: public void init(ServletConfig config) throws ServletException super.init(config); try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“);/加载驱动程序 catch(ClassNotFoundException e) try con=DriverManager.getConnection(“jdbc:odbc:grade“,“,“); catch(SQLException e) ,init()方法作用: 由于存在多个客户与同一数据库连接的事实。因此Servlet对象初始化要做的工作是:加载驱动程序,创建连接对象con。,9.5.2 service()方法响应客户 在例子9.4中, Ex9_4.java对客户请求(以姓名为关键字查询学生成绩)的逻辑处理由service()方法完成。 Servlet模块(Ex9_4.java)包含三个方法,下面是实现逻辑处理的service()方法。,service()方法: service()方法的作用: 由于存在多个客户,多次查询学生成绩的事实(请求),因此将查询学生成绩的实现代码放置在service()方法中。该方法以姓名为关键字,查询学生成绩,并将成绩输出到客户端。,9.5.3 destroy()方法释放Servlet对象 在例子9.4中,Servlet模块(Ex9_4.java)希望不再查询,要求释放资源时,调用destroy()方法销毁Servlet对象。 Servlet模块(Ex9_4.java)包含三个方法,下面是销毁Servlet对象的destroy()方法。,destroy()方法: public void destroy() super.destroy(); try con.close(); catch(Exception e) e.printStackTrace(); destroy()方法的作用: 当客户希望不再查询时,调用destroy()方法释放资源,销毁Servelt对象。,程序代码: 说明:在web.xml文件中,将Servlet模块(Ex9_4.java)的调用路径设置为 “ /doget4 “。ex9_4.jsp通过“ /doget4 “来调用Servlet模块(Ex9_4.java)。 ex9_4.jsp:,9.6 jsp调用Servlet,例子9.5将客户录入的姓名/性别/电话保存在文件“e:phone.txt“中。 问题分析: JSP页面程序构造一个表单,提供姓名/性别/电话录入窗口,当提交表单后,把姓名/性别/电话数据提交给一Servlet模块。Servlet模块接受数据后,把它保存到文件“e:phone.txt“中。 程序结构: 本程序由一个ex9_5.jsp页面文件接受客户输入的数据,然后客户将数据提交给Servlet模块(Ex9_5.java),Servlet模块(Ex9_5.java)把数据写入到文件“e:phone.txt“中。,程序算法: ex9_5.jsp: 创建一个表单,包含三个文本框,分别用来输入姓名(name),性别(sex),电话(telphone)。 Ex9_5.java: 1扩展类HttpServlet,构造类Ex9_5 2定义两个成员变量:ou(字符文件输出流), outbuff(字符缓冲输 出流)。 3在init()方法中,创建字符文件输出流和字符缓冲输出流,分别 初始化成员变量ou和outbuff。 4在doPost()方法中,设置向客户端输出类型为 “text/html;charset=GB2312“。 5获取向客户端的输出流:out 6设置字符编码为:“GB23
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 七下第五单元数学试卷
- 母婴年终活动策划方案范文(3篇)
- 工地特大溶洞施工方案(3篇)
- 小学守护戎装活动方案策划(3篇)
- 轻钢房施工方案(3篇)
- 零配件活动策划方案(3篇)
- 消防相亲联谊活动方案策划(3篇)
- 中基考试题库及答案
- 北京市门头沟区2023-2024学年九年级上学期第一次月考物理考试题目及答案
- 北京市昌平区2024-2025学年八年级下学期第二次月考语文题库及答案
- 查对制度 课件
- 餐饮开票购销合同(2篇)
- 景区旅游安全风险评估报告
- 《国际传播学概论(双语)》教学大纲
- 中科曙光公司在线测评题
- 2024年高中语文议论文思维方法解析19:归谬
- 顺丰快递员工入职合同范本
- 代办户口迁出委托书
- 人教版小学英语单词表(完整版)
- 2023年临沧市市级单位遴选(选调)考试真题
- DL-T 1476-2023 电力安全工器具预防性试验规程
评论
0/150
提交评论