Chinaunix首页 | 论坛 | 博客
  • 博客访问: 619762
  • 博文数量: 98
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 1528
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-28 16:20
文章分类

全部博文(98)

文章存档

2011年(1)

2010年(11)

2009年(44)

2008年(42)

我的朋友

分类: Java

2008-04-25 15:39:34

 

9.2.3  一个appletservlet通过套接口直接传递参数和传递对象(对象串行化):

 

考虑到安全性的原因,只能由applet发起一个套接口连接,因此servelt是一个被动的监听的方式,一个servlet必须在某个端口监听,等待applet的连接请求。通常情况下,一个servlet应该在servletinit()方法中开始监听applet的连接请求,并在destroy()方法中停止监听。在这两者之间,对每个连接请求都创建一个线程来和客户端进行通信。

由于通过套接口的每一个请求都要建立一个线程来处理,而java不支持多继承,因此我们单独作一个类来处理servlet与线程:

 

// cuugHttpServlet.java

package cuug;

 

import java.io.*;

import java.net.*;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;

 

public abstract class cuugHttpServlet extends HttpServlet {

     

      protected int DEFAULT_PORT = 1313 ;

      private Thread cuugThread;

     

      public void init(ServletConfig config) throws ServletException{

            super.init(config);

     

            try{

                  cuugThread = new CuugTD(this);

                  cuugThread.start();

            }

            catch (Exception e){

                  getServletContext().log(e,"problem starting socket

                              server cuug thread");

            }

      }

     

      protected int getSocketPort(){

            try{

                  return Integer.parseInt(getInitParameter("socketPort"));

            }

            catch(NumberFormatException e) { return DEFAULT_PORT;}

      }

     

      abstract public void handleClient(Socket client);

     

      public void destroy(){

            try{

                  cuugThread.stop();

                  cuugThread = null;

            }

            catch(Exception e){

                  getServletContext().log(e,"Problem stoping

                        server Socket cuug thread");

            }

      }

}

 

 

class CuugTD extends Thread{

 

      private ServerSocket serverSocket;

      private cuugHttpServlet servlet;

     

      public CuugTD(cuugHttpServlet servlet){

            this.servlet = servlet;

      }

     

      public void run(){

            try{

                  serverSocket = new ServerSocket(servlet.getSocketPort());

            }

            catch(Exception e){

                  servlet.getServletContext().log(e,"Problem establishing

                         server socket");

                  return;

            }

           

            try {

                  while(true){

                        try{

                              servlet.handleClient(serverSocket.accept());

                        }

                        catch(IOException ioe){

                              servlet.getServletContext().log(ioe,"Problem

                                          accepting client's socket connection");

                        }

                  }

            }

            catch (ThreadDeath e){

                  try{

                        serverSocket.close();

                  }

                  catch(IOException ioe){

                        servlet.getServletContext().log(ioe,"Problem

                                    closing server socket ");

                  }

            }

      }

}

 

 

//DaytimeServlet.java

 

import java.io.*;

import java.net.*;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;

 

import cuug.cuugHttpServlet;

 

public class DaytimeServlet extends cuugHttpServlet{

      public Date getDate(){

            return new Date();

      }

     

      public void init(ServletConfig config)throws ServletException{

            super.init(config);

      }

     

      public void doGet (HttpServletRequest req,HttpServletResponse res)

            throws ServletException,IOException

      {

            if ("object".equals(req.getParameter("format"))){

                  ObjectOutputStream out = new

                        ObjectOutputStream(res.getOutputStream());

                  out.writeObject(getDate());

            }

            else{

                  PrintWriter out = res.getWriter();

                  out.println(getDate().toString());

            }

      }

     

      public void doPost (HttpServletRequest req,HttpServletResponse res)

                  throws ServletException,IOException

      {

            doGet(req , res);

      }

 

      public void destroy(){

            super.destroy();

      }

 

      public void handleClient(Socket client){

            new DaytimeConnection(this ,client).start();

      }

}

 

class DaytimeConnection extends Thread {

      DaytimeServlet servlet;

      Socket client;

     

      DaytimeConnection(DaytimeServlet servlet ,Socket client){

            this.servlet = servlet ;

            this.client= client;

            setPriority(NORM_PRIORITY-1);

      }

     

      public void run(){

            try{

                  DataInputStream in = new DataInputStream(

                                                      new BufferedInputStream(

                                                      client.getInputStream()));

                  String line = in.readLine();

                  if ("object".equals(line)){

                        ObjectOutputStream out =

                              new ObjectOutputStream(client.getOutputStream());

                        out.writeObject(servlet.getDate());

                        out.close();

                  }

                  else{

                        PrintStream out = new PrintStream(client.getOutputStream());

                        out.println(servlet.getDate().toString());

                        out.close();

                  }

                  client.close();

            }

            catch(IOException e){

                  servlet.getServletContext().log(e,"IOException while

                        handling request");

            }

            catch(Exception e){

                  servlet.getServletContext().log(e,"Exception while

                        handling request");

            }

      }

}

    

 

阅读(661) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~