Wrox Home  
Search P2P Archive for: Go

  Return to Index  

pro_wap thread: Immediate Attention!


Message #1 by "huanguowei" <huanguowei@h...> on Mon, 10 Feb 2003 18:42:04 +0800
I'm runninng WAPMail.java app. I can reach until the login screen. then after finished entering user
name & password, the "login" button" fail to appear. Instead "back" button appear. So, I having trouble geting to the next page.
Thanx.

file://WAPMail.java

import java.io.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.servlet.*;
import javax.servlet.http.*;
file://import com.wapmail.util.WML;

import java.util.Date;
file://import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;


public class WAPMailBack extends HttpServlet implements SingleThreadModel
{
 private static String inboxString = "INBOX";
 private static UserSessionData _userSessionData;

 public void doGet (HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException
 {
  this.doPost(request, response);
 }

 public void doPost (HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException
 {
  UserSessionData userSessionData = getUserSessionData();
  String action = request.getParameter("action");

  file://Main decision making "loop"
  try
  {
   file://SHOW SPLASH SCREEN
       if ((action == null) || ((!action.equalsIgnoreCase("login"))
    && (userSessionData == null)))
   {
    this.splashScreen(request, response);
   }

   file://LOGIN
   else if (action.equalsIgnoreCase("login"))
   {
    this.login(request, response);
   }

   file://LOGOUT
   else if (action.equalsIgnoreCase("logout"))
   {
    this.logout(request, response);
   }

   file://SHOW MAIN MENU
   else if (action.equalsIgnoreCase("mainmenu"))
   {
    this.mainMenu(request, response, this.getUserSessionData());
   }

   file://COMPOSE
   else if (action.equalsIgnoreCase("compose"))
   {
    this.compose(request, response);
   }

   file://SEND
   else if (action.equalsIgnoreCase("send"))
   {
    this.send(request, response, this.getUserSessionData());
   }

   file://VIEW IN BOX
   else if (action.equalsIgnoreCase("viewinbox"))
   {
    this.viewInbox(request, response, this.getUserSessionData());
   }

   file://READ
   else if (action.equalsIgnoreCase("read"))
   {
    this.read(request, response, this.getUserSessionData());
   }  

   file://DELETE
   else if (action.equalsIgnoreCase("delete"))
   {
    this.deleteMessage(request, response, this.getUserSessionData());
   }

   file://REPLY 
   else if (action.equalsIgnoreCase("reply"))
   {
    this.replyToMessage(request, response, this.getUserSessionData());
   }
  }

  catch (MessagingException me)
  {
   me.printStackTrace();
  }
 }

 public void splashScreen(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException, MessagingException
 {
  this.splashScreen(request, response, "");
 }


 public void splashScreen(HttpServletRequest request, HttpServletResponse response, String message)
  throws ServletException, IOException, MessagingException
 {
  WML wml = new WML();
  wml.addCard("WAPMailSplash");
  wml.println("<do type=\"accept\" label=\"Login\">" + 
    "<go href=\"" + request.getRequestURI() + "\" method=\"post\">" +
    "<postfield name=\"action\" value=\"login\"/>" +
    "<postfield name=\"uid\" value=\"$uid\"/>" +
    "<postfield name=\"pwd\" value=\"$pwd\"/>" +
    "</go>" +
    "</do>" +
    "<p align=\"center\">" +
    "WAP E-Mail" +
    "</p>");

  if (message != "")
  {
   wml.println("<p align=\"left\">" +
        "<i>" + message + "</i>" +
               "</p>");
  }

  wml.println("<p>" + 
       "Username: " +
       "<input name=\"uid\" title=\"user name\"/><br/>" +
              "Password: " +
           "<input name=\"pwd\" type=\"password\" title=\"password\"/><br/>" +
           "</p>");
  wml.endCard();
  wml.outputWML(response, true);
 }
 
 public void login(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException, MessagingException
 {
  try
  {
   String pop3host = "pop.mail.yahoo.com";
   String smtphost = "smtp.mail.yahoo.com ";
   String username = request.getParameter("uid");
   String password = request.getParameter("pwd");
   
   file://Get SMTP Session
   Properties props = System.getProperties();
   props.put("mail.smtp.host", smtphost);

   file://Get SMTP session
   Session smtpSession = Session.getInstance (props, null);
   smtpSession.setDebug(false);

   file://Get POP3 Session
   Session pop3Session = Session.getInstance (System.getProperties(), null);
   pop3Session.setDebug(false);

   file://Get POP3 Store
   Store pop3Store = pop3Session.getStore("pop3");
   pop3Store.connect(pop3host, username, password);

   file://Create a new UserSessionData object
   UserSessionData usd = new UserSessionData (smtpSession, pop3Session,
           pop3Store, username);
   this.setUserSessionData(usd);

   file://if all okay, show main menu
   this.mainMenu(request, response, usd);
  }

  catch (Exception e)
  {
   e.printStackTrace();
   this.splashScreen (request, response, "Error logging in!");
  }
 }

 public void logout (HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException, MessagingException
 {
  try
  {
   this.getUserSessionData().destroy();
   this._userSessionData = null;

   WML wml = new WML();
   wml.addCard("WAPMailLogout");
   wml.println("<p align=\"left\">" + 
        "Thank You For Using WAP Mail<br/>" + 
        "<anchor>Restart E-mail" + 
        "<go href=\"" + request.getRequestURI() + "\"/>" +
        "</anchor>" +
        "</p>");

   wml.endCard();
   wml.outputWML(response, true);
  }

  catch (Exception e)
  {
   e.printStackTrace();
  }
 }

 public void mainMenu (HttpServletRequest request, HttpServletResponse response,
  UserSessionData userSessionData)
  throws ServletException, IOException, MessagingException
 {
  try
  {
   WML wml = new WML();
   wml.addCard("WAPMailMainMenu", "Main Menu");
   wml.println("<p align=\"left\">" + 
        "<anchor>1. Read Mail " + this.getInboxCount(userSessionData) + 
        "<go href=\"" + request.getRequestURI() + 
        "?action=viewinbox\"/>" +
        "</anchor><br/>" +
        "<anchor>2. Compose " +
        "<go href=\"" + request.getRequestURI() + 
        "?action=compose\"/>" +
        "</anchor><br/>" +
        "<anchor>3. Logout " +
        "<go href=\"" + request.getRequestURI() + 
        "?action=logout\"/>" +
        "</anchor><br/>" +
        "</p>");
   wml.endCard();
   wml.outputWML(response, true);
  }

  catch (Exception e)
  {
   e.printStackTrace();
  }
 }

 public void compose (HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException, MessagingException
 {
  this.compose(request, response, "", "");
 }

 public void compose (HttpServletRequest request, HttpServletResponse response, 
  String to, String subject) throws ServletException, IOException, 
  MessagingException
 {
  WML wml = new WML();
  wml.addCard("WAPMailCompose");
  wml.println("<p>" + 
              "<fieldset title=\"Compose\">" +
       "To:<input name=\"to\" maxlength=\"100\" emptyok=\"false\"" +
       " value=\"" + to + "\"/><br/>" +
       "cc:<input name=\"cc\" maxlength=\"100\" emptyok=\"true\"/><br/>" +
        "Subject:<input name=\"subject\" value=\"" + subject +
       "\" emptyok=\"true\"/><br/>" +
       "Text:<input name=\"text\" maxlength=\"500\" emptyok=\"true\"/><br/>" +
       "</fieldset>" +
       "<anchor> Send " +
       "<go href=\"" + request.getRequestURI() + "\" method=\"post\">" +
       "<postfield name=\"action\" value=\"send\"/>" +
       "<postfield name=\"to\" value=\"$to\"/>" +
       "<postfield name=\"cc\" value=\"$cc\"/>" + 
       "<postfield name=\"subject\" value=\"$subject\"/>" +
       "<postfield name=\"text\" value=\"$text\"/>" +
       "</go>" +
       "</anchor>" +
       "</p>");
  wml.endCard();
  wml.outputWML(response,true);
 } 
  
 public void send (HttpServletRequest request, HttpServletResponse response,
  UserSessionData userSessionData) throws ServletException, IOException,
  MessagingException
 {
  try
  {
   String from = userSessionData.getEmailAddress();
   String to = request.getParameter("to");
   String cc = request.getParameter("cc");
   String subject = request.getParameter("subject");
   String text = request.getParameter("text");

   file://Define message
   MimeMessage message = new
   MimeMessage(userSessionData.getSmtpSession());
   message.setFrom(new InternetAddress(from));
   message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
   
   try 
   {
    message.addRecipient(Message.RecipientType.CC,
     new InternetAddress(cc));
   }

   catch (AddressException ae)
   {
    file://Bad cc address
   }
  
   message.setSubject(subject);
   message.setText(text);

   file://send message
   Transport.send(message);

   this.mainMenu(request, response, userSessionData);
  }

  catch (Exception e)
  {
   e.printStackTrace();
  }
 }

 public void viewInbox (HttpServletRequest request, HttpServletResponse response,
  UserSessionData userSessionData) throws ServletException, IOException,
  MessagingException
 {
  try
  {
   file://Get Folder
   Folder folder = userSessionData.getPop3Store().getFolder(inboxString);
   folder.open(Folder.READ_ONLY); 
   
   file://Get Directory
   Message message[] = folder.getMessages();
   int n = message.length;

   WML wml = new WML();
   wml.addCard("WAPMailViewInbox");
   wml.println("<p align=\"left\">");
   wml.println("Inbox:<br/>");

   for(int i=0; i<n; i++)
   {
    String emailAddress = ((InternetAddress)message[i].getFrom()[0]).getAddress();
    wml.println((i+1) + ": " + emailAddress + "<br/>" +
                message[i].getSubject() + "<br/>" +
         "<anchor>Read" +
         "<go href=\"" + request.getRequestURI() + "\"method=\"post\">" +
         "<postfield name=\"action\" value=\"read\"/>" +
         "<postfield name=\"index\" value=\"" + (i+1) + "\"/>" +
         "</go>" +
         "<anchor/><br/>" +
         "<anchor>Delete" +
         "<go href=\"" + request.getRequestURI() + "\" method=\"post\">" +
         "<postfield name=\"action\" value=\"delete\"/>" +
         "<postfield name=\"index\" value=\"" + (i+1) + "\"/>" +
         "</go>" +
         "</anchor><br/>" + 
         "------------<br/>");
   }

   wml.println("</p>" +
        "<p>" +
        "<anchor>Main Menu" +
        "<go href=\"" + request.getRequestURI() + "?action=mainmenu\"/>" +
        "</anchor>" +
        "</p>");
  
   wml.endCard();
   wml.outputWML(response, true);

   file://Close Connection
   folder.close(false);
  }

  catch (Exception e)
  {
   e.printStackTrace();
  }
 } 

 public void read (HttpServletRequest request, HttpServletResponse response,
  UserSessionData userSessionData) throws ServletException, IOException,
  MessagingException
 {
  try
  {
   file://Get Folder
   Folder folder = userSessionData.getPop3Store().getFolder(inboxString);
   folder.open(Folder.READ_ONLY);
 
   file://Get Message
   String indexString = request.getParameter("index");

   int messageIndex = Integer.parseInt(indexString);
   Message message = folder.getMessage(messageIndex);
   Object messageContent = message.getContent();

   WML wml = new WML();
   wml.addCard("WAPMailReadMail");
   String emailAddress = ((InternetAddress)message.getFrom()[0]).getAddress();
   wml.println("<p align=\"left\">" +
        "From: " + emailAddress + "<br/>" +
         message.getSubject() + "<br/>" +
                "------------<br/>");

   if(message.isMimeType("text/plain") &&
    messageContent instanceof String)
   {
    wml.println((String)messageContent);
   }
   
   else
   {
    wml.println("Error!WAP Mail can only read plaintext e-mails.");
   }

   wml.println("------------<br/>" + 
        "<anchor>Reply" +
        "<go href=\"" + request.getRequestURI() + "\" method=\"post\">" +
        "<postfield name=\"action\" values\"reply\"/>" +
        "<postfield name=\"to\" value=\"" + emailAddress + "\"/>" +
        "<postfield name=\"subject\" value=\"Re: " +
         message.getSubject() + "\"/>" +
        "</go>" +
        "</anchor><br/>" +
        "<anchor>Delete" +
        "<go href=\"" + request.getRequestURI() + "\" method=\"post\">" +
        "<postfield name=\"action\" value=\"delete\"/>" +
        "<postfield name=\"index\" value=\"" + messageIndex + "\"/>" +
        "</go>" +
        "</anchor><br/>" + 
        "------------<br/>" + 
        "</p>" +
        "<p>" +  
        "<anchor>Main Menu" +
        "<go href=\"" + request.getRequestURI() + "?action=mainmenu\"/>" +
        "</anchor><br/>" +
        "<anchor>Back to Inbox" +
        "<go href=\"" + request.getRequestURI() + "?action=viewinbox\"/>" +
        "</anchor>" + 
        "</p>");

   wml.endCard();
   wml.outputWML(response, true);

   file://close connection
   folder.close(false);
  }

  catch (Exception e)
  {
   e.printStackTrace();
  }
 }
 
 public void deleteMessage (HttpServletRequest request, HttpServletResponse response,
  UserSessionData userSessionData) throws ServletException, IOException,
  MessagingException
 {
  try
  {
   file://Get folder
   Folder folder = userSessionData.getPop3Store().getFolder(inboxString);
   folder.open(Folder.READ_WRITE);
 
   file://Get Directory
   int messageIndex = Integer.parseInt(request.getParameter("index"));
   Message message = folder.getMessage(messageIndex);

   message.setFlag(Flags.Flag.DELETED, true);

   file://Close Connection
   folder.close(true);

   this.mainMenu(request, response, userSessionData);
  }

  catch (Exception e)
  {
   e.printStackTrace();
  }
 }

 public void replyToMessage (HttpServletRequest request, HttpServletResponse response,
  UserSessionData userSessionData) throws ServletException, IOException,
  MessagingException
 {
  file://Not Using reply Mechanism of the Message Object
  String to = request.getParameter("to");
  String subject = request.getParameter("subject");
  this.compose(request, response, to, subject);
 }

 public String getInboxCount (UserSessionData userSessionData) throws Exception
 {
  file://Get Folder
  Folder folder = userSessionData.getPop3Store().getFolder(inboxString);
  folder.open(Folder.READ_ONLY);

  file://Get Count
  int totalCount = folder.getMessageCount();

  file://Close Connection
  folder.close(false);

  return "(total: " + totalCount + ")";
 }

 private static UserSessionData getUserSessionData()
 {
  return _userSessionData;
 }

 private static void setUserSessionData(UserSessionData usd)
 {
  _userSessionData = usd;
 }

 public String getServerletInfo()
 {
  return "A Simple WAP e-mail application servlet.";
 } 

}
   



file://Storage class for user's session information
class UserSessionData
{
 private Session _smtpSession;
 private Session _pop3Session;
 private Store _pop3store;
 private String _userEmailAddress;

 public UserSessionData (Session newSmtpSession, Session newPop3Session, Store newPop3Store,
    String newUserEmailAddress)
 {
  setSmtpSession (newSmtpSession);
  setPop3Session (newPop3Session);
  setPop3Store (newPop3Store);
  setEmailAddress (newUserEmailAddress);
 }

 public void destroy()
 {
  try
  {
   if (getPop3Store() != null)
   {
    getPop3Store().close();
   }
  }

  catch (Exception e)
  {
   e.printStackTrace();
  }
 }

 public void setEmailAddress (String newUserEmailAddress)
 {
  _userEmailAddress = newUserEmailAddress;
 }

 public String getEmailAddress()
 {
  return _userEmailAddress;
 }

 public Session getSmtpSession()
 {
  return _smtpSession;
 }

 public void setSmtpSession (Session newSmtpSession)
 {
  _smtpSession = newSmtpSession;
 }

 public Session getPop3Session()
 {
  return _pop3Session;
 }

 public void setPop3Session (Session newPop3Session)
 {
  _pop3Session = newPop3Session;
 }

 public Store getPop3Store()
 {
  return _pop3store;
 }

 public void setPop3Store (Store newPop3Store)
 {
  _pop3store = newPop3Store;
 }
}


file://WML.java

file://package com.wapmail.util;

/*import java.util.Date;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
*/
file://Utility class encapsulating some basic WML
class WML
{
 private StringBuffer _buffer;
 private static final int _deckSize = 1024;

 private void setBuffer(StringBuffer newBuffer)
 {
  _buffer = newBuffer;
 }

 private StringBuffer getBuffer()
 {
  return _buffer;
 }

 public WML()
 {
  setBuffer(new StringBuffer(_deckSize));
  beginDeck();
 }

 private void beginDeck()
 {
  getBuffer().append("<?xml  version=\"1.0\"?>");
  getBuffer().append("<DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\"" +
       "\"http://www.wapforum.org/DTD/wml_1.1.xml\">");
  getBuffer().append("<wml>");
 }

 private void endDeck()
 {
  getBuffer().append("</wml>");
 }

 public void addCard(String id)
 {
  getBuffer().append("<card id=\"" + id + "\">");
 }

 public void addCard(String id, String title)
 {
  getBuffer().append("<card id= \"" + id + "\" title=\"" + title + "\">");
 }

 public void endCard()
 {
  getBuffer().append("</card>");
 }

 public void println(String line)
 {
  getBuffer().append(line);
 }

 private String getDeck()
 {
  endDeck();
  return getBuffer().toString();
 }

 public void outputWML(HttpServletResponse response, boolean disableCaching)
 {
  PrintWriter writer = null;
  try
  {
   response.setContentType("text/vnd.wap.wml");
   if(disableCaching)
   {
    file://send a NO CACHING instruction to the user agent
    response.setHeader("Cahce-Control", "must-revalidate, no-store");
   }

   file://Set the Data header to help calculate cahce timeouts
   Date now = new Date();
   long timeNow = now.getTime();
   response.setDateHeader("Date", timeNow);

   writer = response.getWriter();
   writer.println(this.getDeck());
  }

  catch (IOException ioe)
  {
   ioe.printStackTrace();
  }

  finally
  {
   if (writer !=null)
    writer.close();
  }
 }
}


  Return to Index