Java Mailing List Archive

http://www.junlu.com/

Home » Home (12/2007) » Apache Tomcat »

Re: Applet does not send request to servlet

Teh Noranis Mohd Aris

2007-01-17

Replies:

Hi,
 
I'm sorry, I didn't realize about the attachment capability for this mailing list. However here are the programs that I attached previously. Hope someone can help me out. Thank you.
 
1. THE SERVLET PROGRAM:
 
package myapp;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Hashtable;
public class AppletLogin extends HttpServlet
{
public static String USER_KEY = "ServletLogin.user";

static Hashtable crossRef = new Hashtable();

public void doGet(HttpServletRequest req, HttpServletResponse resp)
 throws ServletException, java.io.IOException
 {
  resp.setContentType("text/html");
 
  PrintWriter out = resp.getWriter();
 
  resp.setHeader("Expires", "Tues, 01 Jan 1980 00:00:00 GMT");
 
  HttpSession session = req.getSession();
  String user = (String) session.getAttribute(USER_KEY);
 
  if (user == null)
  {
    user = (String) crossRef.get(session.getId());
   
    if (user != null)
    {
     session.setAttribute(USER_KEY, user);
     crossRef.remove(session.getId());
    }
 
 
  }
 
 if (user == null)
 {
  login(out, req, resp);
  return;
 }
 
 out.println("<html>");
 out.println("<head>");
 out.println("<title>Welcome</title>");
 out.println("</head>");
 out.println("<body>");
 out.println("<center><h2>Welcome to our site!</h2>");
 out.println("<br>");
 out.println("More cool stuff coming soon...");
 out.println("</center>");
 
 out.println("</body>");
 out.println("</html>");
 out.flush();  
}

public void doPost(HttpServletRequest req, HttpServletResponse resp)
 throws ServletException, java.io.IOException
{
DataInputStream in = new DataInputStream(req.getInputStream());

resp.setContentType("application/octet-stream");

ByteArrayOutputStream byteOut = new ByteArrayOutputStream();

DataOutputStream out = new DataOutputStream(byteOut);

String sessionId = in.readUTF();

String user = in.readUTF();
String password = in.readUTF();
 
if (!validUser(user, password))
{
 out.writeBoolean(false);
}
else
{
 crossRef.put(sessionId, user);
 out.writeBoolean(true);
 
 String nextPage = req.getScheme() + "://" +
 
 req.getServerName() + ":" +
 req.getServerPort() +
 req.getRequestURI();
 
 out.writeUTF(nextPage);
}

out.flush();

byte[] buf = byteOut.toByteArray();

resp.setContentLength(buf.length);

ServletOutputStream servletOut = resp.getOutputStream();

servletOut.write(buf);
servletOut.close();
}

protected void login (PrintWriter out,
               HttpServletRequest req,
               HttpServletResponse resp)
  throws java.io.IOException
{
 HttpSession session = req.getSession();
 
 out.println("<html>");
 out.println("<head>");
 out.println("<title>Login</title>");
 out.println("<center><h2>Welcome! Please login</h2>");
 out.println("<applet width=300 height=120");
 out.println("name=\"LoginApplet\"");
 out.println("codebase=\"" + req.getContextPath() + "/applets/\"");
 out.println("code=\"webide.applets.LoginApplet\">");
 out.println("<param name=\"servlet\" value=\"" +
         req.getRequestURI() + "\">");
   out.println("<param name=\"id\" value=\"" +
           session.getId() + "\">");
   out.println("</applet>");
   out.println("</center></body></html>");      
}

protected boolean validUser(String username, String password)
{
 boolean valid = false;
 
 if ((username != null) && (username.length() > 0))
 {
  valid = username.equals(password);
 }
 
 return valid;
 
}
 
}
 
2. THE APPLET PROGRAM:
 
package myapp.applets;
import java.applet.*;
import java.awt.*;
import java.io.*;
import java.net.*;
public class LoginApplet extends Applet
{
TextField username;
TextField password;
Label message;
Button login;
String codeBase;
String servlet;
String nextDoc;
String sessionId;

public void init()
{
codeBase = "" + getCodeBase();
servlet = getParameter("servlet");

if (servlet != null)
{
 if (servlet.startsWith("/") &&
    codeBase.endsWith("/"))
    {
    codeBase = codeBase.substring(0,codeBase.length() - 1);
    }
}

sessionId = getParameter("id");

setBackground(Color.white);

setLayout(new BorderLayout(0, 5));

message = new Label();
add("North", message);

Panel p = new Panel();
p.setLayout(new GridLayout(2, 2, 30, 20));

p.add(new Label("Enter user name:"));
username = new TextField(10);
p.add(username);

p.add(new Label("Enter password:"));
password = new TextField(10);
password.setEchoCharacter('*');
p.add(password);

add("Center", p);

login = new Button("Login");
add("South", login);
}

public boolean handleEvent(Event event)
{
if ((event != null) && (event.id == event.ACTION_EVENT))
{
 if (event.target == login)
 {
  message.setText("");
 
  String user = username.getText();
  String pw = password.getText();
 
  boolean valid = false;
  try
  {
  valid = validate(user, pw);
  }
  catch (Exception ex)
  {
  ex.printStackTrace();
  }
 
  if (!valid)
  {
  message.setText("Invalid user - please try again");
  }
  else
  {
  try
  {
   URL url = new URL(nextDoc);
   System.out.println("showing " + url);
   getAppletContext().showDocument(url);
  }
  catch (Exception ex)
  {
   message.setText("Invalid document: " + nextDoc);
   ex.printStackTrace();
  }
  }
 }
}
return false;
}
protected boolean validate(String user, String pw) throws Exception
{
boolean valid = false;

java.net.URL url = new java.net.URL(codeBase + servlet);

java.net.URLConnection con = url.openConnection();

con.setUseCaches(false);
con.setDoOutput(true);
con.setDoInput(true);

ByteArrayOutputStream byteOut = new ByteArrayOutputStream();

DataOutputStream out = new DataOutputStream(byteOut);

out.writeUTF(sessionId);

out.writeUTF(user);
out.writeUTF(pw);

out.flush();

byte buf[] = byteOut.toByteArray();

con.setRequestProperty("Content-type", "application/octet-stream");

con.setRequestProperty("Content-length", "" + buf.length);

DataOutputStream dataOut = new DataOutputStream(con.getOutputStream());
dataOut.write(buf);

dataOut.flush();
dataOut.close();

DataInputStream in = new DataInputStream(con.getInputStream());

valid = in.readBoolean();
System.out.println("valid user=" + valid);

if (valid)
{
 nextDoc = in.readUTF();
 System.out.println("next document=" + nextDoc);
}

in.close();
return valid;
}
}

 
TEH NORANIS

Zack Grafton <zachary.grafton@(protected):
I would have to agree with the attachment capability of this mailing list.

Zack

Andre Prasetya wrote:
> i think attachments are disabled...
>
> On 1/17/07, Teh Noranis Mohd Aris wrote:
>>
>> Hi,
>>
>> I already solve the problem of loading my applet in the web browser.
>> Thank
>> you to all. Now, I'm having the problem to send request from the
>> applet to
>> the servlet. Attached is the AppletLogin.java (the servlet which I
>> put in
>> package myapp) and LoginApplet.java (the applet which I put in package
>> myapp.applets). I use http://localhost:8080/myapp/AppletLogin to access
>> the applet. The same username and password input should link to
>> "Welcome to
>> our site", "More cool stuff coming soon" but I got the "Invalid user -
>> please try again" message. I tried to modify the codeBase variable in
>> the
>> init() method of the applet but could not link to the next page. I think
>> that the applet cannot access the servlet in package myapp. The attached
>> programs are only short programs in a book. I just want to organize the
>> programs in my own directory. Does anyone have any other ideas why
>> this is
>> happening? Please help me! Thank you in advance.
>>
>> Yours Sincerely,
>> TEH NORANIS
>>
>> ------------------------------
>> Need a quick answer? Get one in minutes from people who know. Ask your
>> question on Yahoo!
>> Answers.
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> To start a new topic, e-mail: users@(protected)
>> To unsubscribe, e-mail: users-unsubscribe@(protected)
>> For additional commands, e-mail: users-help@(protected)
>>
>>
>
>


---------------------------------------------------------------------
To start a new topic, e-mail: users@(protected)
To unsubscribe, e-mail: users-unsubscribe@(protected)
For additional commands, e-mail: users-help@(protected)




---------------------------------
Finding fabulous fares is fun.
Let Yahoo! FareChase search your favorite travel sites to find flight and hotel bargains.
©2008 junlu.com - Jax Systems, LLC, U.S.A.