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

手机WAP编程

开发平台:

Java

  1. package info;
  2. import commercials.Commercials;
  3. import members.Members;
  4. import feedback.Feedback;
  5. import javax.servlet.*;
  6. import javax.servlet.http.*;
  7. import java.text.SimpleDateFormat;
  8. import java.sql.*;
  9. import java.io.*;
  10. import java.util.*;
  11. /**
  12.  * Info pages
  13.  *
  14.  */
  15. public final class Info extends HttpServlet {
  16.     
  17.     private static final String XML_VERSION = "<?xml version="1.0"?>";
  18.     private static final String CONTENT_TYPE = "text/vnd.wap.wml";
  19.     private static final String SI_CONTENT_TYPE = "text/vnd.wap.si";
  20.     private static final String DOC_TYPE = "<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"n" +
  21. "  "http://www.wapforum.org/DTD/wml_1.1.xml">";
  22.     /**
  23.      * Called by the server to allow a servlet to handle a GET request. 
  24.      *
  25.      * @param request a <code>HttpServletRequest</code> value
  26.      * @param response a <code>HttpServletResponse</code> value
  27.      * @exception ServletException if an error occurs
  28.      * @exception IOException if an error occurs
  29.      */
  30.     public void doGet(HttpServletRequest request, HttpServletResponse response) 
  31. throws ServletException, IOException {
  32. doPost(request, response);
  33.     }
  34.     /**
  35.      * Called by the server to allow a servlet to handle a POST request.
  36.      *
  37.      * @param request a <code>HttpServletRequest</code> value
  38.      * @param response a <code>HttpServletResponse</code> value
  39.      * @exception ServletException if an error occurs
  40.      * @exception IOException if an error occurs
  41.      */
  42.     public void doPost(HttpServletRequest request, HttpServletResponse response) 
  43. throws ServletException, IOException {
  44. /* Session tracking. See the description in index.jsp */
  45. HttpSession session = request.getSession();
  46. boolean cookiesCheck = request.getHeader("cookie") != null && request.isRequestedSessionIdValid();
  47. final String jsessionID = cookiesCheck ? "" : ";jsessionid=" + session.getId();
  48. String dob = null; String name = null; String sex = null; String email = null; String pushMessages = null;
  49. /* get user information from the current session object */
  50. try{
  51.     name = (String)session.getAttribute("name");
  52.     dob = (String)session.getAttribute("dob");
  53.     sex = (String)session.getAttribute("sex");
  54.     email = (String)session.getAttribute("email");
  55.     pushMessages = (String)session.getAttribute("pushservices");
  56. }
  57. catch (Exception E){
  58.     E.printStackTrace();
  59. }
  60. /* check if WTAI functionality is supported by the client user agent */
  61. final boolean wtaiSupport = wtaiSupported(request);
  62. /* Administrator's user name */
  63. final String ADMIN_USER = "admin";
  64. /* start generating the response ... */
  65.         response.setContentType(CONTENT_TYPE);
  66. /* prevent caching of the response */
  67. response.setHeader("cache-control", "no-cache");
  68. PrintWriter out = response.getWriter();
  69. out.println(XML_VERSION);
  70. out.println(DOC_TYPE);
  71. out.println("<wml>");
  72. out.println("<!-- provides a way back using the prev element -->n" +
  73.     "<template>" +
  74.     " <do type="prev">" + 
  75.     "  <prev/>" +
  76.     " </do>" +
  77.     "</template>");
  78. out.println("<!-- Information page about news, opening hours, prices etc -->n" +
  79.     "<card title="Info" id="main">");
  80. boolean showAdminMenu = name != null && name.equals(ADMIN_USER);
  81. if (showAdminMenu) {
  82.     out.println("<!-- only for System Administrator an "AdminMenu" is shown -->n" +
  83. "<do type="accept" label="AdminMenu" name="1">n" + 
  84. " <go href="" + request.getRequestURI() + jsessionID + "#admin"/>n" +
  85. "</do>n" +
  86. "<p><anchor title="Admin info">Admin info" +
  87. "  <go href="" + request.getRequestURI() + jsessionID + "#admin"/>n" +
  88. "</anchor></p>");
  89. String commercial = Commercials.getRandomCommercial();
  90. out.println(" <do type="accept" label="New" name="new">" +
  91.     "  <go href="" + request.getRequestURI() + jsessionID + "#new"/>" +
  92.     " </do>" +
  93.     " <do type="accept" label="Opening hours" name="open">" +
  94.     "  <go href="" + request.getRequestURI() + jsessionID + "#open"/>" +
  95.     " </do>" +
  96.     " <do type="accept" label="Prices" name="prices">" +
  97.     "  <go href="" + request.getRequestURI() + jsessionID + "#prices"/>" +
  98.     " </do>" +
  99.     " <do type="accept" label="Contact" name="contact">" +
  100.     "  <go href="" + request.getRequestURI() + jsessionID + "#contact"/>" +
  101.     " </do>" + 
  102.     " <p>" + 
  103.     (!commercial.equals("") ? "*** " + commercial + "***<br/>" : "") + 
  104.     "  <anchor title="New">New" +
  105.     "   <go href="" + request.getRequestURI() + jsessionID + "#new"/>" +
  106.     "  </anchor><br/>" +
  107.     "  <anchor title="Opening hours">Opening hours" +
  108.     "   <go href="" + request.getRequestURI() + jsessionID + "#open"/>" +
  109.     "  </anchor><br/>" +
  110.     "  <anchor title="Prices">Prices" +
  111.     "   <go href="" + request.getRequestURI() + jsessionID + "#prices"/>" +
  112.     "  </anchor><br/>" +
  113.     "  <anchor title="Contact">Contact" +
  114.     "   <go href="" + request.getRequestURI() + jsessionID + "#contact"/>" +
  115.     "  </anchor>" +
  116.     " </p>" +
  117.     "</card>");
  118. out.println("<!--  A card displaying opening hours of the Mobile Zoo  -->" +
  119.     "<card title="Opening hours" id="open">" +
  120.     " <p><strong>Mon-Fri:</strong>&#160;10am-8pm<br/>" +
  121.     "  <strong>Sat-Sun:</strong>&#160;12am-9pm</p>" +
  122.     "</card>");
  123. out.println("<!-- Contact information -->" +
  124.     "<card title="Contact information" id="contact">" +
  125.     " <p>Zoo Hill 7, 33101 Zootown<br/>");
  126. if(wtaiSupport) {
  127.     out.println("<anchor title="Make call">tel. 555-555-555" +
  128. " <go href="wtai://wp/mc;555555555"/>" +
  129. "</anchor><br/>");
  130. } else {
  131.     out.println("tel. 555-555-555<br/>");
  132. }
  133. out.println(" <anchor title="Feedback">Feedback" +
  134.     "   <go href="feedback" + jsessionID+ ""/>" +
  135.     " </anchor></p>" +
  136.     "</card>");
  137. out.println("<card title="New" id="new">" +
  138.     " <p><strong>Today:</strong>&#160;Check out our new "Safari" family restaurant next to the gate! Exotic cuisine in exotic setting!<br/>" +
  139.     "  <strong>Last week:</strong> &#160; Flamingo pond is re-opened after the renovation." +
  140.     " </p>" +
  141.     "</card>");
  142. out.println("<card title="Prices" id="prices">" +
  143.     "<p>Adults: 5 &#x20AC;<br/>" +
  144.     "Children: 3 &#x20AC;<br/>" +
  145.     "Pensioners: 3 &#x20AC;<br/>" +
  146.     "Season pass: 20 &#x20AC;<br/>");
  147. if (dob != null) {
  148.     out.println("Member information:<br/>");
  149.     try {
  150. int age = ageCalculator(dob);
  151. if(age < 16) {
  152.     out.println("<em>Today free entry for children!</em>");
  153. }
  154. else if(age < 65) {
  155.     out.println("Special offer for you &#160;<strong>" + name + "</strong>! &#160;<em>As a member you will get" + 
  156. " 2  &#x20AC; reduction out of the normal Adults ticket price.</em>");
  157. }
  158. else {
  159.     out.println("<em>Today free entry for all senior members of the Zoo!</em>");
  160. }
  161.     }
  162.     catch (Exception E) {
  163. // E.printStackTrace();
  164.     }
  165. }
  166. out.println(" </p>"  + 
  167.     "</card>");
  168. if (showAdminMenu) { 
  169.     out.println("<card title="Administrator's info" id="admin">" +
  170. " <p><anchor title="Feedback">Feedback" +
  171. "   <go href="" + request.getRequestURI() + jsessionID  + "#votestats"/>" +
  172. "  </anchor><br/>" +
  173. "  <anchor title="Users">Users" +
  174. "   <go href="" + request.getRequestURI() + jsessionID + "#userstats"/>" +
  175. "  </anchor>" +
  176. "  <do type="accept" label="Votes" name="1">" +
  177. "   <go href="" + request.getRequestURI() + jsessionID + "#votestats"/>" +
  178. "  </do>" +
  179. "  <do type="accept" label="Users" name="2">" +
  180. "   <go href="" + request.getRequestURI() + jsessionID + "#userstats"/>" +
  181. "  </do>" +
  182. " </p>" +
  183. "</card>");
  184.     out.println("<card title="Vote statistics" id="votestats"><p>");
  185.     out.println(Feedback.viewVotes());
  186.     out.println("</p></card>");
  187.     out.println("<card title="User statistics" id="userstats">" +
  188. "<p>" + viewUsers() +
  189. "</p></card>");
  190. }
  191. out.println("</wml>");
  192.     }
  193.     /**
  194.      * <code>viewUsers</code> views the number of users (males and females).
  195.      *
  196.      * @return a <code>String</code> value
  197.      */
  198.     private static String viewUsers() {
  199. int numberOfUsers = 0;
  200. double numberOfMales = 0;
  201. Statement stmt = Members.getStatement();
  202. try {
  203.     ResultSet rs = stmt.executeQuery("SELECT sex FROM members");
  204.     while (rs.next()) {
  205. ++numberOfUsers;
  206. if (rs.getString("sex").equals("m")) ++numberOfMales;
  207.     }
  208. }
  209. catch (SQLException E){
  210.     E.printStackTrace();
  211. }
  212. if(numberOfUsers == 0)
  213.     return "No users";
  214. else
  215.     return "Users: " + numberOfUsers + "<br/>Male: " + Math.round(numberOfMales / (double)numberOfUsers * 100) + "%" 
  216. + "<br/>Female: " + Math.round(((double)numberOfUsers - numberOfMales) / (double)numberOfUsers * 100) + "%";
  217.     }
  218.     /**
  219.      * Calculates the current age on the basis of date of birth (dob) given in format "yyyy.mm.dd"
  220.      *
  221.      * @param dob a <code>String</code> value
  222.      * @return an <code>int</code> value
  223.      */
  224.     public static int ageCalculator(String dob) {
  225. SimpleDateFormat s = new SimpleDateFormat("yyyy.MM.dd");
  226. try {
  227.     java.util.Date d = s.parse(dob);
  228.     Calendar c = Calendar.getInstance();
  229.     c.setTime(d);
  230.     return Calendar.getInstance().get(Calendar.YEAR) - c.get(Calendar.YEAR);
  231. }
  232. catch(Exception e) { System.err.println(e); }
  233. return -1;
  234.     }
  235.     /** 
  236.      *  Check if the client phone supports wtai functionality.
  237.      *  The user-agent header information is utilised.
  238.      */
  239.     private boolean wtaiSupported(HttpServletRequest request) {
  240. String wtaiSupportFile = getInitParameter("wtaisupport");
  241. String userAgent = request.getHeader("User-Agent");
  242. if(userAgent == null) return false;
  243. userAgent = userAgent.toLowerCase();
  244. wtaiSupportFile = getServletContext().getRealPath(wtaiSupportFile);
  245. try {
  246.     BufferedReader reader = new BufferedReader(new FileReader(wtaiSupportFile));
  247.     String line;
  248.     while((line = reader.readLine()) != null) {
  249. line = line.trim().toLowerCase();
  250. if(line.equals(""))  break;
  251. if(userAgent.startsWith(line)) return true;
  252.     }
  253. }
  254. catch (java.io.IOException e) {
  255.     System.err.println(e);
  256. }
  257. return false;
  258.     }
  259. }