Adv Java Apps

download Adv Java Apps

of 39

Transcript of Adv Java Apps

  • 7/28/2019 Adv Java Apps

    1/39

    UMBC

    Advanced Java

    Applications

    Shon Vick

    CMSC 331

  • 7/28/2019 Adv Java Apps

    2/39

    UMBC

    2

    Agenda

    We will look at some advanced techniquesand applications of Java

    The first will take a quick look at some datastructures built into the language

    Next will show be how Java and Object

    Orientation can be applied to networking Finally we will be to show Reflection in

    Java

  • 7/28/2019 Adv Java Apps

    3/39

    UMBC

    3

    Hashtable Example

    Hashtable numbers = new Hashtable();

    numbers.put("one", new Integer(1));

    numbers.put("two", new Integer(2));

    numbers.put("three", new Integer(3));

    key value

  • 7/28/2019 Adv Java Apps

    4/39

    UMBC

    4

    Hashtable Example

    Integer n = (Integer)numbers.get("two");

    if (n != null) {

    System.out.println("two = " + n);}

    ObjectSpecific

    Object

  • 7/28/2019 Adv Java Apps

    5/39

    UMBC

    5

    Many Other Collections

    Vector

    Stack

    LinkedList

    Dictionary

    ArrayList http://www.javasoft.com/products/jdk/1.2/d

    ocs/api/index.html for a complete list

  • 7/28/2019 Adv Java Apps

    6/39

    UMBC

    6

    Networking

    Using the networking capabilities provided

    in the Java environment is quite easy

    We will see how to use Sockets

  • 7/28/2019 Adv Java Apps

    7/39

    UMBC

    7

    Sockets

    Lower-level network communication

    Clientuses some service

    Server - provides some service

    TCP provides a reliable, point-to-point

    communication channel for client-server

    apps

  • 7/28/2019 Adv Java Apps

    8/39

    UMBC

    8

    What Is a Socket?

    A socket is one endpoint of a two-way

    communication link between two

    programs running on the network.

    A socket is bound to a port number so that

    the TCP layer can identify the application

    that data is destined to be sent.

  • 7/28/2019 Adv Java Apps

    9/39

    UMBC

    9

    How do Sockets work?

    A server runs on a specific computer and has a

    socket that is bound to a specific port number.

    Client knows the hostname and port of server and

    tries to make a connection request

  • 7/28/2019 Adv Java Apps

    10/39

    UMBC

    10

    Connection established

    If the server accepts the connection it gets a

    new socket bound to a different port.

    It needs a new socket (and consequently adifferent port number) so that it can

    continue to listen to the original socket

  • 7/28/2019 Adv Java Apps

    11/39

    UMBC

    11

    How does Java support Sockets

    The java.net package provides a class,

    Socket, that implements one side of a two-

    way connection between your Java programand another program on the network

    It also includes the ServerSocket class,

    which implements a socket that servers canuse to listen for and accept connections to

    client

  • 7/28/2019 Adv Java Apps

    12/39

  • 7/28/2019 Adv Java Apps

    13/39

    UMBC

    13

    Establish the Socket connection

    try {

    echoSocket = new Socket(avatar ", 7777);

    out = new PrintWriter(echoSocket.getOutputStream(), true);

    in = new BufferedReader(new

    InputStreamReader(echoSocket.getInputStream()));}

    catch

    Host PortOutput

    Input

  • 7/28/2019 Adv Java Apps

    14/39

    UMBC

    14

    Need to Catch Exceptions

    }

    catch (UnknownHostException e) {

    System.err.println("Don't know about host: avatar.");System.exit(1);

    }

    catch (IOException e) {

    System.err.println("Couldn't get I/O for "+ "the connection to: avatar.");

    System.exit(1);

    }

  • 7/28/2019 Adv Java Apps

    15/39

    UMBC

    15

    Simple Socket Example

    BufferedReader stdIn = new BufferedReader(

    new InputStreamReader(System.in));String userInput;

    while ((userInput = stdIn.readLine()) != null) {

    out.println(userInput);

    System.out.println("echo: " + in.readLine());

    }

    Set up a mechanism to read from standard input

    Output whats read back from Server

    Write toServer

    Read from standard input

  • 7/28/2019 Adv Java Apps

    16/39

    UMBC

    16

    Close up Shop on Client side

    out.close( );

    in.close( );

    stdIn.close( );

    echoSocket.close( );

  • 7/28/2019 Adv Java Apps

    17/39

    UMBC

    17

    Basic Steps

    Open a socket.

    Open an input stream and output stream to

    the socket.

    Read from and write to the stream

    according to the server's protocol.

    Close the streams.

    Close the socket.

  • 7/28/2019 Adv Java Apps

    18/39

    UMBC

    18

    Same Basic Steps

    This client program is straightforward and

    simple because the Echo server implements

    a simple protocol Even with more complicated protocols such

    as HTTP server, your client program while

    more complicated will follow the samebasics as this simple example

  • 7/28/2019 Adv Java Apps

    19/39

    UMBC

    19

    Server

    A server must open a SeverSocket

    ServerSocket server = new ServerSocket( 7777 );

    Call accept on that socket creating a new

    socket

    Socket socket = server.accept();

    Socket acts as socket from client

  • 7/28/2019 Adv Java Apps

    20/39

    UMBC

    20

    If a socket is a pipe

    We could conceptualize this like so:

    Client

    Server

    Ports

    The Socket Plumbing The things flowing

    through the

    Plumbing

  • 7/28/2019 Adv Java Apps

    21/39

    UMBC

    21

    The Answer Is ..

    A Number of things can conceptually flowthrough the pipe

    We will focus on two: Objects Characters from a String

    We looked at several examples last time

    The first was a simple echo programa very simpleprotocolgive me back what I gave you (Strings)

    We also looked at simpleprotocol example (ProtocolObjects)

  • 7/28/2019 Adv Java Apps

    22/39

    UMBC

    22

    Objects flow through the Pipe

    Let first address the case where we want to

    have objects flowing over the pipe

    Must have at least the followingmechanisms for

    Objects to be written by the server

    Objects to be read by the client

  • 7/28/2019 Adv Java Apps

    23/39

    UMBC

    23

    The newprotocol Client

    public class Client {

    Socket socket = new Socket( "127.0.0.1", 9999 );

    //

    ObjectInputStream input =new ObjectInputStream(socket.getInputStream() );

    // read using serialization

    NewProtocol protocol = (NewProtocol)(input.readObject() )

    System.out.println(Protocol: + protocol);

    socket.close();

  • 7/28/2019 Adv Java Apps

    24/39

    UMBC

    24

    The newprotocol Server

    class ThreadedSocket extends Thread {

    // here is where all the real work is done.

    private Socket socket;

    ThreadedSocket( Socket socket ) {

    this.socket = socket;

    //

    ObjectOutputStream output =new ObjectOutputStream(socket.getOutputStream() );

    output.writeObject( protocol );

  • 7/28/2019 Adv Java Apps

    25/39

    UMBC

    25

    Reading and Writing Objects

    An ObjectOutputStream writes primitive datatypes and graphs of Java objects to anOutputStream.

    The objects can be read (reconstituted) using anObjectInputStream.

    General Mechanism

    This works for the sockets as was just shown but isactually more general

    Persistent storage of objects can be accomplished byusing a file for the stream.

  • 7/28/2019 Adv Java Apps

    26/39

    UMBC

    26

    File example

    For example to write an object that can be

    read by the example in ObjectInputStream

    FileOutputStream ostream = new FileOutputStream(foo.bar");

    ObjectOutputStream p = new ObjectOutputStream(ostream);

    p.writeInt(12345);

    p.writeObject("Today");

    p.writeObject(new Date());p.flush();

    ostream.close();

  • 7/28/2019 Adv Java Apps

    27/39

    UMBC

    27

    The read counterpart

    FileInputStream istream = new FileInputStream(" foo.bar ");

    ObjectInputStream p = new ObjectInputStream(istream);

    int i = p.readInt();String today = (String)p.readObject();

    Date date = (Date)p.readObject();

    istream.close();

  • 7/28/2019 Adv Java Apps

    28/39

    UMBC

    28

    The Needed Java Framework

    Only objects that support the java.io.Serializable

    interface can be written to streams.

    The class of each serializable object is encodedincluding the class name and signature of the

    class, the values of the object's fields and arrays,

    and the closure of any other objects referenced

    from the initial objects

    This relates to introspection/reflection which we

    will discuss shortly

  • 7/28/2019 Adv Java Apps

    29/39

    UMBC

    29

    More about the Framework

    The default deserialization mechanism for

    objects restores the contents of each field to

    the value and type it had when it waswritten.

    Marshalling of Objects (Serialize)

    Un marshaling of Object (Serialize)

  • 7/28/2019 Adv Java Apps

    30/39

    UMBC

    30

    Deserialization

    & Object Reflection

    Fields declared as transient or static are ignored by

    the deserialization process.

    References to other objects cause those objects tobe read from the stream as necessary.

    Graphs of objects are restored correctly using a

    reference sharing mechanism.

    New objects are always allocated when deserializing,which prevents existing objects from being overwritten

    Reflection

  • 7/28/2019 Adv Java Apps

    31/39

    UMBC

    31

    Reflection Allows

    Determination of the class of an object.

    Creation of an instance of a class whosename is not known until runtime.

    Obtaining information about a class'smodifiers, fields, methods, constructors, and

    superclasses. Determination of constants and method

    declarations that belong to an interface

  • 7/28/2019 Adv Java Apps

    32/39

    UMBC

    32

    Reflection Also Allows

    Allows one to get and set the value of an object's

    field, even if the field name is unknown to your

    program until runtime. Allows one to invoke a method on an object, even

    if the method is not known until runtime.

    Create a new array, whose size and component

    type are not known until runtime, and then modify

    the array's components.

  • 7/28/2019 Adv Java Apps

    33/39

    UMBC

    33

    Examining Classes

    A way to get information about classes at runtime

    For each class, the Java Runtime Environment

    (JRE) maintains an immutable Class object that

    contains information about the class. A Class

    object represents, or reflects, the class

    To get this information you need to get the Class

    object that reflects the class

  • 7/28/2019 Adv Java Apps

    34/39

    UMBC

    34

    You can retrieve a Class object in several ways:

    Class c = foo.getClass() // for some object named foo

    Bar b = new Bar();

    Class c = b.getClass();

    Class s = c.getSuperclass();

    Retrieving Class Objects

    Foo

    Bar

  • 7/28/2019 Adv Java Apps

    35/39

    UMBC

    35

    Other Ways of Retrieving

    Class Objects

    If you know the name of the class at

    compile time, you can retrieve its Class

    object by appending .class to its name:

    Class c = java.awt.Button.class;

    You can also use the Class.forName static

    method:

    Class c = Class.forName(commandNameToken)

  • 7/28/2019 Adv Java Apps

    36/39

    UMBC

    36

    Getting the Class Name

    Every class in the Java programming language hasa name. When you declare a class, the nameimmediately follows the class keyword

    At runtime, you can determine the name of a Classobject by invoking the getName method. TheString returned by getName is the fully-qualifiedname of the class.

    A good home study question: Given an instanceprints the names of the classes its inheritancehierarchy from least specific to most specificexcluding Object

  • 7/28/2019 Adv Java Apps

    37/39

    UMBC

    37

    An Example

    import java.lang.reflect.*;

    import java.awt.*;

    class SampleName {

    public static void main(String[] args) {

    Button b = new Button();

    printName(b);

    }

    static void printName(Object o) {

    Class c = o.getClass();

    String s = c.getName();

    System.out.println(s);

    }}

    Need Reflection

    PackageTo Do this

  • 7/28/2019 Adv Java Apps

    38/39

    UMBC

    38

    Selected References

    Advanced Techniques for Java Developers,Berg&Fritzinger, Wiley, 1999 Chapter 4

    http://java.sun.com/docs/books/tutorial/networking/index.html

    The Java Programming Language , K.Arnold andJ. Gosling , Addison-Wesley , 1996

    Java in a Nutshell , D. Flanagan, O'Reilly andAssociates

    http://java.sun.com/products/jdk/1.2/docs/

  • 7/28/2019 Adv Java Apps

    39/39

    UMBC

    39

    More References

    The Java Programming Language ,

    K.Arnold and J. Gosling , Addison-Wesley ,

    1996 Java in a Nutshell , D. Flanagan, O'Reilly

    and Associates

    http://java.sun.com/products/jdk/1.2/docs/