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

手机WAP编程

开发平台:

Java

  1. package push;
  2. import push.Winner;
  3. import members.Members;
  4. import javax.servlet.*;
  5. import javax.servlet.http.*;
  6. import java.io.*;
  7. import java.util.*;
  8. /**
  9.  * A class that demonstrates a push service for recommending a site to a friend (by a push message).
  10.  *
  11.  * @version 1.0
  12.  * @since 1.0
  13.  * @see HttpServlet
  14.  */
  15. public final class Recommendation extends HttpServlet {
  16.     private static final String XML_VERSION = "<?xml version="1.0"?>";
  17.     private static final String CONTENT_TYPE = "text/vnd.wap.wml";
  18.     private static final String DOC_TYPE = "<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"n" +
  19. "  "http://www.wapforum.org/DTD/wml_1.1.xml">";
  20.     private static int numberOfQuestions=0;
  21.     private static String grades;
  22.     private static final Vector questions = new Vector();
  23.     private static final String HOME_PAGE = "/index.jsp";
  24.     private static String feedbackFile = null;
  25.     private static Winner winner = null;
  26.     private static String pushAddressType = null;
  27.     /**
  28.      * <code>doGet</code>
  29.      *
  30.      * @param request a <code>HttpServletRequest</code> value
  31.      * @param response a <code>HttpServletResponse</code> value
  32.      * @exception ServletException if an error occurs
  33.      * @exception IOException if an error occurs
  34.      */
  35.     public void doGet(HttpServletRequest request, HttpServletResponse response) 
  36. throws ServletException, IOException {
  37. doPost(request, response);
  38.     }
  39.     /**
  40.      * <code>doPost</code>
  41.      *
  42.      * @param request a <code>HttpServletRequest</code> value
  43.      * @param response a <code>HttpServletResponse</code> value
  44.      * @exception ServletException if an error occurs
  45.      * @exception IOException if an error occurs
  46.      */
  47.     public void doPost(HttpServletRequest request, HttpServletResponse response) 
  48. throws ServletException, IOException {
  49. /* Session tracking. See the description in index.jsp */
  50. HttpSession session = request.getSession();
  51. boolean cookiesCheck = request.getHeader("cookie") != null && request.isRequestedSessionIdValid();
  52. final String jsessionID = cookiesCheck ? "" : ";jsessionid=" + session.getId();
  53. String action = request.getParameter("action");
  54. if(action == null) action ="";
  55. pushAddressType = Members.getPushAddressType();
  56. /* start generating the response ... */
  57. response.setContentType(CONTENT_TYPE);
  58. /* prevent caching of the response */
  59. response.setHeader("cache-control", "no-cache");
  60. PrintWriter out = response.getWriter();
  61.       
  62. out.println(XML_VERSION);
  63. out.println(DOC_TYPE);
  64. out.println("<wml>");
  65. out.println("<!-- provides a way back using the prev element -->n" +
  66.     "<template>" +
  67.     " <do type="prev">" + 
  68.     "  <prev/>" +
  69.     " </do>" +
  70.     "</template>");
  71. if(session.getAttribute("name") == null) {
  72.     out.println("<!-- This service can be only accessed by members -->n" +
  73. "<card title="Members  only" id="thanks">" +
  74. " <do type="accept" label="Ok">" +
  75. "  <go href="" + request.getContextPath() + HOME_PAGE + jsessionID + ""/>" +
  76. " </do>" +
  77. " <p>This service is provided only for members.<br/>" +
  78. " <anchor title="Ok">Ok" +
  79. "  <go href="" + request.getContextPath() + HOME_PAGE + jsessionID + ""/>" +
  80. " </anchor>" +
  81. " </p>" +
  82. "</card>");
  83. }
  84. else if(!action.equals("push")) {
  85.     out.println("<!-- Push message form -->n" +
  86. "<card title="Tell a friend" id="friend" newcontext="true">" +
  87. "<p>Tell a friend:<br/>" +
  88. "Name: <input name="name"/>" + 
  89. (pushAddressType.equals("PLMN") ?
  90.  "Phone: <input name="phone" format="*N"/>" :
  91.  "IP address: <input name="ip"/>") +
  92. "Message: <input name="message" value="Your friend recommends that you visit WML Zoo. See you there!"/>" +
  93. "  <anchor title="Send push message">Send push message" + 
  94. "   <go method="post" href="" + request.getRequestURI() + jsessionID + "">" +
  95. "    <postfield name="name" value="$(name)"/>" +
  96. (pushAddressType.equals("PLMN") ?
  97.  "    <postfield name="phone" value="$(phone)"/>" :
  98.  "    <postfield name="ip" value="$(ip)"/>") +
  99. "    <postfield name="message" value="$(message)"/>" +
  100. "    <postfield name="action" value="push"/>" +
  101. "   </go></anchor>" +
  102. "  </p></card>");
  103. }
  104. else {
  105.     PushInitiator pusher = Members.getInitiator();
  106.     /*  next, send the push message */
  107.     String recommendedUrl = "http://" + request.getServerName() + ":" + 
  108. request.getServerPort() + request.getContextPath();
  109.     String pushMessage = request.getParameter("message");
  110.     String friendName = request.getParameter("name");
  111.     System.out.println("friend = " + friendName);
  112.     System.out.println("addresstype = " + pushAddressType);
  113.     boolean sended = false;
  114.     String message = PushInitiator.createSiMessage(recommendedUrl,  null, null, null, 
  115.    null, pushMessage);
  116.     String errorReason = "";
  117.     try {
  118. /* Check the default address type. If it is IPv4 then send the message by using the 
  119.    IP address of the friend. If PLMN then send the message to the given phone number.
  120.    If the address (IP or phone number) is not given, the friend should has 
  121.    currently active session */
  122. if(pushAddressType.equals("IPv4")) {
  123.     String ip = request.getParameter("ip");
  124.     System.out.println("ip= " + ip);
  125.     if(ip != null && !ip.trim().equals("")) {
  126.  pusher.sendPushMessage(ip, pushAddressType, message, 
  127. PushService.SI_CONTENT_TYPE);
  128.  System.out.println("Push message sent to address: " + ip);
  129.  sended = true;
  130.     }
  131.     else {
  132. User friendUser = User.findUser(friendName);
  133. System.out.println("friendUser = " + friendUser);
  134. if(friendUser != null) {
  135.     pusher.sendPushMessage(friendUser.getAddress(), pushAddressType, message, 
  136.    PushService.SI_CONTENT_TYPE);
  137.     System.out.println("Push message sent to address: " + friendUser.getAddress());
  138.     sended = true;
  139. }
  140. else errorReason = "Your friend " + friendName + " is not currently on line!";
  141.     }
  142. }
  143. else if(pushAddressType.equals("PLMN")) {
  144.     String phone = request.getParameter("phone");
  145.     System.out.println("phone number= " + phone);
  146.     if(phone == null || (phone = phone.trim()).equals("")) {
  147. /* If the phone number is not given, try to find from the database */
  148. User friendUser = User.findUser(friendName);
  149.   if(friendUser != null) phone = friendUser.getAddress(pushAddressType);
  150.     }
  151.     if(phone != null && !(phone = phone.trim()).equals("")) {
  152. pusher.sendPushMessage(phone, pushAddressType, message, PushService.SI_CONTENT_TYPE);
  153. System.out.println("Push message sent to number: " + phone);
  154. sended = true;
  155.     }
  156.     else errorReason = "phone number is not given?"; 
  157. }
  158. else throw new Exception("wrong push-addresstype: " + pushAddressType);
  159.     } catch(Exception e) { 
  160. System.err.println(e); 
  161. errorReason = e.toString();
  162.     }
  163.     
  164.     if(sended) {
  165. out.println("<!-- Thanks for the recommendation -->n" +
  166. "<card title="Thank you" id="thanks">" +
  167. " <do type="accept" label="Ok">" +
  168. "  <go href="" + request.getContextPath() + HOME_PAGE + jsessionID + ""/>" +
  169. " </do>" +
  170. " <p>Your message has been delivered.<br/>Thank you for recommending our zoo to your friend!<br/>" +
  171. " <anchor title="Ok">Ok" +
  172. "  <go href="" + request.getContextPath() + HOME_PAGE + jsessionID + ""/>" +
  173. " </anchor>" +
  174. " </p>" +
  175. "</card>");
  176.     }
  177.     else {
  178. out.println("<card title="" + errorReason + "" id="error">" +
  179. " <do type="accept" label="Ok">" +
  180. "  <go href="" + request.getContextPath() + HOME_PAGE + jsessionID + ""/>" +
  181. " </do>" +
  182. " <p>Your message has not been delivered.<br/>The possible reason is: " + errorReason + 
  183. " <br/><anchor title="Ok">Ok" +
  184. "  <go href="" + request.getContextPath() + HOME_PAGE + jsessionID + ""/>" +
  185. " </anchor>" +
  186. " </p>" +
  187. "</card>");
  188.     }
  189. }
  190. out.println("</wml>");
  191.     }
  192. }