To construct the components of project SV001585:
Code sample for GetItems.jsp:
public void init() { . . . // Load the IBM Toolbox for Java JDBC driver. DriverManager.registerDriver(new com.ibm.as400.access.AS400JDBCDriver()); // Note that we have retrieved the as400 name, userid, and password from // web.xml file using and xml parser. as400conn = DriverManager.getConnection( "jdbc:as400://" + as400 + ";naming=sql;errors=full", userid, password); dmd = as400conn.getMetaData(); . . . } public void service(HttpServletRequest request, HttpServletResponse response){ . . . Statement select = as400conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs = select.executeQuery( "SELECT PRODNO, PRODNAME, RPRICE, IMAGE FROM " + retailLibrary + dmd.getCatalogSeparator() + inventoryFile); HttpSession session = request.getSession(true); session.setAttribute("resultset", rs); response.sendRedirect("/ViewItems.jsp"); . . . }
<!--Getting the ResultSet Object from the session--><% int columnCount = 0; ResultSet rs = (ResultSet)session.getAttribute("resultset"); if(rs !=null) %> <% { rs.beforeFirst(); ResultSetMetaData rsmd = rs.getMetaData (); columnCount = rsmd.getColumnCount (); %> <TABLE border="1"> <TBODY> <TR> <TD>Product ID</TD> <TD>Name</TD> <TD width="551">Price</TD> <TD colspan="2"></TD> </TR> <%while (rs.next ()){ <TR> <!--Creating a form for this row (or this item)--> <FORM name="myform" action="/SV001585/AddtoBasket" onsubmit="return errorChecking(this);"> <!--Getting each column data from this row of ResultSet object--> <!--Process data is a user defined method to modify the data for display if needed--> <% for (int i = 1; i <= columnCount; ++i){ String value = rs.getString(i); if (rs.wasNull ()) value = "<null>"; else{ if(i==1) prodID=value; value = processData(i,value); } %> <TD><%=value%></TD> <% } %> <!--Creating quantity input field and size drop down menue--> <!--Note that we are using product id as the name of the field--> <TD width="290">Quantity <INPUT size="5" type="text" name='<%=prodID+"Q"%>' ><BR> Size <SELECT name='<%=prodID+"S"%>'> <OPTION value="s" selected>Small</OPTION> <OPTION value="m" selected>Medium</OPTION> <OPTION value="l" selected>Large</OPTION> <OPTION value="XL" selected>Extra Large</OPTION> <OPTION value="XXL" selected>Extra Extra Large</OPTION> </SELECT> </TD> <TD><INPUT type="image" name="submit" src="images/Add_to_basket.gif"></TD> </FORM> </TR> <% } %> </TBODY> </TABLE> <% }
public class AddtoBasket extends HttpServlet { //Inner class of AddtoBasket public class MyRecordIOManager extends RecordIOManager { . . . public MyRecordIOManager( String hostInfo1, String hostInfo2, String hostInfo3, String file, String lib)throws Exception{ super(hostInfo1, hostInfo2,hostInfo3,file,lib); setFileAccessType(RecordIOManager.FILEACCESS_KEYED); setCommitLockLevel(RecordIOManager.COMMITLOCKLEVEL_ALL); //journal has the same name as the database file setJournal(file); //journal is in the same library as the database file setJournalLibrary(lib); } . . . public synchronized String updateDBFile( String id, String size, String quantity ) { . . . //opening the file try { if (openFile()) { record = readRecord(key); quantityAvailable = ((BigDecimal) record.getValueAt(0,sizeColumn)).intValue(); totalQuantityAvailable = ((BigDecimal) record.getValueAt(0, 8)).intValue(); if (quantityRequested <= quantityAvailable) { newQuantity = new BigDecimal(quantityAvailable - quantityRequested); totalNewQuantity = new BigDecimal (totalQuantityAvailable - quantityRequested); record.setValueAt(newQuantity, 0, sizeColumn); record.setValueAt(totalNewQuantity, 0, 8); // Note that we update the record but we don't commit // in case the customer decides to // empty the basket in which // case we call the rollBack method updateRecord(record); status = success; } else { status = notEnough; } } else status = accessError; } catch (Exception e) { e.printStackTrace(); status = accessError; } //closing the file and adding try { closeFile(); } catch (Exception e) { //in case of error rollback try { rollback(); } catch (Exception e1) { e1.printStackTrace(); } status = accessError; } return status; } } //init method of AddtoBasket servlet public void init() { hostInfo = GetItems.getHostInfo(); } public void doGet(HttpServletRequest req, HttpServletResponse res) { . . . Basket basket = (Basket) session.getAttribute("basket"); MyRecordIOManager recIO = (MyRecordIOManager) session.getAttribute("recIO"); if (basket == null) { basket = new Basket(); session.setAttribute("basket", basket); } if(recIO == null){ if (recIO == null) { try { recIO = new MyRecordIOManager( hostInfo[0], hostInfo[1], hostInfo[2], GetItems.getInventoryFile(), GetItems.getRetailLibrary()); } catch (Exception e) { try { res.sendRedirect("errorPage.html"); return; } catch (Exception e1) { e1.printStackTrace(); } } } id = req.getParameter("id"); size = req.getParameter(id + "S"); quantity = req.getParameter(id + "Q"); status = recIO.updateDBFile(id, size, quantity); session.setAttribute("recIO", recIO); if (status.equals("SUCCESS")) { basket.addItem(id, quantity, size); try { res.sendRedirect("ViewBasket.jsp"); return; } catch (Exception e) { e.printStackTrace(); } } else { if (status.equals("NOT_ENOUGH")) { try { res.sendRedirect("insufficient.html"); return; } catch (Exception e) { e.printStackTrace(); } } else if (status.equals("ACCESS_ERROR")) { try { res.sendRedirect("errorPage.html"); return; } catch (Exception e) { e.printStackTrace(); } } } }
The following code segment shows how the PlaceOrder servlet uses the PLACEORD bean:
. . . public void init() throws ServletException { hostInfo = GetItems.getHostInfo(); super.init(); try { /* creating an instance of the PLACEORD bean created by iSeries Program Call Bean wizard */ orderBean = new PLACEORD(); orderBean.setConnectionData(hostInfo[0], hostInfo[1], hostInfo[2]); } catch (Exception e) { e.printStackTrace(); } } . . . public void doPost(HttpServletRequest request, HttpServletResponse response) { ... PLACEORD.Orditems_Struct inputStruct = null; // retrieving the order items from the basket Basket basket = (Basket) request.getSession().getAttribute("basket"); AddtoBasket.MyRecordIOManager recIO = (AddtoBasket.MyRecordIOManager) request.getSession().getAttribute("recIO"); if (basket == null || basket.size() == 0 || recIO == null) { try { response.sendRedirect("errorPage.html"); } catch (IOException e) { e.printStackTrace(); } } else { items = basket.elements(); // setting array of structure elements while (items.hasMoreElements()) { item = (String[]) items.nextElement(); inputStruct = orderBean.getOrdItemAr(j); inputStruct.setItemNo(new BigDecimal(item[0])); inputStruct.setQuantity(new BigDecimal(item[1])); inputStruct.setSizeOrd(item[2]); j = j + 1; } // setting the rest of the array elements to dummy values for (int i = j - 1; i < 100; i++) { inputStruct = orderBean.getOrdItemAr(i); inputStruct.setItemNo(new BigDecimal(0)); inputStruct.setQuantity(new BigDecimal(0)); inputStruct.setSizeOrd("s"); } // setting the other two input parameters of the bean orderBean.setNumOfItems(new BigDecimal(j)); orderBean.setBalance((BigDecimal) request.getSession().getAttribute("balance")); try { // invoking the iSeries program orderBean.invoke(); // retrieving the order number from PLACEORD bean orderNumber = (orderBean.getRetCode()).toString(); request.getSession().setAttribute("orderNumber", orderNumber); basket.empty(); // commit this order now recIO.commit(); response.sendRedirect("orderNumber.jsp"); return; } catch (Exception e) { response.sendRedirect("errorPage.html"); e.printStackTrace(); } } }
Copyright IBM Corporation 1992, 2003. All Rights Reserved.