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

手机WAP编程

开发平台:

Java

  1. package members;
  2. import push.Birthday;
  3. import push.PushService;
  4. import push.PushInitiator;
  5. import push.User;
  6. import feedback.Feedback;
  7. import javax.servlet.*;
  8. import javax.servlet.http.*;
  9. import java.io.*;
  10. import java.util.*;
  11. import java.sql.*;
  12. import java.net.InetAddress;
  13. import java.net.URL;
  14. /**
  15.  * Members login
  16.  *
  17.  * @see HttpServlet
  18.  */
  19. public final class Members extends HttpServlet {
  20.     private static final String XML_VERSION = "<?xml version="1.0"?>";
  21.     private static final String CONTENT_TYPE = "text/vnd.wap.wml";
  22.     private static final String DOC_TYPE = "<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"n" +
  23. "  "http://www.wapforum.org/DTD/wml_1.1.xml">";
  24.     private static Connection con;
  25.     private static Statement stmt = null;
  26.     private static String membersFile = null;
  27.     private static final String HOME_PAGE = "/index.jsp";
  28.     private static final String ADMIN_NAME = "admin";
  29.     /* push initiator */
  30.     private static PushInitiator pusher = null;
  31.     /* push proxy gateway url */
  32.     private static String ppgUrl = null;
  33.     private static String authorization = null;
  34.     /* push services */
  35.     private static Vector pushServices = new Vector(); 
  36.     private static Birthday birthdayChecker = null;
  37.     private static PushService pushServiceServer = null;
  38.     private static String pushSupportFile = null; 
  39.     private static String pushAddressType = null;
  40.     /**
  41.      * This is the initialization code that runs only once.
  42.      * The servlet is being placed into service.
  43.      *
  44.      * @exception ServletException if an error occurs
  45.      */
  46.     public void init() throws ServletException {
  47. String pushServiceStr = getInitParameter("pushservices");
  48. StringTokenizer st = new StringTokenizer(pushServiceStr, ";");
  49. String[] service;
  50. while(st.hasMoreTokens()) {
  51.     try {
  52. service = new String[2];
  53. service[0] = st.nextToken().trim();
  54. service[1] = st.nextToken().trim();
  55. pushServices.add(service);
  56.     }
  57.     catch (Exception e) {
  58. System.err.println(e); break;
  59.     }
  60. }
  61. // check, if proxy is set
  62. boolean useProxy = new Boolean(getInitParameter("use-proxy")).booleanValue();
  63. if(useProxy) {
  64.     // HTTP connections via a proxy server
  65.     String proxyHost = getInitParameter("proxy-host");
  66.     String proxyPort = getInitParameter("proxy-port");
  67.     System.setProperty("http.proxySet", "true");
  68.     System.setProperty("http.proxyHost", proxyHost);
  69.     System.setProperty("http.proxyPort", proxyPort);
  70. }
  71. try {
  72.     Class.forName(getInitParameter("dbdriver"));
  73.     con = DriverManager.getConnection(getInitParameter("database"), 
  74.       getInitParameter("dbuser"), getInitParameter("dbuserpasswd"));
  75.     stmt = con.createStatement();
  76.     try {
  77. stmt.executeUpdate("CREATE TABLE IF NOT EXISTS members (name VARCHAR(10) NOT NULL, passwd VARCHAR(10), dob VARCHAR(10), sex CHAR(1), email VARCHAR(30), phone VARCHAR(15), pushservices VARCHAR(20), PRIMARY KEY (name))");
  78.     }
  79.     catch (SQLException e) { System.err.println(e); }
  80. }
  81. catch (Exception ex){
  82.     ex.printStackTrace();
  83. }
  84. /* Create a push initiator, used to initiate push messages */
  85. ppgUrl = getInitParameter("ppg-url");
  86. /* Some ppgs require authorization */
  87. authorization = getInitParameter("authorization");
  88. pushSupportFile = getInitParameter("pushsupport");
  89. pushSupportFile = getServletContext().getRealPath(pushSupportFile);
  90. /* Get push address type. It is either "IPv4" (default) or "PLMN". */
  91. pushAddressType = getInitParameter("push-addresstype");
  92. if(pushAddressType == null) pushAddressType = "IPv4";
  93.     }
  94.     /**
  95.      * Called by the server to allow a servlet to handle a GET request. 
  96.      *
  97.      * @param request a <code>HttpServletRequest</code> value
  98.      * @param response a <code>HttpServletResponse</code> value
  99.      * @exception ServletException if an error occurs
  100.      * @exception IOException if an error occurs
  101.      */
  102.     public void doGet(HttpServletRequest request, HttpServletResponse response) 
  103. throws ServletException, IOException {
  104. doPost(request, response);
  105.     }
  106.     /**
  107.      * Called by the server to allow a servlet to handle a POST request.
  108.      *
  109.      * @param request a <code>HttpServletRequest</code> value
  110.      * @param response a <code>HttpServletResponse</code> value
  111.      * @exception ServletException if an error occurs
  112.      * @exception IOException if an error occurs
  113.      */
  114.     public void doPost(HttpServletRequest request, HttpServletResponse response) 
  115. throws ServletException, IOException {
  116.         HttpSession session = request.getSession();
  117. boolean cookiesCheck = request.getHeader("cookie") != null && request.isRequestedSessionIdValid();
  118. final String jsessionID = cookiesCheck ? "" : ";jsessionid=" + session.getId();
  119. /* Request parameter "action" has one of the following values:
  120.    - "login"
  121.    - "new"
  122.    - "checkin"
  123.    - "change"
  124.    - "delete"
  125.    - "view"
  126.    - "update"
  127.    - "insert"
  128. */
  129. String action = request.getParameter("action");
  130. if(action == null) action = "login"; // default action
  131. String name = null;
  132. String passwd = null; 
  133. String dob = null;
  134. String sex = null;
  135. String email = null;
  136. String phone = null;
  137. String pushservices = null;
  138. if(action.equals("new") || action.equals("update") || 
  139.    action.equals("insert") || action.equals("checkin")) {
  140.     name = action.equals("update") ? (String)session.getAttribute("name") : request.getParameter("name");
  141.     passwd = request.getParameter("passwd");
  142.     dob = request.getParameter("dob");
  143.     sex = request.getParameter("sex");
  144.     email = request.getParameter("email");
  145.     phone = request.getParameter("phone");
  146.     pushservices = request.getParameter("pushservices");
  147. }
  148. else { // set values from the session attributes
  149.     name = (String)session.getAttribute("name");
  150.     passwd = (String)session.getAttribute("passwd");
  151.     dob = (String)session.getAttribute("dob");
  152.     sex = (String)session.getAttribute("sex");
  153.     email = (String)session.getAttribute("email");
  154.     phone = (String)session.getAttribute("phone");
  155.     pushservices = (String)session.getAttribute("pushservices");
  156. }
  157. // check if the client device supports WAP push */
  158. boolean isPushSupported = pushSupported(request);
  159. // assing a push-info object into session information of the user */
  160. if(name != null) {
  161.     if(session.getAttribute("push-info") == null && isPushSupported)
  162. session.setAttribute("push-info", new User(name, request.getRemoteAddr()));
  163. }
  164. if(pusher == null) {
  165.     try {
  166. URL contextRoot = new URL("http://" + request.getServerName() + ":" + 
  167.     request.getServerPort() + request.getContextPath() + "/");
  168. pusher = new PushInitiator(new URL(contextRoot, ppgUrl), authorization);
  169.     }
  170.     catch (Exception e) { System.err.println(e); }
  171. }
  172. /* Create a members' birthday checker thread. A push message is sent when the birthday of a member is 
  173.    approaching */ 
  174. if(birthdayChecker == null) {
  175.     birthdayChecker = new Birthday(pusher, "http://" + request.getServerName() + ":" + 
  176.    request.getServerPort() + request.getContextPath() + HOME_PAGE, 
  177.    pushAddressType);
  178.     new Thread(birthdayChecker).start();
  179. }
  180. /* Create a push service server thread. The thread sends push messages to users. 
  181.    A user will receive push messages if he/she has selected any push services. */
  182. if(pushServiceServer == null) {
  183.     pushServiceServer = new PushService(pusher, "http://" + request.getServerName() + ":" + 
  184. request.getServerPort() + request.getContextPath(),
  185. pushAddressType, 24);
  186.     new Thread(pushServiceServer).start();
  187. }
  188. // start generating the response ...
  189.         response.setContentType(CONTENT_TYPE);
  190. // prevent caching of the response
  191. response.setHeader("cache-control", "no-cache");
  192. PrintWriter out = response.getWriter();
  193. out.println(XML_VERSION);
  194. out.println(DOC_TYPE);
  195. out.println("<wml>");
  196. out.println("<!-- provides a way back using the prev element -->n" +
  197.     "<template>" +
  198.     " <do type="prev">" + 
  199.     "  <prev/>" +
  200.     " </do>" +
  201.     "</template>");
  202. /* Handle the "login" action */
  203. if(action.equals("login")) {
  204.     if(name == null) {
  205. out.println("<card title="Members" id="login1">" + 
  206.     " <p>Name: <input name="name"/>" + 
  207.     "Password: <input type="password" name="passwd"/><br/>" + 
  208.     "  <anchor title="Ok">Ok" + 
  209.     "   <go method="post" href="" + request.getRequestURI() + jsessionID + "">" +
  210.     "    <postfield name="name" value="$(name)"/>" +
  211.     "    <postfield name="passwd" value="$(passwd)"/>" +
  212.     "    <postfield name="action" value="checkin"/>" +
  213.     "   </go>" +
  214.     "  </anchor><br/>" +
  215.     "  <anchor title="New member">New member" +
  216.     "   <go method="post" href="" + request.getRequestURI() + jsessionID + "">" +
  217.     "     <postfield name="action" value="new"/>" +
  218.     "   </go>" + 
  219.     "  </anchor>" +
  220.     " </p>" +
  221.     " <do type="accept" label="Ok" name="1">" +
  222.     "  <go method="post" href="" + request.getRequestURI() + jsessionID + "">" +
  223.     "   <postfield name="name" value="$(name)"/>" +
  224.     "   <postfield name="passwd" value="$(passwd)"/>" +
  225.     "   <postfield name="action" value="checkin"/>" +
  226.     "  </go>" +
  227.     " </do>" +
  228.     " <do type="accept" label="New member" name="5">" +
  229.     "  <go method="post" href="" + request.getRequestURI() + jsessionID +"">" +
  230.     "   <postfield name="action" value="new"/>" +
  231.     "  </go>" +
  232.     " </do>" +
  233.     "</card>");
  234.     }
  235.     else {   // name != null
  236. out.println("<card title="Members" id="login">" + 
  237.    " <p>Next weekend all members can enjoy a free snack at the Safari restaurant<br/>" +
  238.    "  <anchor title="My membership">My membership" +
  239.    "   <go href="#membership"/>" +
  240.    "  </anchor></p>" +
  241.    "</card>");
  242. out.println("<card title="My membership" id="membership">" +
  243.     " <p>Member name:&#160; <strong>" + name + "</strong><br/>" +
  244.     "  <anchor title="View">View info" +
  245.     "   <go method="post" href="" + request.getRequestURI() + jsessionID + "">" +
  246.     "    <postfield name="action" value="view"/>" + 
  247.     "   </go>" +
  248.     "  </anchor><br/>" +
  249.     "  <anchor title="Change">Edit" +
  250.     "   <go method="post" href="" + request.getRequestURI() + jsessionID + "">" +
  251.     "    <postfield name="action" value="change"/>" +
  252.     "   </go>" +
  253.     "  </anchor><br/>" +
  254.     "  <anchor title="End membership">End membership" +
  255.     "   <go method="post" href="" + request.getRequestURI() + jsessionID + "">" +
  256.     "    <postfield name="action" value="delete"/>" +
  257.     "   </go>" +
  258.     "  </anchor>" +
  259.     " </p>" +
  260.     " <do type="accept" label="View info" name="3">" +
  261.     "  <go method="post" href="" + request.getRequestURI() + jsessionID + "">" +
  262.     "   <postfield name="action" value="view"/>" +
  263.     "  </go>" +
  264.     " </do>" +
  265.     " <do type="accept" label="Edit" name="4">" +
  266.     "  <go method="post" href="" + request.getRequestURI() + jsessionID + "">" +
  267.     "   <postfield name="action" value="change"/>" +
  268.     "  </go>" +
  269.     " </do>" +
  270.     " <do type="accept" label="End membership" name="2">" +
  271.     "  <go method="post" href="" + request.getRequestURI() + jsessionID + "">" +
  272.     "   <postfield name="action" value="delete"/>" +
  273.     "  </go>" +
  274.     " </do>" +
  275.     "</card>");
  276.     }
  277. // View member information. 
  278. // The "action" request parameter "action" has the value "view". 
  279. else if(action.equals("view")) {
  280.     out.println("<card title="View" id="view">" +
  281. " <p>Date of birth: " + dob + "<br/>" +
  282. "Sex: " + sex + "<br/>" +
  283. "E-Mail: " + email + "<br/>" +
  284.                         "Phone: " + phone + "<br/>");
  285.     out.print("Push-Services: ");
  286.     StringTokenizer st = new StringTokenizer(pushservices, ";");
  287.     while (st.hasMoreTokens())
  288. out.println(((String[])pushServices.get(Integer.parseInt(st.nextToken())))[0]);
  289.     out.println(" </p>" +
  290. " <do type="accept" label="Ok">" +
  291. "  <go href="" + request.getContextPath() + HOME_PAGE + jsessionID + ""/>" +
  292. " </do>" +
  293. "</card>");
  294. }
  295. // Delete member information from the database.
  296. // "action" has the value "delete". 
  297. else if(action.equals("delete")) {
  298.     int nDeletedRows = 0;
  299.     try {
  300. String sqlDeleteStmt = "DELETE FROM members WHERE name = '" + name + 
  301.     "' AND passwd = '" + passwd + "'";
  302. nDeletedRows = stmt.executeUpdate(sqlDeleteStmt);
  303. session.removeAttribute("name");
  304.     }
  305.     catch (SQLException E){
  306. E.printStackTrace();
  307.     }
  308.     out.println("<card id="members">n<p>" +
  309. ((nDeletedRows > 0) ?
  310.  "Your (" + name + ") membership is now ended, and member information cleared from the database" :
  311.  "Could not remove member (" + name + ")")
  312. +
  313. " <do type="accept" label="Ok">" +
  314. "  <go href="" + request.getContextPath() + HOME_PAGE + jsessionID + ""/>" +
  315. " </do>" +
  316. "</p></card>");
  317. }
  318. /* bind the member name and other parameters (stored in database) to the current session */
  319. else if(action.equals("checkin")) {
  320.     boolean access = false;
  321.     if (name != null && passwd != null) {
  322. try {
  323.     ResultSet rs = stmt.executeQuery("SELECT name, passwd, dob, sex, email, phone, pushservices FROM members");
  324.     while (rs.next()) {
  325. String nameCheck = rs.getString("name");
  326. String passwdCheck = rs.getString("passwd");
  327. if (nameCheck.equals(name) && passwdCheck.equals(passwd)){
  328.     access = true;
  329.     setSessionInfo(session, name, passwd, rs.getString("dob"), rs.getString("sex"), 
  330.    rs.getString("email"), rs.getString("phone"), 
  331.    rs.getString("pushservices"));         
  332.     break;
  333. }
  334.     }
  335. }
  336. catch (SQLException E) {
  337.     E.printStackTrace();
  338. }
  339.     }
  340.     if (access) {
  341. out.println("<card id="members" title="Members" ontimer="" + request.getContextPath() + 
  342.     HOME_PAGE + jsessionID + "">");
  343. out.println("<timer value="30"/>" + 
  344.     "<p align="center">Welcome<br/><strong>" + name + "</strong><br/> to members' site!<br/>");
  345. if(isPushSupported) {
  346.     out.println("A push message is coming...");
  347.     /*  next, send a welcome push message */
  348.     String serviceUrl = "http://" + request.getServerName() + ":" + 
  349. request.getServerPort() + request.getContextPath() + "/services/news.jsp";
  350.     String message = PushInitiator.createSiMessage(serviceUrl,  null, null, null, 
  351.                  null, "Thank you for vising our zoo! Check the latest news and happenings");
  352.     String address = pushAddressType.equals("IPv4") ?  request.getRemoteAddr() : getPhoneNumber(name);
  353.     try {
  354. pusher.sendPushMessage(address, pushAddressType, message, PushService.SI_CONTENT_TYPE);
  355.     } catch(Exception ee) {}
  356. }
  357. out.println("</p></card>");
  358.     }
  359.     else {
  360. out.println("<card title="Name not found" id="notfound">" +
  361.     " <p>Please check username/password.<br/>" +
  362.     "  <do type="accept" label="Ok">" +
  363.     "   <go href="" + request.getRequestURI() + jsessionID + "">" +
  364.     "    <postfield name="action" value="login"/>" +
  365.     "   </go>" +
  366.     "  </do>" +
  367.     "  <anchor title="Try again">Try again" +
  368.     "   <go href="" + request.getRequestURI() + jsessionID + "">" +
  369.     "    <postfield name="action" value="login"/>" +
  370.     "   </go>" +
  371.     "  </anchor>" +
  372.     " </p>" +
  373.     "</card>");
  374.     }
  375. }
  376. /* insert a new member information into database */
  377. else if (action.equals("insert")) {
  378.     boolean insertOk=false;
  379.     boolean nameAlreadyExists=false;
  380.     if(name != null && !name.equals("")) {
  381. // first, check if the name already exists!
  382. try {
  383.     ResultSet rs = stmt.executeQuery("SELECT * FROM members WHERE name = '" + name + "'");
  384.     if(!rs.next()) {
  385. int res = stmt.executeUpdate("INSERT INTO members VALUES ('" + name + "','" + passwd + 
  386.      "','" + dob + "','" + sex + "','" + email + "','"  + 
  387.      phone + "','" + pushservices + "')");
  388. if(res == 1) insertOk = true;
  389.     }
  390.     else nameAlreadyExists=true;
  391. }
  392. catch (SQLException E){
  393.     E.printStackTrace();
  394. }
  395. if(insertOk) setSessionInfo(session, name, passwd, dob, sex, email, phone, pushservices);
  396.     }
  397.     out.println("<card id="newmember" title="New member">" +
  398. " <p><strong>" + name + ":</strong>&#160;" +
  399. (insertOk ? "You are now a member of Mobile Zoo!" : 
  400.  (nameAlreadyExists ? "Username " + name + " already exists in the database. Please, select an other username" : 
  401.   "Missing information? The user information is not added to the database!?")) + "<br/>" +
  402. "  <anchor title="Ok">Ok" +
  403. "   <go href="" + request.getContextPath() + HOME_PAGE + jsessionID + ""/>" + 
  404. "  </anchor>" +
  405. " </p>" +
  406. " <do type="accept" label="Ok">" +
  407. "  <go href="" + request.getContextPath() + HOME_PAGE + jsessionID + ""/>" +
  408. " </do>" +
  409. "</card>");
  410. }
  411. /* update member information */
  412. else if(action.equals("update")) {
  413.     try {
  414. String sqlUpdateStmt = "UPDATE members SET passwd = '" + passwd + "', dob = '" + dob + 
  415.     "', sex = '" + sex + "', email = '" + email + "', phone = '" + phone + 
  416.     "', pushservices = '" + pushservices + "' WHERE name = '" + name + "'";
  417. stmt.executeUpdate(sqlUpdateStmt);
  418.     }
  419.     catch (SQLException E){
  420. E.printStackTrace();
  421.     }
  422.     setSessionInfo(session, name, passwd, dob, sex, email, phone, pushservices);    
  423.     out.println("<card id="members" title="Members">" +
  424. " <p align="center">Member information of &#160;<strong>" + name + "</strong>&#160; has been updated!<br/>" +
  425. "  <anchor title="Ok">Ok" + 
  426. "   <go href="" + request.getContextPath() + HOME_PAGE + jsessionID +""/>" +
  427. "  </anchor>" +
  428. " </p>" +
  429. " <do type="accept" label="Ok">" +
  430. "  <go href="" + request.getContextPath() + HOME_PAGE + jsessionID +""/>" +
  431. " </do>" +
  432. "</card>");
  433. }
  434. /* new member login or changing information */
  435. else if(action.equals("new") || action.equals("change")) {
  436.     out.println("<card title="New member" id="newmember">");
  437.     out.print("<p>Login name: ");
  438.     if(action.equals("change")) out.println("<em>" + name + "</em><br/>");
  439.     else if(name != null) out.println("<input name="name" value="" + name + ""/>");
  440.     else out.println("<input name="name"/>");
  441.     out.println("Password: <input type="password" name="passwd"" + 
  442. ((passwd != null) ? " value="" + passwd + """ : "") + "/>" +
  443. "Re-enter password: <input type="password" name="rpasswd"/>" +
  444. "Date of birth (yyyy.mm.dd): <input format="NNNN\.NN\.NN" name="dob"" + 
  445. ((dob != null) ?  " value="" + dob + """ : "") + "/>" +
  446. "E-Mail: <input name="email"" + ((email != null) ? " value="" + email + """ : "") + "/>" +
  447. "Phone: <input format = "*N" name="phone"" + ((phone != null) ? " value="" +
  448.        phone + """ : "") + "/>" + 
  449. "Sex: " +
  450. "<select name="sex"" + ((sex != null) ? " value="" + sex + """ : "") + ">" +
  451. " <option value="m">Male</option>" +
  452. " <option value="f">Female</option>" +
  453. "</select>" +
  454. "Push-Services: " +
  455. "<select name="pushservices" title="Push Services" multiple="true"" + 
  456. ((pushservices != null) ? " value="" + pushservices + """ : "") +">");
  457.     for (int i = 0; i < pushServices.size(); ++i){
  458. out.println("<option value="" + i + "">" + ((String[])pushServices.get(i))[0] + "</option>");
  459.     }
  460.     out.println("</select>" +
  461. "<anchor title="Ok">Ok" +
  462. " <go href="" + request.getRequestURI() + jsessionID + "">" +
  463. "  <postfield name="name" value="$(name)"/>" +
  464. "  <postfield name="passwd" value="$(passwd)"/>" +
  465. "  <postfield name="rpasswd" value="$(rpasswd)"/>" +
  466. "  <postfield name="dob" value="$(dob)"/>" +
  467. "  <postfield name="sex" value="$(sex)"/>" +
  468. "  <postfield name="email" value="$(email)"/>" +
  469. "  <postfield name="phone" value="$(phone)"/>" +
  470. "  <postfield name="pushservices" value="$(pushservices)"/>" +
  471. "  <postfield name="action" value="" + (action.equals("new") ? "insert" : "update") + ""/>" +
  472. " </go>" +
  473. "</anchor>" +
  474. "</p>" +
  475. "<do type="accept" label="Ok" name="1">" +
  476. " <go href="" + request.getRequestURI() + jsessionID + "">" +
  477. "  <postfield name="name" value="$(name)"/>" +
  478. "  <postfield name="passwd" value="$(passwd)"/>" + 
  479. "  <postfield name="rpasswd" value="$(rpasswd)"/>" +
  480. "  <postfield name="dob" value="$(dob)"/>" +
  481. "  <postfield name="sex" value="$(sex)"/>" +
  482. "  <postfield name="email" value="$(email)"/>" +
  483. "  <postfield name="phone" value="$(phone)"/>" +
  484. "  <postfield name="pushservices" value="$(pushservices)"/>" +
  485. "  <postfield name="action" value="" + (action.equals("new") ? "insert" : "update") + ""/>" +
  486. " </go>" +
  487. "</do>" +
  488. "<do type="accept" label="Quit" name="2">" +
  489. " <go href="" + request.getContextPath() + HOME_PAGE + jsessionID + ""/>" +
  490. "</do>" +
  491. "</card>");
  492. }
  493. out.println("</wml>");
  494.     }
  495.     /**
  496.      * <code>setSessionInfo</code> relates attributes to session
  497.      *
  498.      * @param s a <code>HttpSession</code> value
  499.      * @param name a <code>String</code> value
  500.      * @param passwd a <code>String</code> value
  501.      * @param dob a <code>String</code> value
  502.      * @param sex a <code>String</code> value
  503.      * @param email a <code>String</code> value
  504.      * @param phone a <code>String</code> value
  505.      * @param pushservices a <code>String</code> value
  506.      */
  507.     private void setSessionInfo(HttpSession s, String name, String passwd, String dob, String sex, 
  508. String email, String phone, String pushservices) {
  509. s.setMaxInactiveInterval(600); // 10 min
  510. s.setAttribute("name", name);
  511. s.setAttribute("passwd", passwd);
  512. s.setAttribute("dob", dob);
  513. s.setAttribute("sex", sex);
  514. s.setAttribute("email", email);
  515. s.setAttribute("phone", phone);
  516. s.setAttribute("pushservices", pushservices);
  517.     }
  518.     /** 
  519.      * Check if the client phone supports Push functionality.
  520.      * The user-agent header information is utilised.
  521.      *
  522.      * @param request a <code>HttpServletRequest</code> value
  523.      * @return a <code>boolean</code> value
  524.      */
  525.    private static boolean pushSupported(HttpServletRequest request) {
  526. String userAgent = request.getHeader("User-Agent");
  527. if(userAgent == null) return false;
  528. userAgent = userAgent.toLowerCase();
  529. try {
  530.     BufferedReader reader = new BufferedReader(new FileReader(pushSupportFile));
  531.     String line;
  532.     while((line = reader.readLine()) != null) {
  533. line = line.trim().toLowerCase();
  534. if(line.equals(""))  break;
  535. if(userAgent.startsWith(line)) return true;
  536.     }
  537. }
  538. catch (java.io.IOException e) {
  539.     System.err.println(e);
  540. }
  541. return false;
  542.     }
  543.     /**
  544.      * Finds the user's phone number from the database
  545.      *
  546.      * @param user a <code>String</code> value
  547.      * @return a <code>String</code> value
  548.      */
  549.     public static String getPhoneNumber(String user) {
  550. try {
  551.  ResultSet rs = stmt.executeQuery("SELECT phone FROM members WHERE name = '" + user + "'");
  552.  return rs.next() ? rs.getString("phone") : null;
  553. }
  554. catch (SQLException e) { System.err.println(e); }
  555. return null;
  556.     }
  557.     /**
  558.      * <code>getInitiator</code> returns the instance of the default push initiator.
  559.      *
  560.      * @return a <code>PushInitiator</code> value
  561.      */
  562.     public static PushInitiator getInitiator() { return pusher; }
  563.     /**
  564.      * <code>getPushService</code>
  565.      *
  566.      * @param id an <code>int</code> value
  567.      * @return an <code>Object</code> value
  568.      */
  569.     public static Object getPushService(int id) { return pushServices.get(id); }
  570.     /**
  571.      * <code>getStatement</code>
  572.      *
  573.      * @return a <code>Statement</code> value
  574.      */
  575.     public static Statement getStatement() { return stmt; }
  576.     /**
  577.      * Returns the push address type (IPv4 or PLMN) to be used
  578.      *
  579.      * @return a <code>String</code> value
  580.      */
  581.     public static String getPushAddressType() { return pushAddressType; }
  582. }