第13章Servlet技术_第1页
第13章Servlet技术_第2页
第13章Servlet技术_第3页
第13章Servlet技术_第4页
第13章Servlet技术_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第13章 Servlet技术 13.1 Servlet概述概述13.2 Servlet生命周期生命周期13.3 使用使用Servlet 13.4 Applet与与Servlet通信通信习习 题题 13.1 Servlet 概概 述述 Servlet是用Java编写的且协议和平台都独立的服务器端的组件。与客户端组件Applet相对应。Servlet扩展了面向请求/响应的服务器的模块,使用平台专用的API进行服务器端的编程。Servlet为服务器和基于Web的客户之间的通信提供了一条更为简单的途径。它的特殊用途包括: (1) 允许用户之间的合作。一个Servlet可以同时并发处理大量的请求,而且可

2、以同步请求,因此使Servlets能够支持像在线会议这样的系统。Servlets能够并发地服务多个客户。 (2) 转发请求。Servlets能够转发请求到其它的服务器和Servlets,因此Servlets能够被用来在多个镜像同一个内容的服务器之间来平衡负载,在多个服务器上根据任务类型或者组织边界分割单一的逻辑服务。13.2 Servlet生命周期生命周期图13.1 Servlet的生命周期服务器服务器处理用户请求载入销毁服务器Servlet代码Servlet代码客户客户Servlet代码 1. 初始化初始化Servlet 当服务器载入一个Servlet时,服务器运行Servlet的init方

3、法。初始化在客户请求被处理和Servlet被销毁之前完成。 2. Servlet_Client交互交互 初始化成功后,HTTP Servlet调用Service方法处理客户请求,Service方法将每个请求分配到处理这个请求的方法,从而支持标准的HTTP客户请求。HttpServlet类中的方法处理客户请求时使用以下两个参数: (1) HttpServletRequest对象:封装了从客户来的数据,主要提供了访问初始请求数据的方法和字段;访问客户数据时使用getParameter方法得到一个已命名参数的值。 (2) HttpServletResponse对象:封装了对客户的响应。使用getWr

4、iter方法返回文本数据给客户(可以以HTML网页的形式表现出来)。Service方法支配的HTTP请求如表13.1所示。表表13.1 Service方法支配的方法支配的HTTP请求请求Service 方法 处理的 HTTP 请求 doGet 处理 GET、条件 GET 和 HEAD 请求 doPost 处理 POST 请求 doPut 处理 PUT 请求 deDelete 处理 DELETE 请求 通常,编写的Servlet应该重载处理它支持的HTTP交互的方法。如果出错,这些方法返回一个BAD_REQUEST(400)错误。当Servlet收到OPTIONS请求时,HttpServlet的

5、Service方法调用doOptions方法。默认的doOptions的实现自动地决定了支持何种HTTP选项和返回信息。HTTP Servlets通常能够并发地服务多个客户。如果Servlet中的这个方法对于客户访问共享资源是可行的,那么你可以通过创建在某一时刻只能处理一个客户请求的Servlet来处理并发。 3. 销毁销毁Servlet Servlet一直运行直到服务器销毁它们,比如在系统管理员的要求下。当一个服务器销毁一个Servlet时,服务器运行Servlet的Destroy()方法。方法只运行一次,服务器将不再运行Servlet,直到服务器重新载入和重新初始化Servlet。13.3

6、 使用使用Servlet13.3.1 编写编写Servlet 【例13.1】 在客户端填写“用户注册信息”网页,并将此网页提交到后台服务器端Servlet,服务器端Servlet程序给予响应,并以网页的形式按行输出用户提交的基本信息。 1. 客户端客户端 客户端是一个“用户注册信息”的HTML网页,如图13.2所示。用户输入个人信息,点击“确定”按钮,将表单数据提交到服务器,然后等待服务器的响应。Index.html源文件代码如下:用户注册信息收集用户注册信息 姓名: 身份证号: 性别男女职业 计算机业 医生 教师 军队 个性化宣言 图13.2 “用户注册信息”网页 在网页index.html

7、中要注意表单的书写,表单的action属性对应服务器端的Servlet,本例中取值为3:8080/examples/Servlet/user.UserServlet;method属性是访问方法,本例中为POST方法。表13.2是表单中的元素标签和命名,可以看到除去“确定”和“清空”,其它的元素标签在第三栏都有一个对应的名字,Servlet通过这些名字获得用户在界面上输入的值,而用户单击“确定”按钮时,表单内容就提交到action属性指定的Servlet。表表13.2 表单元素标签及命名表单元素标签及命名元素标签 类 型 标 签 命 名 姓名 text na

8、me 身份证号 text number 性别 radio sex 职业 select job 个性化宣言 textarea ta 确定 submit 清空 reset 2. 服务器端服务器端 服务器端Servlet收集用户界面输入的数据(见图13.3),然后按行返回这些内容,结果如图13.4所示。注意传输过程中中文字符可能会有出错情况,因此再添加一个转换字段,使得Servlet能够正确打印输出。/程序文件名:UserServlet.javapackage user;import java.io.*;import javax.Servlet.*;import javax.Servlet.http

9、.*;public class UserServlet extends HttpServlet String name,number,sex,job,ta;public void init() throws ServletExceptionsuper.init();name = new String();number = new String();sex = new String();job = new String();ta = new String();/解决中文转换问题public String parseChinese(String inStr) String s = null; by

10、te temp; if (inStr = null) /System.out.println(Warn:Chinese null founded!); return new String(); try temp=inStr.getBytes(iso-8859-1); s = new String(temp); catch(UnsupportedEncodingException e) System.out.println (e.toString(); return s; public void doPost(HttpServletRequest req, HttpServletResponse

11、 res) throws ServletException, IOException /获取用户界面输入的值name = req.getParameter(name);number = req.getParameter(number);sex = req.getParameter(sex);job = req.getParameter(job);ta = req.getParameter(ta); /进行输出res.setContentType(text/html; charset=GB2312);PrintWriter out = res.getWriter();out.println();

12、out.println(注册信息返回结果);out.println( 姓名: + parseChinese(name);out.println( 身份证号: + number);out.println( 性别: + parseChinese(sex) + 职业: + parseChinese(job);out.println(个性化宣言: + parseChinese(ta) + ); 图13.3 用户输入注册信息图13.4 Servlet返回信息13.3.2 编译、配置编译、配置Servlet 安装的Java包是没有带Servlet的JAR文件,所以将D:Apache Tomcat 4.0c

13、ommonlib目录下的Servlet.jar配置到路径包的安装路径下库的扩展目录中,编译时会自动连接库,如本书配置到的目录为D:j2sdk1.4.0_01jrelibext。在命令行提示符下键入命令javac UserServlet.java编译文件,生成类UserServlet.class。 Servlet是服务器端组件,所以必须配置到服务器端。对于Tomcat 4.0服务器,将index.html配置到物理路径D:Apache Tomcat 4.0webappsROOTuser目录下,对应的网络路径就是3:8080/user/index.html;将

14、UserServlet配置到物理路径下的D:Apache Tomcat 4.0webappsexamplesWEB-INFclassesuser目录下,对应的网络地址就是3:8080/examples/Servlet/user.UserServlet。这些配置信息由index.html中的Action属性标明。 如果希望能够配置到根目录下,则在开始-程序-Apache Tomcat 4.0-Configuration中单击EditServer Configuration,然后找到行: !- - -删除第二个,将以上语句变成: 将机器重启动,使得配置文件生效

15、,并在D:Apache Tomcat 4.0webappsROOTWEB-INF路径下建立classes目录,然后将UserServlet.java源文件中的语句行package user;去掉,重新编译成.class类文件并放入此目录,则action属性对应的网络地址为3:8080/Servlet/ UserServlet13.4 Applet与与Servlet通信通信 Applet与Servlet的通信过程的基本原理相当于HTML网页的POST请求。首先两者之间建立一个连接,使用URLConnection类对象打开连接后,Applet将请求发送给Ser

16、vlet,Servlet处理请求并返回处理结果。注意,发送请求数据时一定用URLEncoder类的Encode方法进行格式编码,在Servlet端还需用URLDecoder类的Decode方法进行格式解码。 在HTTP协议中POST请求是以参数名=参数值的方式自动进行URL编码后传送的,编程中要手工实现,例如名-值对 qry = SELECT number,code,score from chengji WHERE code=3001进行URL编码如下: String qry = URLEncoder.encode(qry,UTF-8) + = + URLEncoder.encode(qryS

17、tring,UTF-8); 建立连接时,注意将DbServlet配置到路径D:Apache Tomcat 4.0webappsROOTWEB-INFclasses下。String str = 3:8080/Servlet/DbServlet;URL urlName = new URL(str);打开连接。URLConnection uc = urlName.openConnection();设置参数。uc.setDoOutput(true);uc.setDoInput(true);uc.setUseCaches(false); uc.setRequestP

18、roperty(Content-type,application/x-www-form-urlencoded); 得到数据流发送格式转换后的POST请求。 DataOutputStream dos = new DataOutputStream(uc.getOutputStream(); dos.writeBytes(qry); 在DbServlet中接收数据并进行解码。 String qry = req.getParameter(qry); qry = URLDecoder.decode(qry,UTF-8); 【例13.2】编写Applet和Servlet交互的程序,使得用户在Applet界

19、面(见图13.5)上输入数据库查询语句,单击“查询”按钮后,后台Servlet接收请求,对后台数据库进行查询,并将查询结果返回到Applet界面的文本区域内。图13.5 Applet用户界面图13.6 Applet和Servlet交互原理图数据库SQL查询ResultSet对象URLConnection打开连接,发送请求流对象接收返回结果Java AppletJava Servlet13.4.1 Servlet文件文件 首先书写查询数据库的Servlet文件,编译通过后配置到上面提到的路径。/程序文件名DbServlet.javaimport javax.Servlet.*;import ja

20、vax.Servlet.http.*;import java.util.*;import java.sql.*;import java.io.*;import .*;public class DbServlet extends HttpServletpublic void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletExceptionPrintWriter out = res.getWriter();res.setContentType(text/html;charset=

21、GB2312); /得到Applet请求参数,解码后输出String qry = req.getParameter(qry);qry = URLDecoder.decode(qry,UTF-8);out.println(qry);Connection dbCon = null;try /同数据库建立连接Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);String dbURL = jdbc:odbc:STU;dbCon = DriverManager.getConnection(dbURL,);PreparedStatement p = dbCon.pre

22、pareStatement(qry);ResultSet rs = p.executeQuery();/输出查询结果while(rs.next()out.print(rs.getString(1);out.print(rs.getString(2) + );out.println(rs.getInt(3);catch(Exception e)out.println(读写数据库出错: + e.getMessage();finallytrydbCon.close();out.close();catch(Exception e) out.println(关闭数据库连接出错: + e.getMessa

23、ge(); ;13.4.2 Applet文件文件编写与Servlet通信的Applet文件。/程序文件名DbApplet.javaimport java.awt.*;import java.applet.*;import java.awt.event.*;import java.io.*;import .*;public class DbApplet extends Applet implements ActionListenerTextField tfQuery;TextArea taResults;Button btnExecute;URL chatURL;public void init

24、()Panel pa = new Panel();pa.setLayout(new FlowLayout(FlowLayout.LEFT);pa.add(new Label(查询串:);tfQuery = new TextField(SELECT number,code,score from chengji WHERE code=3001,50);pa.add(tfQuery);btnExecute = new Button(查询);btnExecute.addActionListener(this);pa.add(btnExecute);add(North,pa);taResults = n

25、ew TextArea(30,60);add(Center,taResults);chatURL = getCodeBase();public void actionPerformed(ActionEvent evt)String lbl = evt.getActionCommand();if(lbl.equals(查询) String qryString = tfQuery.getText(); try /查询串编码 String qry = URLEncoder.encode(qry,UTF-8) + = + URLEncoder.encode(qryString,UTF-8); /打开到

26、DbServlet的连接String str = 3:8080/Servlet/DbServlet;URL urlName = new URL(str);URLConnection uc = urlName.openConnection();uc.setDoOutput(true);uc.setDoInput(true);uc.setUseCaches(false); uc.setRequestProperty(Content-type,application/x-www-form-urlencoded);/获得输出流 DataOutputStream dos = new DataOutputStream(uc.getOu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论