Here is some sample code that you can play with.
package com.guess.shop;
//reference to the java, javax classes
///////////////////////////////////////
import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
//reference to the cybersource classes.
///////////////////////////////////////
import com.cybersource.ics.base.message.*;
import com.cybersource.ics.base.exception.*;
import com.cybersource.ics.client.message.*;
import com.cybersource.ics.client.*;
//reference to the email classes.
///////////////////////////////////////
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
//reference to string manipulation.
///////////////////////////////////////
import com.sameday.shop.CoreString;
//reference to cart object.
///////////////////////////////////////
import com.guess.shop.CD;
public class ICSServlet extends HttpServlet
implements SingleThreadModel
{
//private member variables
//////////////////////////////
private ICSClient client;
private ICSClientRequest icsRequest;
private ICSClientOffer offer;
private int returnCode;
private ICSReply reply;
//String propertiesFile =
"../properties/ICSClient.props";
String logDir = "E:\\jswdk\\demo\\logs\\";
String strDirKeys = "E:\\jswdk\\demo\\keys\\";
//init method
//////////////////////////////////////////////////////////
public void init(ServletConfig config) throws
ServletException
{
super.init(config);
createICSClient(); // define
connection to ICS
createICSRequest(); // create new ICS
request object
offer = new ICSClientOffer(); // create offer
object
returnCode = 0; //set returnCode for
reply to initially 0
} //end init()
public void destroy()
{
super.destroy();
}
public void __service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
PrintWriter out = response.getWriter();
try
{
Integer tmpPOIntCounter = new
Integer((String)this.getServletContext().getAttribute("purchaseOrderCounter"));
tmpPOIntCounter = new
Integer(tmpPOIntCounter.intValue() + 1);
this.getServletContext().setAttribute("purchaseOrderCounter",
tmpPOIntCounter.toString());
response.setContentType("text/html");
out.println("<HR> SDLA" +
(String)this.getServletContext().getAttribute("purchaseOrderCounter"));
out.flush();
out.close();
}
catch(Exception e)
{
writeLogFile(logDir + "errors.log",
e.toString());
}
finally
{
out.flush();
out.close();
}
}
//service method
//////////////////////////////////////////////////////////
public void service(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
PrintWriter out = null;
try
{
response.setHeader("Pragma",
"No-cache");
response.setHeader("Cache-Control",
"no-cache");
response.setDateHeader("Expires", 0);
out = response.getWriter();
//check if session is valid or not.
/////////////////////////////////////
HttpSession session =
request.getSession(false);
if (session == null)
{
response.sendRedirect("/demo/error.html");
}
//get & update counter for Purchase
Order counter from servletContext level variable
////////////////////////////////////////////////////////////////////////////
Integer tmpPOIntCounter = new
Integer((String)this.getServletContext().getAttribute("purchaseOrderCounter"));
tmpPOIntCounter = new
Integer(tmpPOIntCounter.intValue() + 1);
this.getServletContext().setAttribute("purchaseOrderCounter",
tmpPOIntCounter.toString());
response.setContentType("text/html");
Hashtable hashRequestParamResults =
new Hashtable();
Enumeration enumObjNames =
request.getParameterNames();
//populate hashtable with key/data
values to send for prcessing
while (enumObjNames.hasMoreElements())
{
String headerName =
(String)enumObjNames.nextElement();
String headerValue =
(String)request.getParameter(headerName);
hashRequestParamResults.put(headerName, headerValue);
//put all key/data values into hashtable
}
hashRequestParamResults.put("StrOrderNumber",
tmpPOIntCounter.toString());
mainICSInfo(hashRequestParamResults,
response, request); //got all request parameters and
Purchase Order Counter, process to mainICSInfo
session.invalidate();
}
catch(Exception e)
{
writeLogFile(logDir + "errors.log",
e.toString());
}
finally
{
out.flush();
out.close();
}
} //end service()
//mainICSInfo method
//////////////////////////////////////////////////////////
public void mainICSInfo(Hashtable
hashRequestParams,
HttpServletResponse
response,
HttpServletRequest
request) throws Exception, ServletException,
IOException
{
try
{
PrintWriter out =
response.getWriter();
icsRequest =
fillICSRequest("ics_auth,ics_bill", request,
hashRequestParams);
//get catalog stuff from Carlos's
shopping cart -- passed in from Carlos's JSP Shopping
Cart Page
//////////////////////////////////////////////////////////
HttpSession session =
request.getSession(true);
Vector cart =
(Vector)session.getValue("com.sameday.shop.shoppingcart");
if ((cart!=null) && (cart.size()>0))
{
for (int iz = 0;
iz<cart.size();iz++)
{
com.sameday.shop.CD
lineItemObject =
(com.sameday.shop.CD)cart.elementAt(iz);
if (lineItemObject!=null)
{
//extract contents
here from Vector object in session
////////////////////////////////////////////////////////
offer = null;
offer = new
ICSClientOffer();
offer.setProductName(lineItemObject.getDescrp());
offer.setProductCode("clothing");
offer.setMerchantProductSKU(lineItemObject.getIdSku());
offer.setAmount(lineItemObject.getPrice());
offer.setQuantity(lineItemObject.getQuantity());
offer.setDescription(lineItemObject.getDescrp());
icsRequest.addOffer(offer);
}
}
}
//build offer object (LINE ITEMS)
--STUB CODE--
//////////////////////////////////////////////////
/**
offer.setProductName("Sameday Bball
Cap");
offer.setProductCode("clothing");
offer.setMerchantProductSKU("sdxus001");
offer.setAmount("7.99");
offer.setQuantity(1);
offer.setDescription("Sameday.com Logo
Baseball Cap");
offer.setPackerCode("portland10");
icsRequest.addOffer(offer);
offer = null;
offer = new ICSClientOffer();
offer.setProductName("Sameday Polo
Shirt");
offer.setProductCode("clothing");
offer.setMerchantProductSKU("sdxus002");
offer.setAmount("24.99");
offer.setQuantity(1);
offer.setDescription("Sameday.com Logo
Polo Shirt");
//offer.setPackerCode("portland10");
*/
//send order off to Cybersource
/////////////////////////////////
writeLogFile(logDir + "request.log",
icsRequest.toString());
returnCode =
processICSTrans(icsRequest, response);
//request.getSession(true).invalidate();
}
catch(Exception e)
{
writeLogFile(logDir + "errors.log",
e.toString());
writeErrorMessage(response, e.toString());
} //unsuccessful, return 0
finally
{ //return 0;
} //unsuccessful, return 0
} // end mainICSInfo
//createICSClient method
//////////////////////////////////////////////////////////
public void createICSClient() // create ICS client
object
{
try
{
Properties propInit = new Properties();
propInit.put("merchantID", "shipper");
propInit.put("serverName",
"CyberSource_SJC_US");
propInit.put("serverURL",
"http://ics2test.ic3.com:80");
//for NT
//for Unix
//String strDirKeys =
"/home/tod/todbin/jswdk/demo/properties/";
propInit.put("myPrivateKey",
strDirKeys+"shipper.pvt");
propInit.put("myCert",
strDirKeys+"shipper.crt");
propInit.put("serverCert",
strDirKeys+"CyberSource_SJC_US.crt");
propInit.put("returnPath", "none");
propInit.put("debugLevel", "5"); // log
everything
propInit.put("debugFile ", "IcsDebug.log");
client = new ICSClient(propInit);
}
catch(Exception e)
{
writeLogFile(logDir + "errors.log", "ICS Connect
Error: \n" + e.toString());
}
} //end createICSClient()
//createICSRequest method
//////////////////////////////////////////////////////////
public void createICSRequest() // create new ICS
request object
{
try
{
icsRequest = new ICSClientRequest(client);
}
catch(Exception e)
{
writeLogFile(logDir + "errors.log", "ICS Request
Error: \n" + e.toString());
}
}//enc createICSRequest()
//writeLogFile method
//////////////////////////////////////////////////////////
private synchronized void writeLogFile(String
file_name, String lines)
{
try
{
Date dateNow = new Date();
DataOutput fout = new DataOutputStream(new
FileOutputStream(file_name,true));
fout.writeBytes("###\n" +
dateNow.toString() + "\n"); // log entry seperator
fout.writeBytes(lines+"\n"); // log entry
fout.writeBytes("###\n"); // log entry
seperator
}
catch (IOException e)
{
System.out.println("Error: \n" +
e.toString());
}
}// end writeLogFile()
//writeLogFile method
//////////////////////////////////////////////////////////
private synchronized void writeLogTransFile(String
file_name, String lines)
{
try
{
Date dateNow = new Date();
DataOutput fout = new DataOutputStream(new
FileOutputStream(file_name,true));
fout.writeBytes("Transaction Date = " +
dateNow.toString() + ",\t"); // log entry seperator
fout.writeBytes(lines + "\n"); // log
entry
}
catch (IOException e)
{
System.out.println("Error: \n" +
e.toString());
}
}// end writeLogFile()
//fillICSRequest method
//////////////////////////////////////////////////////////
public ICSClientRequest fillICSRequest(String
ICSServiceName,
HttpServletRequest request,
Hashtable
hashRequestParams)
{
/**
String merchantRefNo = "007"; // Merchant PO
number goes here
String merchantID = client.getMerchantID(); //
Cybersource Merchant ID goes here
String currency = "USD"; // currency (USD, GBP,
DEM, YEN, etc.)
// Get customer's data from the form
String firstName =
request.getParameter("firstName");
String lastName = request.getParameter("lastName");
String shipAddr1 =
request.getParameter("shipAddr1");
String shipAddr2 =
request.getParameter("shipAddr2");
String city = request.getParameter("city");
String state = request.getParameter("State/Prov");
String zip = request.getParameter("zip");
String country = request.getParameter("country");
String email = request.getParameter("email");
String phone = request.getParameter("phone1");
String cardNum = request.getParameter("cardNum");
String cardExpYear =
request.getParameter("cardExpYear");
String cardExpMonth =
request.getParameter("cardExpMonth");
*/
icsRequest.addApplication(ICSServiceName);
//requesting authorize and billing services
//build icsRequest Object based on values from
SKU / request info.
////////////////////////////////////////////////////////////////////
// //(String)hashRequestParams.get("")
/////////////////////////////////////////////////////////////////////
icsRequest.setMerchantRefNo("SDLAUS"+(String)hashRequestParams.get("StrOrderNumber"));
//**need to change later to get SKU from session
hash
icsRequest.setMerchantID(client.getMerchantID());
//
icsRequest.setCustomerFirstName((String)hashRequestParams.get("bill_firstname"));
icsRequest.setCustomerLastName((String)hashRequestParams.get("bill_lastname"));
icsRequest.setCustomerEmailAddress((String)hashRequestParams.get("bill_email"));
icsRequest.setCustomerPhone((String)hashRequestParams.get("bill_phone"));
icsRequest.setBillAddress1((String)hashRequestParams.get("bill_address1"));
icsRequest.setBillAddress2((String)hashRequestParams.get("bill_address2"));
icsRequest.setBillCity((String)hashRequestParams.get("bill_city"));
icsRequest.setBillState((String)hashRequestParams.get("bill_state"));
icsRequest.setBillZip((String)hashRequestParams.get("bill_zip"));
icsRequest.setBillCountry((String)hashRequestParams.get("bill_country"));
icsRequest.setCustomerCreditCardNumber((String)hashRequestParams.get("cust_cc_num"));
icsRequest.setCustomerCreditCardExpirationMonth((String)hashRequestParams.get("cust_cc_exp_mo"));
icsRequest.setCustomerCreditCardExpirationYear((String)hashRequestParams.get("cust_cc_exp_yr"));
icsRequest.setCurrency("USD"); //always use
USD for United States
icsRequest.setShipToFirstName((String)hashRequestParams.get("ship_firstname"));
icsRequest.setShipToFirstName((String)hashRequestParams.get("ship_firstname"));
icsRequest.setShipToLastName((String)hashRequestParams.get("ship_lastname"));
icsRequest.setShipToAddress1((String)hashRequestParams.get("ship_address1"));
icsRequest.setShipToAddress2((String)hashRequestParams.get("ship_address2"));
icsRequest.setShipToCity((String)hashRequestParams.get("ship_city"));
icsRequest.setShipToState((String)hashRequestParams.get("ship_state"));
icsRequest.setShipToZip((String)hashRequestParams.get("ship_zip"));
icsRequest.setShipToCountry((String)hashRequestParams.get("ship_country"));
return icsRequest;
} //end fillICSRequest()
//processICSTrans method
//////////////////////////////////////////////////////////
public int processICSTrans(ICSClientRequest
icsRequest, HttpServletResponse response)
{
returnCode = 0;
try
{
PrintWriter out = response.getWriter();
reply = client.send(icsRequest);
returnCode = reply.getReplyCode();
//get reply string and contents
//////////////////////////////////
String tmpContext = reply.toString(); //grab
all string key/data elements from reply String.
Vector tmpVector =
CoreString.parseStringAsVector(tmpContext, "\n");
//put into vector
int z = tmpVector.size(); //get initial size
of the vector
Hashtable hashCcTransactionResults = new
Hashtable(tmpVector.size());
//build Hashtable of return Codes
for (int iz = 0; iz<z;iz++)
{
Vector tmpRowVect =
CoreString.parseStringAsVector((String)tmpVector.elementAt(iz),
"=");
hashCcTransactionResults.put((String)tmpRowVect.elementAt(0),
(String)tmpRowVect.elementAt(1));
}
//
***********************************************************************
//
String tmpStrCode =
(String)hashCcTransactionResults.get("ics_rcode");
String tmpStrFlag =
(String)hashCcTransactionResults.get("ics_rflag");
Integer IntRCodeClass = new
Integer(tmpStrCode);
int intRCode = IntRCodeClass.intValue();
if (intRCode <= 0 )//&&
(tmpStrFlag.equalsIgnoreCase("")))
{
writeDeclinedMessage(response,
(String)hashCcTransactionResults.get("ics_rmsg"));
writeLogFile(logDir + "declined.log",
reply.toString());
}
else //((intRCode == 1) &&
(tmpStrFlag.equalsIgnoreCase("SOK"))) //successful
transaction
{
writeAcceptedMessage(response,
(String)hashCcTransactionResults.get("ics_rmsg"));
writeLogFile(logDir + "accepted.log",
reply.toString());
}
}
catch(Exception e)
{
writeLogFile(logDir + "errors.log", "Error:
\n" + e.toString());
}
return returnCode;
} //end processICSTrans()
//writeDeclinedMessage()
//////////////////////////////////////
void writeDeclinedMessage(HttpServletResponse res,
String strDeclinedMessage)
throws ServletException,
IOException
{
// set content type and other response header
fields first
res.setContentType("text/html");
// get the communication channel with the
requesting client
PrintWriter out = res.getWriter();
// get the server identification
String servername =
getServletConfig().getServletContext().getServerInfo();
out.println("<!DOCTYPE HTML PUBLIC
\"-//W3C//DTD HTML 3.2//EN\">"
+ "<HTML>"
+ "<HEAD>"
+ "<TITLE>Credit Card Transaction Failure
Page </TITLE>"
+ "<META NAME=\"Author\" CONTENT=\"" +
servername + "\">"
+ "</HEAD>"
+ "<BODY BGCOLOR=\"#FFFFFF\">"
+ " <HR>"
+ " <font face = verdana color=black
size=-1><b>Sorry - We were unable to process your
order"
+ " </b></font><BR>"
+ " <font face = verdana color=black
size=-1><b>Please contact our Customer Service
Department, here at Sameday 626-435-5555 "
+ " to complete your order. <p>Reason
</font></b>: <font face = verdana color=red
size=-1><b>" + strDeclinedMessage +" </b></font>"
+ "</BODY>"
+ "</HTML>");
} //end writeDeclinedMEssage()
//writeAcceptedMessage()
///////////////////////////////////////////////////////
void writeAcceptedMessage(HttpServletResponse res,
String strAccMsg) throws ServletException, IOException
{
// set content type and other response header
fields first
res.setContentType("text/html");
// get the communication channel with the
requesting client
PrintWriter out = res.getWriter();
// get the server identification
String servername =
getServletConfig().getServletContext().getServerInfo();
String tmpMsgZ=
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML
3.2//EN\">"
+ "<HTML>"
+ "<HEAD>"
+ "<TITLE> Accepted Page </TITLE>"
+ "<META NAME=\"Author\" CONTENT=\"" +
servername + "\">"
+ "</HEAD>"
+ "<BODY BGCOLOR=\"#FFFFFF\">"
+ " <font face = verdana color=black
size=-1><b>"
+ " Your order has been accepted with
Sameday.com - Thank You! <BR>"
+ " "
+ " Your CyberSource Reference Number
is:</b></font> <font face = verdana color=red
size=-1><b> " + icsRequest.getRequestID()
+"</b></font><BR>"
+ " <font face = verdana color=black
size=-1><b>Your Sameday Reference Oder Number
is:</b></font> <font face = verdana color=red
size=-1><b> " + icsRequest.getMerchantRefNo()
+"</b></font><BR>"
+ " <font face = verdana color=black
size=-1><b>A confirmation e-mail will be sent to your
e-mail address:</b></font> <font face = verdana
color=red size=-1><b>" +
icsRequest.getCustomerEmailAddress() +"</b></font><P>"
+ " <font face = verdana color=blue
size=-1><b><A href= /demo/jsp/shopping/catalog.jsp>
Catalog </a></font><P>"
+ "</BODY>"
+ "</HTML>";
String tmpMsgSubectHeader = "Sameday.com
Order Confirmation - " + icsRequest.getMerchantRefNo()
;
String tmpMsgZEmail=
"\n Order Confirmation \n"
+"-------------------------\n"
+ "\n Your order has been accepted with
Sameday.com \n"
+ " Your CyberSource Reference Number is: " +
icsRequest.getRequestID() +"\n"
+ " Your Sameday.com Order Reference Number is:
" + icsRequest.getMerchantRefNo() +"\n"
+ " \n\nThank You! ";
out.println(tmpMsgZ);
//build simple logging message
//////////////////////////////////////
StringBuffer sbTmpXAction = new
StringBuffer();
sbTmpXAction.append("CyberSource Reference
ID = "+icsRequest.getRequestID());
sbTmpXAction.append(",\t");
sbTmpXAction.append("Order ID =
"+icsRequest.getMerchantRefNo());
sbTmpXAction.append(",\t");
sbTmpXAction.append("Customer First Name =
"+icsRequest.getCustomerFirstName());
sbTmpXAction.append(",\t");
sbTmpXAction.append("Customer Last Name =
"+icsRequest.getCustomerLastName());
sbTmpXAction.append(",\t");
sbTmpXAction.append("Customer E-Mail
Address = "+icsRequest.getCustomerEmailAddress());
sbTmpXAction.append(",\t");
sbTmpXAction.append("Customer Phone =
"+icsRequest.getCustomerPhone());
sbTmpXAction.append(",\t");
sbTmpXAction.append("Bill To Address 1 =
"+icsRequest.getBillAddress1());
sbTmpXAction.append(",\t");
sbTmpXAction.append("Bill To Address 2 =
"+icsRequest.getBillAddress2());
sbTmpXAction.append(",\t");
sbTmpXAction.append("Bill To City = "+
icsRequest.getBillCity());
sbTmpXAction.append(",\t");
sbTmpXAction.append("Bill To State = "+
icsRequest.getBillState());
sbTmpXAction.append(",\t");
sbTmpXAction.append("Bill To Country = "+
icsRequest.getBillCountry());
sbTmpXAction.append(",\t");
sbTmpXAction.append("Bill To Zip = "+
icsRequest.getBillZip());
sbTmpXAction.append(",\t");
sbTmpXAction.append("Ship To First Name =
"+icsRequest.getShipToFirstName());
sbTmpXAction.append(",\t");
sbTmpXAction.append("Ship To Last Name =
"+icsRequest.getShipToLastName());
sbTmpXAction.append(",\t");
sbTmpXAction.append("Ship To Address 1 =
"+icsRequest.getShipToAddress1());
sbTmpXAction.append(",\t");
sbTmpXAction.append("Ship To Address 2 =
"+icsRequest.getShipToAddress2());
sbTmpXAction.append(",\t");
sbTmpXAction.append("Ship To City = "+
icsRequest.getShipToCity());
sbTmpXAction.append(",\t");
sbTmpXAction.append("Ship To State = "+
icsRequest.getShipToState());
sbTmpXAction.append(",\t");
sbTmpXAction.append("Ship To Country = "+
icsRequest.getShipToCountry());
sbTmpXAction.append(",\t");
sbTmpXAction.append("Ship To Zip = "+
icsRequest.getShipToZip());
writeLogTransFile(logDir +
"transactions.log", sbTmpXAction.toString());
try{
sendEmailConfirmation(icsRequest.getCustomerEmailAddress(),
"[EMAIL PROTECTED]",
"postoffice.pacbell.net",
tmpMsgSubectHeader,
tmpMsgZEmail);
}catch(Exception ex){
writeLogFile(logDir + "errors.log",
"Exception Caught " + ex.toString());
}
}//end writeAcceptedMEssage()
//writeErrorMessage()
///////////////////////////////////////////////////////
void writeErrorMessage(HttpServletResponse res,
String strErrMsg)
throws ServletException, IOException
{
// set content type and other response header
fields first
res.setContentType("text/html");
// get the communication channel with the
requesting client
PrintWriter out = res.getWriter();
// get the server identification
String servername =
getServletConfig().getServletContext().getServerInfo();
out.println("<!DOCTYPE HTML PUBLIC
\"-//W3C//DTD HTML 3.2//EN\">"
+ "<HTML>"
+ "<HEAD>"
+ "<TITLE> Accepted Page </TITLE>"
+ "<META NAME=\"Author\" CONTENT=\"" +
servername + "\">"
+ "</HEAD>"
+ "<BODY BGCOLOR=\"#FFFFFF\">"
+ " <font face = verdana color=black
size=-1><b>"
+ " Error! <BR>"
+ " "
+ " </b></font> <HR>"
+ " <font face = verdana color=black
size=-1><b>Invalid Request.</b></font><BR>"
+ "<!-- <font face = verdana color=red
size=-1><b>Server returned: " +
strErrMsg
+ "</b></font> --></BODY>"
+ "</HTML>");
}//end writeAcceptedMEssage()
//sendEmailConfirmation()
///////////////////////////////////////////////////////
private void sendEmailConfirmation(String to,
String from,
String host,
String subject,
String msgText)
throws Exception, SendFailedException,
MessagingException, IllegalWriteException
{
boolean debug = false;
//Boolean.valueOf(args[3]).booleanValue(); //debug
flag
// create some properties and get the default
Session
Properties props = new Properties();
props.put("mail.smtp.host", host);
//if (debug) ? :;
if (debug) props.put("mail.debug", "false");
Session sessio
--- Ron Chan <[EMAIL PROTECTED]> wrote:
> Hi,
>
> maybe this will work for you:
>
> If you already have println everywhere, the simplest
> is to pipe > it to a log.dat file. then use "tail -f
> log.dat" to monitor the log.
>
> ron
>
>
> --- Stefan Henke <[EMAIL PROTECTED]> wrote:
> > Hi,
> >
> > I want to integrate a logfile into my webapp to
> > write some info to (e.g. if
> > an exception is thrown). I used a stream which
> > should be stored in a file.
> > I thought of opening a PrintWriter and add it to
> the
> > session-objects.
> > But I think this is no good idea because there is
> a
> > multi-user access to the
> > file and the streams is only written to the file
> if
> > I close the stream.
> >
> > Does anybody has a better solution?
> >
> > Thanks
> > Stefan
> >
> >
>
===========================================================================
> > To unsubscribe: mailto [EMAIL PROTECTED] with
> > body: "signoff JSP-INTEREST".
> > Some relevant FAQs on JSP/Servlets can be found
> at:
> >
> > http://java.sun.com/products/jsp/faq.html
> > http://www.esperanto.org.nz/jsp/jspfaq.html
> >
> http://www.jguru.com/jguru/faq/faqpage.jsp?name=JSP
> >
>
http://www.jguru.com/jguru/faq/faqpage.jsp?name=Servlets
>
>
> __________________________________________________
> Do You Yahoo!?
> Get Yahoo! Mail - Free email you can access from
> anywhere!
> http://mail.yahoo.com/
>
>
===========================================================================
> To unsubscribe: mailto [EMAIL PROTECTED] with
> body: "signoff JSP-INTEREST".
> Some relevant FAQs on JSP/Servlets can be found at:
>
> http://java.sun.com/products/jsp/faq.html
> http://www.esperanto.org.nz/jsp/jspfaq.html
> http://www.jguru.com/jguru/faq/faqpage.jsp?name=JSP
>
http://www.jguru.com/jguru/faq/faqpage.jsp?name=Servlets
__________________________________________________
Do You Yahoo!?
Yahoo! Messenger - Talk while you surf! It's FREE.
http://im.yahoo.com/
===========================================================================
To unsubscribe: mailto [EMAIL PROTECTED] with body: "signoff JSP-INTEREST".
Some relevant FAQs on JSP/Servlets can be found at:
http://java.sun.com/products/jsp/faq.html
http://www.esperanto.org.nz/jsp/jspfaq.html
http://www.jguru.com/jguru/faq/faqpage.jsp?name=JSP
http://www.jguru.com/jguru/faq/faqpage.jsp?name=Servlets