Commercials.java
上传用户:weisa_1
上传日期:2007-10-14
资源大小:287k
文件大小:4k
源码类别:

手机WAP编程

开发平台:

Java

  1. package commercials;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. import java.io.*;
  5. import java.util.*;
  6. /**
  7.  * Commercials class randomizes a commercial from a given list.
  8.  * Initialization-parameters:
  9.  * "commercialsfile" is where you store the commercials
  10.  *
  11.  * The number before the commercial is the "priority number", the higher,
  12.  * the bigger the chance is that this commercial appears.
  13.  *
  14.  * @version 1.0
  15.  * @since 1.0
  16.  * @see HttpServlet
  17.  */
  18. public final class Commercials extends HttpServlet {
  19.     private static final String XML_VERSION = "<?xml version="1.0"?>";
  20.     private static final String CONTENT_TYPE = "text/vnd.wap.wml";
  21.     private static final String DOC_TYPE =
  22. "<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"n" +
  23. "  "http://www.wapforum.org/DTD/wml_1.1.xml">";
  24.     private static final Vector commercials = new Vector();
  25.     private static int[] priorities = null;
  26.     private static int prioritiesTogether=0;
  27.     /**
  28.      * This is the initialization code that runs only once. 
  29.      * The servlet is being placed into service.
  30.      *
  31.      * @exception ServletException if an error occurs
  32.      */
  33.     public void init() throws ServletException {
  34. String commercialsFile = getInitParameter ("commercialsfile");
  35. commercialsFile = getServletContext().getRealPath(commercialsFile);
  36. try {
  37.     BufferedReader reader = new BufferedReader(new FileReader(commercialsFile));
  38.     String line;
  39.     while((line = reader.readLine()) != null) {
  40. if(line.trim().equals("")) break;
  41. commercials.add(line);
  42.     }
  43. }
  44. catch (java.io.IOException e) {
  45.     System.err.println(e);
  46.     throw new ServletException(e);
  47. }
  48. priorities = new int[commercials.size()];
  49. for (int i = 0; i < commercials.size(); ++i){
  50.     String commercial = (String)commercials.get(i);
  51.     StringTokenizer st = new StringTokenizer(commercial, ";");
  52.     int number = Integer.parseInt(st.nextToken());
  53.     priorities[i] = number;
  54.     prioritiesTogether += number;
  55. }
  56.     }
  57.     /**
  58.      * "doGet" is called when we want a commercial to appear.
  59.      *
  60.      * @param request a <code>HttpServletRequest</code> value
  61.      * @param response a <code>HttpServletResponse</code> value
  62.      * @exception ServletException if an error occurs
  63.      * @exception IOException if an error occurs
  64.      */
  65.     public void doGet(HttpServletRequest request, HttpServletResponse response)
  66. throws ServletException, IOException {
  67.         HttpSession session = request.getSession();
  68.         boolean cookieCompatible = false;
  69. String chosenCommercial = getRandomCommercial();
  70. response.setContentType(CONTENT_TYPE);
  71. // prevent caching of the response
  72. response.setHeader("cache-control", "no-cache");
  73. PrintWriter out = response.getWriter();
  74. out.println(XML_VERSION);
  75. out.println(DOC_TYPE);
  76. out.println("<wml>");
  77.         out.println("<template>");
  78.         out.println("<do type="prev">");
  79.         out.println("<prev/>");
  80.         out.println("</do>");
  81.         out.println("</template>");
  82. out.println("<card id="ads" title="Ads">");
  83. out.println("<p align="center">***<br/>");
  84. out.println(chosenCommercial);
  85. out.println("<br/>***</p>");
  86. out.println("</card>");
  87. out.println("</wml>");
  88.     }
  89.     /**
  90.      * Selects randomly a commercial to be shown according to set priorities 
  91.      * for the commercials
  92.      *
  93.      * @return a <code>String</code> value
  94.      */
  95.     public static String getRandomCommercial() {
  96. try {
  97.     if(priorities == null || priorities.length == 0) return "";
  98.     int rnd = (int)(Math.random() * prioritiesTogether);
  99.     int commercialToBeChosen = 0;
  100.     int x = priorities[commercialToBeChosen];
  101.     while(x<=rnd) 
  102. x += priorities[++commercialToBeChosen];
  103.     StringTokenizer st = 
  104. new StringTokenizer((String)commercials.get(commercialToBeChosen), ";");
  105.     System.out.println("commercial: " +  (String)commercials.get(commercialToBeChosen));
  106.     st.nextToken();
  107.     String chosenCommercial = st.nextToken();
  108.     return chosenCommercial == null ? "" : chosenCommercial;
  109. }
  110. catch (Exception e) { System.err.println(e); return ""; }
  111.     }
  112. }