<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 23,comments - 12,trackbacks - 0

    建目錄coreservlets,將兩個servlets放在這個目錄中,在coreservlet的上級目錄
    運行:
    javac coreservlets/HelloServlet3.java



    package coreservlets;

    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;

    /** Simple servlet for testing the use of packages
     *  and utilities from the same package.
     *  <P>
     *  Taken from Core Servlets and JavaServer Pages 2nd Edition
     *  from Prentice Hall and Sun Microsystems Press,
     *  http://www.coreservlets.com/.
     *  &copy; 2003 Marty Hall; may be freely used or adapted.
     */

    public class HelloServlet3 extends HttpServlet {
      public void doGet(HttpServletRequest request,
                        HttpServletResponse response)
          throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        String title = "Hello (3)";
        out.println(ServletUtilities.headWithTitle(title) +
                    "<BODY BGCOLOR=\"#FDF5E6\">\n" +
                    "<H1>" + title + "</H1>\n" +
                    "</BODY></HTML>");
      }
    }




    package coreservlets;

    import javax.servlet.*;
    import javax.servlet.http.*;

    /** Some simple timesavers. Note that most are static methods.
     *  <P>
     *  Taken from Core Servlets and JavaServer Pages 2nd Edition
     *  from Prentice Hall and Sun Microsystems Press,
     *  http://www.coreservlets.com/.
     *  &copy; 2003 Marty Hall; may be freely used or adapted.
     */

    public class ServletUtilities {
      public static final String DOCTYPE =
        "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
        "Transitional//EN\">";

      public static String headWithTitle(String title) {
        return(DOCTYPE + "\n" +
               "<HTML>\n" +
               "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n");
      }

      /** Read a parameter with the specified name, convert it
       *  to an int, and return it. Return the designated default
       *  value if the parameter doesn't exist or if it is an
       *  illegal integer format.
      */
     
      public static int getIntParameter(HttpServletRequest request,
                                        String paramName,
                                        int defaultValue) {
        String paramString = request.getParameter(paramName);
        int paramValue;
        try {
          paramValue = Integer.parseInt(paramString);
        } catch(NumberFormatException nfe) { // null or bad format
          paramValue = defaultValue;
        }
        return(paramValue);
      }

      public static double getDoubleParameter
                                     (HttpServletRequest request,
                                      String paramName,
                                      double defaultValue) {
        String paramString = request.getParameter(paramName);
        double paramValue;
        try {
          paramValue = Double.parseDouble(paramString);
        } catch(NumberFormatException nfe) { // null or bad format
          paramValue = defaultValue;
        }
        return(paramValue);
      }

      /** Replaces characters that have special HTML meanings
       *  with their corresponding HTML character entities.
       */
     
      // Note that Javadoc is not used for the more detailed
      // documentation due to the difficulty of making the
      // special chars readable in both plain text and HTML.
      //
      // Given a string, this method replaces all occurrences of
      //  '<' with '&lt;', all occurrences of '>' with
      //  '&gt;', and (to handle cases that occur inside attribute
      //  values), all occurrences of double quotes with
      //  '&quot;' and all occurrences of '&' with '&amp;'.
      //  Without such filtering, an arbitrary string
      //  could not safely be inserted in a Web page.

      public static String filter(String input) {
        if (!hasSpecialChars(input)) {
          return(input);
        }
        StringBuffer filtered = new StringBuffer(input.length());
        char c;
        for(int i=0; i<input.length(); i++) {
          c = input.charAt(i);
          switch(c) {
            case '<': filtered.append("&lt;"); break;
            case '>': filtered.append("&gt;"); break;
            case '"': filtered.append("&quot;"); break;
            case '&': filtered.append("&amp;"); break;
            default: filtered.append(c);
          }
        }
        return(filtered.toString());
      }

      private static boolean hasSpecialChars(String input) {
        boolean flag = false;
        if ((input != null) && (input.length() > 0)) {
          char c;
          for(int i=0; i<input.length(); i++) {
            c = input.charAt(i);
            switch(c) {
              case '<': flag = true; break;
              case '>': flag = true; break;
              case '"': flag = true; break;
              case '&': flag = true; break;
            }
          }
        }
        return(flag);
      }
    }

     

    posted @ 2005-08-17 11:34 my java 閱讀(1028) | 評論 (1)編輯 收藏

    /*
     字符串分拆函數
     
    --調用示例
     select * from dbo.fsplit('a;adf;fd;ed;dh',';')
     select * from dbo.fsplit('a,,adf,,fd,,ed,,dh',',,')
    鄒建 2003.07*/

    --檢查函數是否存在
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fsplit]') and xtype in (N'FN', N'IF', N'TF'))
     drop function [dbo].[fsplit]
    GO

    --創建字符串分拆的函數
    create function fsplit(
    @str varchar(8000) --要分拆的字符串
    ,@spli varchar(10) --字符串分隔符
    )
    returns @re table(istr varchar(8000))
    as
    begin
     declare @i int,@splen int
     select @splen=len(@spli)
      ,@i=charindex(@spli,@str)
     while @i>0
     begin
      insert into @re values(left(@str,@i-1))
      select @str=substring(@str,@i+@splen,8000)
       ,@i=charindex(@spli,@str)
     end
     if @str<>'' insert into @re values(@str)
     return
    end

    select * from dbo.fsplit(123|abc|000|777','|')

    posted @ 2005-07-26 10:24 my java 閱讀(573) | 評論 (0)編輯 收藏

    在Windows編程中可以調用SetTimer在指定窗口安裝定時器(Timer),定時器可以在指定的時間間隔周期性回調用戶指定的方法,用來執行周期性的任務,如果想取消定時器,可以調用KillTimer取消。但是在java標準包里中并沒有這種類。下面介紹的這個類包可以實現上述功能。

    下面是接口,需要支持定時器功能的類要實現這個接口:

    TimerClient.java

    package com.ly.util;

    /**
     * TimerClient Interface
     *
     * @version 1.0, 8 October 1995
     *
     */
    public interface TimerClient
    {
      void timerEvent(int id);
    }

     

    下面是定時器的實現,包括三個類:TimerCtl,TimerTask,TimerTasks。其中TimerTask用來描述定時器信息。TimerTasks是一個TimerTask的列表,這樣我們就可以同時在一個應用中安插多個定時器。TimerCtl是定時器控制類,是個線程,不停地檢查TimerTasks中是否有TimerTask到期,要是有TimerTask到達指定的時間,則回調TimerTask指定的TimerClient的timerEvent接口。

    TimerCtl.java

    package com.ly.util;

    import java.util.Vector;
    import java.util.Enumeration;
    //import com.borland.jb.util.Diagnostic;

    /**
     * Timer Component
     *
     * Note:
     *  - The successful operation of this timer requires clients to execute simple, short
     *    code snippets when called back by the engine.  Otherwise the queue's delivery
     *    mechanism will be held up
     *
     * Further work:
     *  - When Thread.Interrupt is implemented we can switch from the busy wait model to
     *    the calculated wait model.  Without the interrupt the thread waits for the
     *    calculated interval before waking up.  This is a problem if another shorter
     *    request arrives.  For now we'll assume the minimum resolution of the timer is
     *    100ms.
     *
     * @version 1.0, 2 October 1995
     *
     */
    public class TimerCtl
    {
      static TimerTasks timerTasks;

      public TimerCtl() {
      }

      /*
      * Start a timer running
      */
      public static void startTimer(TimerClient client, int eventId, long delay, boolean repeat) {
        // create the timer if necessary
        if (timerTasks == null) {
          timerTasks = new TimerTasks();
          timerTasks.start();
        }

        //Diagnostic.out.println("TIMER: startTimer"+eventId);

        // add the new task to the queue
        timerTasks.add(client, eventId, delay, repeat);
      }

      /*
      * Stop a timer
      */
      public static void stopTimer(TimerClient client, int eventId) {
        //Diagnostic.out.println("TIMER: stopTimer"+eventId);
        if(timerTasks != null)
            timerTasks.end(client, eventId);
      }
    }

    class TimerTasks extends Thread
    {
      Vector tasks = new Vector();
      boolean suspended = false;
      boolean sleeping = false;

      /**
       * Thread task runner
       */
      public void run() {
        // Loop forever
        while (true) {
          long sleepTime = 0;

          // Ensure that the tasks class is protected
          synchronized (tasks) {
            //Diagnostic.out.println("TIMER: Tick");

            // Scan the job list for any jobs which may fire.
            // Mark one-shot jobs for deletion
            // Calculate the maximum time we can sleep for
            sleepTime = scan();

            // Delete DeletePending jobs.  DeletePending jobs result from one-shots which have
            // been sent, and repeat jobs which have been cancelled.  Jobs may have been
            // cancelled during the Scan process.
            purge();
          }

          // Suspend timer if necessary
          if (tasks.size() == 0) {
            //Diagnostic.out.println("TIMER: Suspend");
            try {
              synchronized(this) {
                suspended = true;
                wait();
              }
            }
            catch (InterruptedException e) {
            }
          }
          else {
            //Diagnostic.out.println("TIMER: Suggested Sleeping for "+sleepTime);
            if (sleepTime >= 0) {
              try {
                sleeping = true;
                sleep(sleepTime);
                sleeping = false;
              }
              catch (InterruptedException i) {
                //Diagnostic.out.println("TIMER: Caught me napping");
              }
            }
          }
        }
      }

      /**
       * Add a new task
       */
      public void add(TimerClient client, int eventId, long delay, boolean repeat) {
        TimerTask t = new TimerTask(client, eventId, delay, repeat);

        synchronized (tasks) {
          tasks.addElement((Object)t);
        }

        // Want instant response - wake the thread if it's napping
        // unfortunately the interrupt() method is not working
    //    if (sleeping)
    //      interrupt();

        if (suspended) {
          synchronized(this) {
            notify();
            //Diagnostic.out.println("TIMER: Resume");
            suspended = false;
          }
        }
      }

      /**
       * Find the job and mark it for deletion
       */
      public void end(TimerClient client, int eventId) {
        synchronized (tasks) {
          for (int i = 0; i < tasks.size(); i++) {
            TimerTask t = (TimerTask)tasks.elementAt(i);

            //if (!t.deletePending && t.client == client && t.eventId == eventId)
            if (t.deletePending == false && t.client == client && t.eventId == eventId) {
              // JPBS - if we don't reset 'repeat', deletePending will be set again
              t.repeat = false;
              t.deletePending = true;
              break;
            }
          }
        }
      }

      /**
       * Clear out all the dead wood
       */
      void purge() {
        for (int i = 0; i < tasks.size(); i++) {
          TimerTask t = (TimerTask)tasks.elementAt(i);

          if (t.deletePending) {
            //Diagnostic.out.println("TIMER: purged");

            tasks.removeElementAt(i);
            i--;
          }
        }
      }

      long scan() {
        // The value added to the current time determines the MAX time until
        // the next scan
        // This is 100 now since thread.interrupt() is not implemented
        long nextTime = System.currentTimeMillis() + 100;

        for (int i = 0; i < tasks.size(); i++) {
          TimerTask t = (TimerTask)tasks.elementAt(i);

          // if not already deletePending, test (and possibly send the event)
          // as a result, the job may be flagged for deletion.
          // May also be a non-repeating job and so require self deletion
          if (!t.deletePending)
            t.test();

          // if the task didn't get deleted - see what it contributes to the time
          if (!t.deletePending)
            nextTime = Math.min(nextTime, t.timeNext);

          //Diagnostic.out.println("TIMER: Scanning "+t.eventId+" "+(t.deletePending == true ? "DEL" : ""));
        }

        return nextTime - System.currentTimeMillis();
      }
    }

    class TimerTask
    {
      TimerClient client;
      int         eventId;

      long        timePrev;
      long        timeDelay;
      long        timeNext;

      boolean repeat;
      boolean deletePending;

      public TimerTask(TimerClient client, int eventId, long timeDelay, boolean repeat) {
        this.client = client;
        this.eventId = eventId;
        this.timeDelay = timeDelay;
        this.repeat = repeat;

        // schedule the next click - now + delay
        timeNext = System.currentTimeMillis() + timeDelay;
        deletePending = false;

        //Diagnostic.out.println("TIMER: Adding New Task");
      }

      public void test() {
        if (System.currentTimeMillis() >= timeNext) {
          //Diagnostic.out.println("TIMER: fire");

          // Fire the event
          client.timerEvent(eventId);

          // Update the next time
          timeNext = System.currentTimeMillis() + timeDelay;

          deletePending = !repeat;
        }
      }
    }

     

     
    下面是一個使用例子

    TimerTest.java

    package com.ly.util;

    import java.io.*;
    import java.util.*;
    import com.ly.util.*;

    /**
    * Title:
    * Description:
    * Copyright: Copyright (c) 2001
    * Company: http://dozb.blogchina.com
    * @author dozb
    * @version 1.0
    */
    public class TimerTest implements TimerClient{
    public TimerTest()
    {
    starttime();
    }
    public void timerEvent(int id)
    {
    System.out.println("timerEvent...");
    }
    public void starttime()
    {
    TimerCtl.startTimer(this,1,5*1000,true);
    }
    public void stoptime()
    {
    TimerCtl.stopTimer(this,1);
    }

    public static void main(String[] args)
    {
    new TimerTest();
    try
    {
    Thread.sleep(200000);
    }catch(Exception e)
    {
    }

    }
    }

     

    通過這種方式,可以高效地使用socket通訊,在異步socket版本沒有發布以前,不失是一種解決問題的方法。:)

    posted @ 2005-07-26 09:00 my java 閱讀(5822) | 評論 (1)編輯 收藏
    僅列出標題
    共3頁: 上一頁 1 2 3 
    主站蜘蛛池模板: 高清一区二区三区免费视频| 亚洲AV无码一区二区二三区软件 | 久久亚洲精品成人| 国产大片免费天天看| 亚洲色偷偷综合亚洲AV伊人| A级毛片成人网站免费看| 亚洲精品无码不卡在线播HE| 免费无码又爽又刺激网站| 亚洲gv白嫩小受在线观看| 全免费a级毛片免费看| 亚洲视频在线观看地址| 久久99九九国产免费看小说| 中国china体内裑精亚洲日本| eeuss草民免费| 亚洲熟妇无码八AV在线播放| 日本在线免费观看| 亚洲成电影在线观看青青| 无码少妇一区二区浪潮免费| 亚洲а∨精品天堂在线| 亚洲精品高清一二区久久| 日韩精品无码免费专区网站| 91亚洲va在线天线va天堂va国产 | 一色屋成人免费精品网站| 自拍偷区亚洲国内自拍| 国产一级淫片免费播放电影| 一个人看的免费视频www在线高清动漫 | 久久乐国产精品亚洲综合| 免费国产99久久久香蕉| 亚洲精品无码久久久久久久| 成年人免费网站在线观看| 特级毛片免费播放| 亚洲综合婷婷久久| 好男人视频社区精品免费| 亚洲第一视频在线观看免费 | 久久亚洲一区二区| 在线观看免费大黄网站| 十八禁在线观看视频播放免费| 亚洲va在线va天堂va手机| 久久夜色精品国产亚洲av| 成人免费激情视频| 91亚洲国产成人精品下载|