Adv Java Apps
-
Upload
akshay-verma -
Category
Documents
-
view
248 -
download
0
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/