|
 |
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();
}
}
}
|
|
 |