Feedback.java
资源名称:WAPpush.zip [点击查看]
上传用户:weisa_1
上传日期:2007-10-14
资源大小:287k
文件大小:9k
源码类别:
手机WAP编程
开发平台:
Java
- package feedback;
- import push.Winner;
- import push.PushInitiator;
- import members.Members;
- import javax.servlet.*;
- import javax.servlet.http.*;
- import java.io.*;
- import java.util.*;
- /**
- * Feedback class handles the feedback section of your WML home pages.
- *
- * Initialization parameters:
- * "questionsfile" determines the name of the file containing your questions
- * "feedbackfile" determines the name of the file where the feedback is saved
- *
- * The first line in your questionsfile contains the different choises the user can choose from
- * if the line starts with a "!" the answer will be a String
- *
- * @version 1.0
- * @since 1.0
- * @see HttpServlet
- */
- public final class Feedback extends HttpServlet {
- private static final String XML_VERSION = "<?xml version="1.0"?>";
- private static final String CONTENT_TYPE = "text/vnd.wap.wml";
- private static final String DOC_TYPE = "<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"n" +
- " "http://www.wapforum.org/DTD/wml_1.1.xml">";
- private static int numberOfQuestions=0;
- private static String grades;
- private static final Vector questions = new Vector();
- private static final String HOME_PAGE = "/index.jsp";
- private static String feedbackFile = null;
- private static Winner winner = null;
- /**
- * This is the initialization code that runs only once. (when you start the servlet)
- * The servlet is being placed into service.
- */
- public void init() throws ServletException {
- String questionsFile = getInitParameter ("questionsfile");
- questionsFile = getServletContext().getRealPath(questionsFile);
- feedbackFile = getInitParameter ("feedbackfile");
- feedbackFile = getServletContext().getRealPath(feedbackFile);
- try {
- BufferedReader reader = new BufferedReader(new FileReader(questionsFile));
- grades = reader.readLine();
- String line;
- while((line = reader.readLine()) != null) {
- if(line.trim().equals("")) break;
- questions.add(line);
- }
- }
- catch (java.io.IOException e) {
- System.err.println(e);
- }
- numberOfQuestions = questions.size();
- }
- /**
- * Called by the server to allow a servlet to handle a GET request.
- *
- * @param request a <code>HttpServletRequest</code> value
- * @param response a <code>HttpServletResponse</code> value
- * @exception ServletException if an error occurs
- * @exception IOException if an error occurs
- */
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doPost(request, response);
- }
- /**
- * Called by the server to allow a servlet to handle a POST request.
- *
- * @param request a <code>HttpServletRequest</code> value
- * @param response a <code>HttpServletResponse</code> value
- * @exception ServletException if an error occurs
- * @exception IOException if an error occurs
- */
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- /* Session tracking. See the description in index.jsp */
- HttpSession session = request.getSession();
- boolean cookiesCheck = request.getHeader("cookie") != null && request.isRequestedSessionIdValid();
- final String jsessionID = cookiesCheck ? "" : ";jsessionid=" + session.getId();
- /* Initialize a winner selecting thread that selects a winner from the set of users who has given feedback.
- It will send a push message to the winner */
- if(winner == null) {
- PushInitiator pusher = Members.getInitiator();
- if(pusher != null) {
- winner = new Winner(pusher, "http://" + request.getServerName() + ":" +
- request.getServerPort() + request.getContextPath() +
- "/services/winner.jsp", Members.getPushAddressType());
- new Thread(winner).start();
- }
- }
- /* start generating the response ... */
- response.setContentType(CONTENT_TYPE);
- PrintWriter out = response.getWriter();
- out.println(XML_VERSION);
- out.println(DOC_TYPE);
- out.println("<wml>");
- out.println("<!-- provides a way back using the prev element -->n" +
- "<template>" +
- " <do type="prev">" +
- " <prev/>" +
- " </do>" +
- "</template>");
- if(request.getParameter("action") == null) {
- out.println("<!-- questions card -->n" +
- "<card title="Feedback" id="questionsCard">" +
- "<do type="accept" label="Send form">" +
- "<go method="post" href="" + request.getRequestURI() + jsessionID + "">");
- for (int i = 0; i < numberOfQuestions; ++i)
- out.println("<postfield name="answer" + i + "" value="$(choise" + i + ")"/>");
- out.println("<postfield name="action" value="write"/>");
- out.println("<postfield name="sendname" value="$(sendname)"/>");
- out.println("</go></do>" +
- "<p>Please grade our mobile service:<br/>");
- String gradesOut = "";
- StringTokenizer st = new StringTokenizer(grades);
- for(int j=1; st.hasMoreTokens(); ++j)
- gradesOut = gradesOut + "<option value="" + j + "">" + st.nextToken() + "</option>n";
- for (int i=0; i < numberOfQuestions; ++i) {
- String question = (String)questions.get(i);
- if (question.startsWith("!")){
- out.println(question.substring(1) + " ");
- out.println("<input name="choise" + i + ""/>");
- }
- else{
- out.println(question + " ");
- out.println("<select value="Empty" title="" + question + "" name="choise" + i + "">");
- out.println("<option value="Empty">Select</option>");
- out.println(gradesOut);
- out.println("</select>");
- }
- }
- if (session.getAttribute("name") != null){
- out.println("<select name="sendname" value="yes">" +
- "<option value="yes">Include name</option>" +
- "<option value="no">Do not include name</option>" +
- "</select>");
- }
- out.println("<anchor title="Send form">Send form" +
- "<go method="post" href="" + request.getRequestURI() + jsessionID + "">");
- for (int i = 0; i < numberOfQuestions; ++i)
- out.println("<postfield name="answer" + i + "" value="$(choise" + i + ")"/>");
- out.println("<postfield name="action" value="write"/>");
- out.println("<postfield name="sendname" value="$(sendname)"/>");
- out.println("</go></anchor></p>" +
- "</card>");
- }
- else {
- out.println("<!-- Thanks about the feedback -->n" +
- "<card title="Thank you" id="thanks">" +
- " <do type="accept" label="Ok">" +
- " <go href="" + request.getContextPath() + HOME_PAGE + jsessionID + ""/>" +
- " </do>" +
- " <p>Your message has been delivered.<br/>Thank you for your feedback!<br/>" +
- ((session.getAttribute("name") != null) ?
- "Note! Each member feedback (if name included) enters a draw for wonderful prizes.<br/>" : "") +
- " <anchor title="Info pages">Info pages" +
- " <go href="" + request.getContextPath() + HOME_PAGE + jsessionID + ""/>" +
- " </anchor>" +
- " </p>" +
- "</card>");
- /* finally, update the feedback file. */
- synchronized (feedbackFile) {
- PrintWriter writer = new PrintWriter(new FileOutputStream(feedbackFile, true), true);
- for (int i = 0; i < numberOfQuestions; ++i){
- String answer = request.getParameter("answer" + i);
- writer.print(answer + ";");
- }
- if (request.getParameter("sendname") != null && request.getParameter("sendname").equals("yes"))
- writer.println((String)session.getAttribute("name"));
- else
- writer.println();
- writer.flush();
- }
- }
- out.println("</wml>");
- }
- /**
- * <code>viewVotes</code> views the information related to received feedbacks, i.e.,
- * average grades for each question.
- *
- * @return a <code>String</code> value
- */
- public static String viewVotes() {
- String returnStr = "";
- try {
- int numberOfLines = 0;
- double[] stats = new double[numberOfQuestions];
- int[] empty = new int[numberOfQuestions];
- synchronized(feedbackFile) {
- BufferedReader reader = new BufferedReader(new FileReader(feedbackFile));
- StringTokenizer st = null;
- String line;
- while ((line = reader.readLine()) != null){
- st = new StringTokenizer(line, ";");
- for (int i = 0; i < numberOfQuestions; ++i){
- String token = st.nextToken();
- if (!(token.equals("Empty"))) stats[i] = stats[i] + Integer.parseInt(token);
- else ++empty[i];
- }
- ++numberOfLines;
- }
- }
- for (int j = 0; j < numberOfQuestions; ++j)
- returnStr = returnStr + questions.get(j) + ": " +
- Math.rint(100.0*stats[j] / (numberOfLines - empty[j]))/100.0 + "<br/>";
- returnStr = returnStr + "Votes: " + numberOfLines;
- }
- catch(Exception e){ System.err.println(e); }
- return returnStr;
- }
- /**
- * Selects winner from a set of users who have returned feedback
- *
- * @param feedbackFile a <code>String</code> value
- * @return a <code>String</code> value
- */
- public static String winner() {
- try{
- synchronized(feedbackFile) {
- BufferedReader reader = new BufferedReader(new FileReader(feedbackFile));
- int numberOfPossibilities = 0;
- while (reader.readLine() != null) ++numberOfPossibilities;
- int winner = 1 + (int)(Math.random() * numberOfPossibilities);
- String winnerStr ="";
- reader = new BufferedReader(new FileReader(feedbackFile));
- for (int i = 0; i < winner; ++i) winnerStr = reader.readLine();
- StringTokenizer st = new StringTokenizer(winnerStr, ";");
- while (st.hasMoreTokens()) winnerStr = st.nextToken();
- return winnerStr;
- }
- }
- catch(FileNotFoundException e){}
- catch(IOException e){}
- return "";
- }
- }