Rambler's Top100IT • archiv

rus / eng | Логин | Комментарий к колонке | Печать | Почта | Клуб




Колонки


Enterprise JavaBeans. Часть 7

 
(Гопалан Суреш Рай)
Разработка многоуровневого приложения EJB - Клиент EJB Servlet Session бина

Клиент EJB сервлета общается с Cart session EJB и позволяет клиентам покупать книги и музыкальные альбомы по сети Интернет. Сервлет иллюстрирует примерами Cart session бин в своем методе init ( ) и общается с бином через doGet ( ) и doPost ( ) методы.

Метод  класса init ( ) и члены класса Online servlet class определяются как в номенклатуре 19:

/**

 * To run this servlet, you may have to specify the root directory

 * in the path since it needs to get at the stubs present in the

· package com.gopalan.Shop.Cart.

· чтобы запустить данный сервлет вам возможно понадобится определить root директорию в path c тех пор как ему понадобится получить на stubs в package com.gopalan.Shop.Cart

 * You should also move the Online.class file to the directory

 * specified in the -d option below.

 * вы должны также послать  файл Online.class в директорию, указанную в - d опции ниже.

 * eg., например

 * servletrunner -p 6060 -d E:\ -s E:\com\gopalan\Shop\Cart\servlet.properties

 *

 */

import java.io.*;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;

import java.rmi.*;

import com.gopalan.Shop.Cart.*;

public class Online extends HttpServlet {

 

 CartHome     home = null;

 Cart         cart = null;

 

 Vector    bookList = new Vector();

 Vector    musicList= new Vector();

 Vector    bookCart = new Vector();

 Vector    musicCart= new Vector();

 public void init(ServletConfig config) throws ServletException {

 

  super.init(config);

  System.out.println( "Called from Online::init..." );

  try{

   home = (CartHome)Naming .lookup("Cart" );

   if( null == home ) {

    System.out.println( "null CartHome returned..." );

   }

   else {

    cart = home.create();

    System.out.println( "Naming.lookup successful..." );

    System.out.println( "home.create successful..." );

   }

  } catch(Exception e){System.out.println( e );}

 }

 

 public void doGet(HttpServletRequest req, HttpServletResponse res)

  throws ServletException, IOException {

 

  System.out.println( "Called from Online::doGet..." );

  displayForm(res, "Welcome");  

 }

 

 public void doPost(HttpServletRequest req, HttpServletResponse res)

  throws ServletException, IOException {

 

  System.out.println( "Called from Online::doPost..." );

 

  int item = 0;

 

  System.out.println( "Content Type ="+

                      req.getContentType());

 

  if ("application/x-www-form-urlencoded".equals(req .getContentType())) {

   Enumeration enum = req.getParameterNames();

   while (enum.hasMoreElements()) {

    System.out.println("---------------------------------------------" );

    String name = (String) enum.nextElement();

    System.out.println("name = " + name);

   

    String values[] = req.getParameterValues(name);

    System.out.println("The No. of Values selected are ="+values.length);

   

   

    if( name.equals("MusicCombo") ) {

     for (int i = 0; i < values.length; i++) {

     

      System.out.println(values[i ]);

      item = (Integer.valueOf(values[i ])).intValue();

      cart.addToMusicCart (((ReturnSet)musicList.elementAt (item-1)).code);

     }

    }

    if( name.equals("BooksCombo") ) {

     for (int i = 0; i < values.length; i++) {

     

      System.out.println(values[i ]);

      item = (Integer.valueOf(values[i ])).intValue();

      cart.addToBooksCart (((ReturnSet)bookList.elementAt (item-1)).code);

     }

    }

   

    if( name.equals("BuyButton") ) {

     cart.flushBooksCart();

     cart.flushMusicCart();

    }

    System.out.println("---------------------------------------------" );

   }

  }     displayForm(res, "Welcome");  

 }

 

 

 private void displayForm(HttpServletResponse response, String message)

  throws IOException {

 

  System.out.println( "Called from Online::displayForm..." );

  if( ( home == null ) || (cart == null)) {

   try{

    home = (CartHome)Naming.lookup("Cart" );

    cart = home.create();

   } catch(Exception e){ System.out.println( e ); }

  }

  response.setContentType("text/html");

  PrintWriter  out = response.getWriter();

  out.println("<html><body bgcolor=\"#FFFFFF\">");

  out.println("<p align=\"center\"><font size=\"2\" face=\"Verdana\">");

  out.println("<strong>Horse and Stable Online, Inc.</strong></font></p>");

 

  out.println("<p><font size=\"1\" face=\"Verdana\">");

  out.println("<strong>List of Books Available-Make your Selection</strong></font></p>");

  out.println("<form method=\"POST\">");

  out.println("<p><font size=\"1\" face=\"Verdana\">");

  out.println("<select name=\"BooksCombo\" multiple size=\"2\">");

 

  bookList = cart.getBooksList();

  System.out.println("Book List of size "+bookList.size()+" is...");

  for(int i = 0; i < bookList.size(); i++) {

   ReturnSet set = (ReturnSet)bookList.elementAt(i );

   System.out.println( "code = " +set.code +

                       " Title = " +set.title +

                       " Author = " +set.authors);

   out.println("<option value=\""+ set.code +

               "\">ISBN = "+

               set.code+" Title = "+set.title+" Authors = "+set.authors+" List Price = $"+set.price+" Discount = "+

               set.discount+"% Our Price = $"+set.ourPrice+

               "</option>");

  }

  out.println("</select><input type=\"submit\" name=\"BooksButton\"");

  out.println("value=\"Add to Books Shopping Cart\"></font></p></form>");

 

  out.println("<p><font size=\"1\" face=\"Verdana\">");

  out.println("<strong>Books you added to your Shopping Cart</strong></font></p>");

  out.println("<div align=\"center\"><center>");

  out.println("<table border=\"1\"><tr>");

  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>ISBN</strong></font></td>" );

  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>Book Title</strong></font></td>");

  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>Author(s)</strong></font></td>" );

  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>Actual Price(in US Dollars)</strong></font></td>");

  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>Discount(% in Percentage)</strong></font></td>");

  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>Your Price(in US Dollars)</strong></font></td></tr>");

 

  bookCart = cart.getBooksCart();

  System.out.println("Book Cart of size "+bookCart.size()+" is...");

  for(int i = 0; i < bookCart.size(); i++) {

   ReturnSet set = (ReturnSet)bookCart.elementAt(i );

   System.out.println( "code = " +set.code +

                       " Title = " +set.title +

                       " Author = " +set.authors);

   out.println("<tr>");

   out.println("<td align=\"right\"><font size=\"1\" face=\"Verdana\">" + set.code);

   out.println("</font></td><td align=\"right\"><font size=\"1\" face=\"Verdana\">"+set.title);

   out.println("</font></td><td align=\"right\"><font size=\"1\" face=\"Verdana\">"+set.authors);

   out.println("</font></td><td align=\"right\"><font size=\"1\" face=\"Verdana\">$"+set.price);

   out.println("</font></td><td align=\"right\"><font size=\"1\" face=\"Verdana\">"+set.discount+ " %");

   out.println("</font></td><td align=\"right\"><font size=\"1\" face=\"Verdana\">$"+set.ourPrice);

   out.println("</tr>");

  }

  out.println("</table></center></div>" );

  out.println("<p align=\"left\"><font size=\"1\" face=\"Verdana\">");

  out.println("You have selected "+ cart.getNumberBooks() +

              " books for a total cost of $"+ cart.getBooksTotal() + "</font></p>");

 

  out.println("<p><font size=\"1\" face=\"Verdana\">");

  out.println("<strong>List of Music CDs Available-Make your Selection</strong></font></p>");

  out.println("<form method=\"POST\">");

  out.println("<p><font size=\"1\" face=\"Verdana\">");

  out.println("<select name=\"MusicCombo\" multiple size=\"2\">");

 

  musicList = cart.getMusicList();

  System.out.println("Music List of size "+musicList.size()+" is...");

  for(int i = 0; i < musicList.size(); i++) {

   ReturnSet set = (ReturnSet)musicList.elementAt(i );

   System.out.println( "code = " +set.code +

                       " Title = " +set.title +

                       " Author = " +set.authors);

   out.println("<option value=\""+ set.code +

               "\"> Code ="+

               set.code+" Album = "+set.title+" Composers = "+set.authors+" List Price = $"+set.price+" Discount = "+

               set.discount+"% Our Price = $"+set.ourPrice+

               "</option>");

  }

  out.println("</select><input type=\"submit\" name=\"MusicButton\"");

  out.println("value=\"Add to Music Shopping Cart\"></font></p></form>");

 

  out.println("<p><font size=\"1\" face=\"Verdana\">");

  out.println("<strong>Albums you added to your Shopping Cart</strong></font></p>");

  out.println("<div align=\"center\"><center>");

  out.println("<table border=\"1\"><tr>");

  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>code</strong></font></td>" );

  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>Album Title</strong></font></td>");

  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>Composer(s)</strong></font></td>" );

  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>Actual Price(in US Dollars)</strong></font></td>");

  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>Discount(% in Percentage)</strong></font></td>");

  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>Your Price(in US Dollars)</strong></font></td></tr>");

 

  musicCart = cart.getMusicCart();

  System.out.println("Book Cart of size "+musicCart.size()+" is...");

  for(int i = 0; i < musicCart.size(); i++) {

   ReturnSet set = (ReturnSet)musicCart.elementAt(i );

   System.out.println( "code = " +set.code +

                       " Title = " +set.title +

                       " Author = " +set.authors);

   out.println("<tr>");

   out.println("<td align=\"right\"><font size=\"1\" face=\"Verdana\">" + set.code);

   out.println("</font></td><td align=\"right\"><font size=\"1\" face=\"Verdana\">"+set.title);

   out.println("</font></td><td align=\"right\"><font size=\"1\" face=\"Verdana\">"+set.authors);

   out.println("</font></td><td align=\"right\"><font size=\"1\" face=\"Verdana\">$"+set.price);

   out.println("</font></td><td align=\"right\"><font size=\"1\" face=\"Verdana\">"+set.discount+ " %");

   out.println("</font></td><td align=\"right\"><font size=\"1\" face=\"Verdana\">$"+set.ourPrice);

   out.println("</tr>");

  }

  out.println("</table></center></div>" );

  out.println("<p align=\"left\"><font size=\"1\" face=\"Verdana\">");

  out.println("You have selected "+ cart.getNumberAlbums() +

              " CD Albums for a total cost of $"+ cart.getAlbumsTotal() + "</font></p>");

 

  out.println("<hr><p align=\"left\"><font size=\"1\" face=\"Verdana\">");

  out.println("<strong>Total Price of Items selected = $"+ cart.getGrandTotal() + "</strong></font></p>");

  out.println("<form method=\"POST\"><p><font size=\"2\" face=\"Verdana\">");

  out.println("<input type=\"submit\" name=\"BuyButton\" value=\"Buy\"></font></p>");

  out.println("</form>");

  out.println("</body></html>" );

 }

 

}

Listing 19: Listing of the Online Servet Листинг 19: Листинг класса Online Servet

Как было показано ранее на рисунке 6 клиент browser начинает весь процесс отправкой сообщения GET  на Online servlet, который находится на Web сервере. Это служит причиной того, метод init ( ) класса Online servlet начинает искать Cart бин на EJB сервере и создавать его. Метод Cart EJB’s setSessionContext(), который является одним из первых методов, вызываемых когда создается session-бин, ищет Book entity EJB и >Music entity EJB и создает их. Как было указано ранее, >entities - это прямое отображение записей в >domain-модель базы данных >Shop, которая ассоциируется с этими entities. Затем >entities EJB (Book и Music) взаимодействуют с базой данных (Shop) для сервиса запросов с >session EJB (Cart).

Я полагаю, что устройство servlet получается из комплекта программного обеспечения для разработки, хотя пример servlet должен также хорошо работать и с другими устройствами. Для запуска сервлета

1. Скопируйте файлы Online.class и servlet.properties в директорию root

2. Убедитесь в том, что сервер EJB включен и работает

3. 3. Запустите servletrunner командой servletrunner -p 6060 -d E:\ -s E:\com\gopalan\Shop\ServletClient\servlet.properties

Экран должен затем выглядеть так

E:\>copy .\com\gopalan\Shop\ServletClient\Online.class
1 file(s) copied.
E:\>copy .\com\gopalan\Shop\ServletClient\servlet.properties
1 file(s) copied.
E:\>servletrunner -p 6060 -d E:\ -s E:\com\gopalan\Shop\ServletClient\servlet.properties
servletrunner starting with settings:
port = 6060
backlog = 50
max handlers = 100
timeout = 5000
servlet dir = E:\
document dir = .\examples
servlet propfile = E:\com\gopalan\Shop\ServletClient\servlet.properties
Online: init
Called from Online::init...
Naming.lookup successful...
home.create successful...
Called from Online::doGet...
Called from Online::displayForm...
Book List of size 4 is...
code = 1 Title = Book1 Author = Author1
code = 2 Title = Book2 Author = Author2
code = 3 Title = Book3 Author = Author3
code = 4 Title = Book4 Author = Author4
Book Cart of size 0 is...
Music List of size 4 is...
code = 1 Title = Album1 Author = Composer1
code = 2 Title = Album2 Author = Composer2
code = 3 Title = Album3 Author = Composer3
code = 4 Title = Album4 Author = Composer4
Book Cart of size 0 is...
Called from Online::doPost...
Content Type =application/x-www-form-urlencoded
---------------------------------------------
name = BooksButton
The No. of Values selected are =1
---------------------------------------------
---------------------------------------------
name = BooksCombo
The No. of Values selected are =2
1
2
---------------------------------------------
Called from Online::displayForm...
Book List of size 4 is...
code = 1 Title = Book1 Author = Author1
code = 2 Title = Book2 Author = Author2
code = 3 Title = Book3 Author = Author3
code = 4 Title = Book4 Author = Author4
Book Cart of size 2 is...
code = 1 Title = Book1 Author = Author1
code = 2 Title = Book2 Author = Author2
Music List of size 4 is...
code = 1 Title = Album1 Author = Composer1
code = 2 Title = Album2 Author = Composer2
code = 3 Title = Album3 Author = Composer3
code = 4 Title = Album4 Author = Composer4
Book Cart of size 0 is...
Called from Online::doPost...
Content Type =application/x-www-form-urlencoded
---------------------------------------------
name = MusicCombo
The No. of Values selected are =2
2
4
---------------------------------------------
---------------------------------------------
name = MusicButton
The No. of Values selected are =1
---------------------------------------------
Called from Online::displayForm...
Book List of size 4 is...
code = 1 Title = Book1 Author = Author1
code = 2 Title = Book2 Author = Author2
code = 3 Title = Book3 Author = Author3
code = 4 Title = Book4 Author = Author4
Book Cart of size 2 is...
code = 1 Title = Book1 Author = Author1
code = 2 Title = Book2 Author = Author2
Music List of size 4 is...
code = 1 Title = Album1 Author = Composer1
code = 2 Title = Album2 Author = Composer2
code = 3 Title = Album3 Author = Composer3
code = 4 Title = Album4 Author = Composer4
Book Cart of size 2 is...
code = 2 Title = Album2 Author = Composer2
code = 4 Title = Album4 Author = Composer4

Сейчас запустите свой Web browser и получите доступ к servlet's URL

http://127.0.0.1:6060/servlet/Online

Рисунок 7 показывает типичный session browser клиента, взаимодействующего с сервером для покупки книг и музыкальных CD с оперативного склада.

Рисунок 7: Оценка клиента оперативного склада

TOC | Часть 8 >




Справка | Условия Copyright © 1999 — 2008, IT • archiv.
В начало | Логин | Комментарий к колонке | Поиск | Почта