• 沒有找到結果。

Chapter 19

N/A
N/A
Protected

Academic year: 2022

Share "Chapter 19"

Copied!
24
0
0

加載中.... (立即查看全文)

全文

(1)

Chapter 19

Java 

N E d

Never Ends

Multithreading Multithreading

• In Java, programs can have multiple threads

A thread is a separate computation process

• Threads are often thought of as computations that run in

• Threads are often thought of as computations that run in  parallel

– Although they usually do not really execute in parallel g y y y p

– Instead, the computer switches resources between threads so  that each one does a little bit of computing in turn

• Modern operating systems allow more than one program

• Modern operating systems allow more than one program  to run at the same time

– An operating system uses threads to do this

Copyright © 2012 Pearson Addison‐Wesley. All rights reserved. 19‐2

Thread sleep Thread.sleep

Th d l i t ti th d i th l Th d th t

• Thread.sleep is a static method in the class Thread that  pauses the thread that includes the invocation

– It pauses for the number of milliseconds given as an argument It pauses for the number of milliseconds given as an argument – Note that it may be invoked in an ordinary program to insert a pause 

in the single thread of that program

• It may throw a checked exception

• It may throw a checked exception, 

InterruptedException, which must be caught or  declared

– Both the  Thread and  InterruptedException classes are in  the package java.lang

Copyright © 2012 Pearson Addison‐Wesley. All rights reserved. 19‐3

The getGraphics Method The getGraphics Method

• The method  getGraphics is an accessor  method that returns the associated 

Graphics object of its calling object

– Every JComponent has an associated – Every  JComponent has an associated 

Graphics object

Component.getGraphics();

Copyright © 2012 Pearson Addison‐Wesley. All rights reserved. 19‐4

(2)

A Nonresponsive GUI A Nonresponsive GUI

Th f ll i t i i l GUI th t

• The following program contains a simple GUI that  draws circles one after the other when the "Start" 

button is clicked button is clicked

– There is a 1/10 of a second pause between drawing each  circle

f h l d b l k d h

• If the close‐window button is clicked, nothing 

happens until the program is finished drawing all its  circles

circles

• Note the use of the Thread.sleep (in the method  doNothing g ) and  ) getGraphics g p (in the method  ( fill) methods

Copyright © 2012 Pearson Addison‐Wesley. All rights reserved. 19‐5

Nonresponsive GUI (Part 1 of 9) Nonresponsive GUI (Part 1 of 9) 

Copyright © 2012 Pearson Addison‐Wesley. All rights reserved. 19‐6

Nonresponsive GUI (Part 2 of 9)

Nonresponsive GUI (Part 2 of 9)  Nonresponsive GUI (Part 3 of 9) Nonresponsive GUI (Part 3 of 9) 

(3)

Nonresponsive GUI (Part 4 of 9) Nonresponsive GUI (Part 4 of 9) 

Copyright © 2012 Pearson Addison‐Wesley. All rights reserved. 19‐9

Nonresponsive GUI (Part 5 of 9) Nonresponsive GUI (Part 5 of 9) 

19‐10 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Nonresponsive GUI (Part 6 of 9) Nonresponsive GUI (Part 6 of 9) 

19‐11 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Nonresponsive GUI (Part 7 of 9) Nonresponsive GUI (Part 7 of 9) 

19‐12 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(4)

Nonresponsive GUI (Part 8 of 9) Nonresponsive GUI (Part 8 of 9) 

19‐13 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Nonresponsive GUI (Part 9 of 9) Nonresponsive GUI (Part 9 of 9) 

19‐14 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Fixing a Nonresponsive Program Using Threads Fixing a Nonresponsive Program Using Threads

Thi i h h l i d b d

• This is why the close‐window button does not  respond immediately:

B th th d fill i i k d i th b d f th – Because the method fill is invoked in the body of the 

method actionPerformed, the method 

actionPerformed does not end until after the method  fill ends

– Therefore, the method actionPerformed does not  d til ft th th d fill d

end until after the method fill ends

– Until the method actionPerformed ends, the GUI  cannot respond to anything else

cannot respond to anything else

Fixing a Nonresponsive Program Using Threads Fixing a Nonresponsive Program Using Threads

Thi i h t fi th bl

• This is how to fix the problem:

– Have the actionPerformed method create a new  (independent) thread to draw the circles

(independent) thread to draw the circles

– Once created, the new thread will be an independent  process that proceeds on its own

N th k f th ti P f d th d i

– Now, the work of the actionPerformed method is  ended, and the main thread (containing 

actionPerformed) is ready to respond to something  l

else 

– If the close‐window button is clicked while the new thread 

draws the circles, then the program will end , p g

(5)

The Class Thread The Class Thread

I J h d i bj f h l h d

• In Java, a thread is an object of the class Thread

• Usually, a derived class of  Thread is used to 

h d

program a thread

– The methods run and start are inherited from Thread

Th d i d l id th th d t

– The derived class overrides the method run to program  the thread

– The method The method start start initiates the thread processing and initiates the thread processing and  invokes the run method

19‐17 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A Multithreaded Program that Fixes a  Nonresponsive GUI

Th f ll i i h d d d

• The following program uses a main thread and a second  thread to fix the nonresponsive GUI

– It creates an inner class Packer t c eates a e c ass ac e that is a derived class of Thread t at s a de ed c ass o ead – The method run is defined in the same way as the previous method 

fill

Instead of invoking fill the actionPerformed method now – Instead of invoking  fill , the  actionPerformed method now 

creates an instance of Packer, a new independent thread named  packerThread

The packerThread object then invokes its start method – The packerThread object then invokes its start method – The start method initiates processing and invokes run

19‐18 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Threaded Version of FillDemo (Part 1 of 6) Threaded Version of FillDemo (Part 1 of 6)

The GUI produced is identical to the GUI produced by Display 19.1  except that in this version the close window button works even  while the circles are being drawn, so you can end the GUI early if while the circles are being drawn, so you can end the GUI early if  you get bored.

19‐19 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Threaded Version of FillDemo (Part 2 of 6) Threaded Version of FillDemo (Part 2 of 6)

19‐20 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(6)

Threaded Version of FillDemo (Part 3 of 6) Threaded Version of FillDemo (Part 3 of 6)

19‐21 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Threaded Version of FillDemo (Part 4 of 6) Threaded Version of FillDemo (Part 4 of 6)

19‐22 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Threaded Version of FillDemo (Part 5 of 6)

Threaded Version of FillDemo (Part 5 of 6) Threaded Version of FillDemo (Part 6 of 6) Threaded Version of FillDemo (Part 6 of 6)

(7)

The Runnable Interface The Runnable Interface

• Another way to create a thread is to have a class  implement the Runnable interface

– The Runnable interface has one method heading:

public void run();

• A class that implements Runnable must still be run  from an instance of  Thread

– This is usually done by passing the Runnable object as  an argument to the thread constructor

19‐25 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The Runnable Interface:  Suggested   Implementation Outline

public class ClassToRun extends SomeClass implements Runnable

{ . . .

public void run() public void run() {

// Fill this as if ClassToRun // were derived from Thread // were derived from Thread }

. . .

public void startThread() public void startThread() {

Thread theThread = new Thread(this);

theThread.run(); ();

} . . . }

19‐26 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The Runnable Interface (Part 1 of 5) The Runnable Interface (Part 1 of 5)

19‐27 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The Runnable Interface (Part 2 of 5) The Runnable Interface (Part 2 of 5)

19‐28 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(8)

The Runnable Interface (Part 3 of 5) The Runnable Interface (Part 3 of 5)

19‐29 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The Runnable Interface (Part 4 of 5) The Runnable Interface (Part 4 of 5)

19‐30 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The Runnable Interface (Part 5 of 5)

The Runnable Interface (Part 5 of 5) Race Conditions Race Conditions

• When multiple threads change a shared  variable it is sometimes possible that the  p

variable will end up with the wrong (and often  unpredictable) value

unpredictable) value.

• This is called a race condition because the 

f l l h h h

final value depends on the sequence in which  the threads access the shared value.

• We will use the Counter class to demonstrate  a race condition

a race condition.

(9)

Counter Class Counter Class

19‐33 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Race Condition Example Race Condition Example

1. Create a single instance of the Counter class.

2. Create an array of many threads (30,000 in the example) 

h h th d f th i l i t f th

where each thread references the single instance of the  Counter class.

3 Each thread runs and invokes the increment() method 3. Each thread runs and invokes the increment() method.

4. Wait for each thread to finish and then output the value of  the counter If there were no race conditions then its value the counter.  If there were no race conditions then its value  should be 30,000.  If there were race conditions then the  value will be less than 30,000.

19‐34 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Race Condition Test Class (1 of 3) Race Condition Test Class (1 of 3)

19‐35 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Race Condition Test Class (2 of 3) Race Condition Test Class (2 of 3)

19‐36 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(10)

Race Condition Test Class (3 of 3) Race Condition Test Class (3 of 3)

19‐37 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Thread Synchronization Thread Synchronization

• The solution is to make each thread wait so  only one thread can run the code in  y

increment() at a time.

This section of code is called a critical region

This section of code is called a critical region .  Java allows you to add the keyword 

h l

synchronized around a critical region to 

enforce that only one thread can run this code  at a time.

19‐38 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Synchronized Synchronized

• Two solutions:

Networking with Stream Sockets Networking with Stream Sockets

Transmission Control Protocol – TCP

– Most common network protocol on the Internet p – Called a reliable protocol because it guarantees 

that data sent from the sender is received in the that data sent from the sender is received in the  same order it is sent

S

Server

– Program waiting to receive input

Client

Program that initiates a connection to the server

– Program that initiates a connection to the server

(11)

Sockets Sockets

• A socket describes one end of the connection  between two programs over the network.  It  consists of:

consists of:

– An address that identifies the remote computer,  e g IP Address

e.g. IP Address

– A port for the local and remote computer

• Number between 0 and 65535

• Identifies the program that should handle data received 

b th t k

by the network

• Only one program may bind to a port

P 0 1024 d f h i

• Ports 0 to 1024 are reserved for the operating system

19‐41 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Client/Server Socket Example p

19‐42 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Sockets Programming Sockets Programming

• Very similar to File I/O using a 

FileOutputStream p but instead we  substitute a DataOutputStream

• We can use localhost as the name of the

• We can use localhost as the name of the  local machine

• Socket and stream objects throw checked  exceptions

exceptions

– We must catch them

19‐43 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Date and Time Server (1 of 2) Date and Time Server (1 of 2)

1 import java.util.Date;

2 import java.net.ServerSocket;

3 import java.net.Socket;

4 import java.io.DataOutputStream;

5 import java.io.BufferedReader;

6 import java.io.InputStreamReader;

7 import java.io.IOException;

8 public class DateServer

9 {

10 public static void main(String[] args)

11 {

12 Date now = new Date( );

13 try

14 {

15 System.out.println("Waiting for a connection on port 7654.");

16 ServerSocket serverSock = new ServerSocket(7654);

17 Socket connectionSock = serverSock.accept( );

18 BufferedReader clientInput = new BufferedReader(

19 new InputStreamReader(connectionSock.getInputStream( )));

19‐44 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

20 DataOutputStream clientOutput = new DataOutputStream(

21 connectionSock.getOutputStream( ));

(12)

Date and Time Server (2 of 2) Date and Time Server (2 of 2)

22 System.out.println("Connection made, waiting for client " +

23 "to send their name.");

24 String clientText = clientInput.readLine( );

25 String replyText = "Welcome, " + clientText + 26 ", Today is " + now.toString( ) + "\n";

27 clientOutput.writeBytes(replyText);

28 System.out.println("Sent: " + replyText);

29 clientOutput.close( );

30 clientInput.close( );

31 connectionSock.close( );

32 serverSock.close( );

33 }

34 catch (IOException e)

35 {

System.out.println(e.getMessage( ));

36 }

37 }

38 }

SAMPLE DIALOGUE (AFTER CLIENT CONNECTS TO SERVER) Waiting for a connection on port 7654.

Connection made, waiting for client to send their name.

19‐45 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

, g

Sent: Welcome, Dusty Rhodes, Today is Fri Oct 13 03:03:21 AKDT 2006

Date and Time Client (1 of 2) Date and Time Client (1 of 2)

1 import java.net.Socket;

2 import java.io.DataOutputStream;

3 import java.io.BufferedReader;

4 import java.io.InputStreamReader;

5 import java.io.IOException;

6 public class DateClient

7 {

8 public static void main(String[] args)

9 {

10 try

11 {

12 String hostname = "localhost";

13 int port = 7654;

14 System.out.println("Connecting to server on port " + port);

15 Socket connectionSock = new Socket(hostname, port);

16 BufferedReader serverInput = new BufferedReader(

17 new InputStreamReader(connectionSock.getInputStream( )));

18 DataOutputStream serverOutput = new DataOutputStream(

19 connectionSock.getOutputStream( ));

19‐46 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Date and Time Client (2 of 2) Date and Time Client (2 of 2)

20 System.out.println("Connection made, sending name.");

21 serverOutput.writeBytes("Dusty Rhodes\n");

22 System.out.println("Waiting for reply.");

23 String serverData = serverInput.readLine( );

24 System.out.println("Received: " + serverData);

25 serverOutput.close( );

26 serverInput.close( );

27 connectionSock.close( );

28 }

29 catch (IOException e)

30 {

31 System.out.println(e.getMessage( ));

32 }

33 }

34 }

SAMPLE DIALOGUE (AFTER CLIENT CONNECTS TO SERVER) SAMPLE DIALOGUE (AFTER CLIENT CONNECTS TO SERVER) Connecting to server on port 7654

Connection made, sending name.

Waiting for reply.

Waiting for reply.

Received: Welcome, Dusty Rhodes, Today is Fri Oct 13 03:03:21 AKDT 2006

Sockets and Threading Sockets and Threading

• The server waits, or blocks, at the 

serverSock.accept() call until a client  connects.

• The client and server block at the readLine() calls if data is not available.

• This can cause an unresponsive network program  s ca cause a u espo s e e o p og a and difficult to handle connections from multiple  clients on the server end

• The typical solution is to employ threading

(13)

Threaded Server Threaded Server

• For the server, the accept() call is typically  placed in a loop and a new thread created to 

p p

handle each client connection:

while (true) {

Socket connectionSock = serverSock.accept( );

ClientHandler handler = new ClientHandler(connectionSock);

Thread theThread = new Thread(handler);

theThread.start( );

}

19‐49 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

JavaBeans JavaBeans

JavaBeans is a framework that facilitates software  building by connecting software components from  different sources

– Some may be standard

– Others may be designed for a particular application

• Components built using this framework are more  easily integrated and reused

19‐50 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The JavaBeans Model The JavaBeans Model

S ft t (i l ) th t f ll th

• Software components (i.e., classes) that follow the  JavaBeans model are required to provide the  following interface services or abilities:

following interface services or abilities:

1. Rules to ensure consistency in writing interfaces:

– For example, all accessor methods must begin with get, and all  mutator methods must begin with set

mutator methods must begin with  set – This is required, not optional

2. An event handling model:

– Essentially, the event‐handling model for the AWT and Swing

19‐51 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The JavaBeans Model The JavaBeans Model

3. Persistence:

– A component (such as a JFrame) can save its state (e.g.,  in a database), and therefore retain information about its in a database), and therefore retain information about its  former use

4. Introspection:

– An enhancement of simple accessor and mutator methods  that includes means to find what access to a component is  available, as well as providing access

5. Builder support:

– Integrated Development Environments (IDEs) designed to  connect JavaBean components to produce a final

connect JavaBean components to produce a final  application (e.g., Sun's Bean Builder)

19‐52 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(14)

JavaBeans and Enterprise JavaBeans JavaBeans and Enterprise JavaBeans

A JavaBean (often called a JavaBean component or  just a Bean) is a reusable software component that  satisfies the requirements of the JavaBeans 

framework

– It can be manipulated in an IDE designed for building  applications out of Beans

The Enterprise JavaBean framework extends the  JavaBeans framework to more readily accommodate  business applications

19‐53 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Java and Database Connections: SQL Java and Database Connections:  SQL

d ( ) i

• Structured Query Language (SQL) is a  language for formulating queries for a  relational database

– SQL is not a part of Java, but Java has a library  (JDBC) that allows SQL commands to be  embedded in Java code

• SQL works with relational databases

– Most commercial database management systems  g y are relational databases

19‐54 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Java and Database Connections: SQL Java and Database Connections:  SQL

• A relational database can be thought of as a  collection of named tables with rows and  columns

– Each table relates together certain information – Each table relates together certain information, 

but the same relationship is not repeated in other  tables

tables

– However, a piece of information in one table may 

id b id t th

provide a bridge to another

Relational Database Tables (Part 1 of 3)

Relational Database Tables (Part 1 of 3)

(15)

Relational Database Tables (Part 2 of 3) Relational Database Tables (Part 2 of 3)

19‐57 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Relational Database Tables (Part 3 of 3) Relational Database Tables (Part 3 of 3)

19‐58 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A Sample SQL Command A Sample SQL Command

Th f ll i i l SQL d h b

• The following is a sample SQL command that can be  used in conjunction with the tables from the 

previous slide:

previous slide:

SELECT Titles.Title, Titles.ISBN, BooksAuthors Author ID

BooksAuthors.Author_ID FROM Titles, BooksAuthors

WHERE Titles.ISBN = BooksAuthors.ISBN

• The above command will produce the table shown on the  following slide

19‐59 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Result of SQL Command in Text Result of SQL Command in Text

19‐60 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(16)

Common SQL Statements (1 of 2) Common SQL Statements (1 of 2)

C C bl

CREATE TABLE

Create a new table named newtablewith fields field1,

field2, etc. Data types are similar to Java and include:

int bigint float double andvar(size)which is

CREATE TABLE newtable (field1 datatype, field2 datatype, ...) int, bigint, float, double, and var(size)which is

equivalent to a String of maximum length size.

INSERT Insert a new row into the table tableName where field1 INSERT INTO tableName

has the value field1Value, field2has the value

field2Value, etc. The data types for the values must

VALUES (field1Value, field2Value, ...)

match those for the corresponding fields when the table was created. String values should be enclosed in single quotes

quotes.

19‐61 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Common SQL Statements (2 of 2) Common SQL Statements (2 of 2)

UPDATE

Change the specified fields to the new Change the specified fields to the new

UPDATE tableName

values for any rows that match the

WHERE

clause.

Op

is a comparison operator such as

SET field1 = newValue, field2 = newValue, ...

WHERE fieldName Op

clause.

Op

is a comparison operator such as

=

,

<>

(not equal to),

<

,

>

, etc.

WHERE fieldName Op someValue

SELECT

Retrieve the specified fields for the rows that p

SELECT field1, field2

match the

WHERE

clause. The

*

may be used to retrieve all fields. Omit the

WHERE

clause

FROM tableName WHERE fieldname Op someValue

to retrieve all rows from the table.

someValue

19‐62 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

SQL Examples SQL Examples

• CREATE TABLE names(author varchar(50), author id CREATE TABLE names(author varchar(50), author_id  int, url varchar(80))

• INSERT INTO names VALUES ('Adams Douglas' 1

• INSERT INTO names VALUES ( Adams, Douglas , 1,  'http://www.douglasadams.com')

UPDATE SET l

• UPDATE names SET url = 

'http://www.douglasadams.com/dna/bio.html' 

WHERE th id 1

WHERE author_id = 1

• SELECT author, author_id, url FROM names

• SELECT author, author_id, url FROM names WHERE  author_id > 1

JDBC JDBC

J D b C i i (JDBC) ll SQL

Java Database Connectivity (JDBC) allows SQL  commands to be inserted into Java code

I d t it b th JDBC d d t b t

– In order to use it, both JDBC and a database system  compatible with it must be installed

– A JDBC driver for the database system may need to be A JDBC driver for the database system may need to be  downloaded and installed as well

• Inside the Java code, a connection to a database  ,

system is made, and SQL commands are then 

executed

(17)

Java DB

In the following examples we will use Java DB

P k d i h i 6 hi h f h J SDK

– Packaged with version 6 or higher of the Java SDK – Based on the open source database known as Apache 

Derby Derby

– See  http://www.oracle.com/technetwork/java/javadb/index.html

I t ll ti i fi ti

– Installation may require some configuration

– See instructions that come with Java DB and more detail in  the book

the book

• Runs in Network Mode or Embedded Mode

W l b dd d d h

– We only use embedded mode here

19‐65 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Data Flow of an Embedded Derby  Application

Java Application

1 Application constructs SQL Query 1. Application constructs SQL Query and sends it to JDBC

3. Result

JDBC

of the SQL Query returned by JDBC

E b dd d D b Data

2. Database engine processes the query by JDBC

to the application

Embedded Derby Files

19‐66 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Derby Database Connection and  Creation

• Steps in accessing a Derby database

– Load the driver

String driver = "org.apache.derby.jdbc.EmbeddedDriver";

Class.forName(driver).newInstance( );

– Connect to the database using a Connection String Connect to the database using a Connection String

Connection conn = null;

conn =

DriverManager.getConnection("jdbc:derby:BookDatabase;create=true");g g ( j y ; );

– Issue SQL commands to access or manipulate the database

Statement s = conn.createStatement();

s.execute(SQLString);

– Close the connection when done

19‐67 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Derby Database Creation Example (1 of 3) Derby Database Creation Example (1 of 3)

1 import java.sql.Connection;

2 import java.sql.DriverManager;

3 import java.sql.SQLException;

4 import java.sql.Statement;

5 public class CreateDB 6 {

7 private static final String driver = "org.apache.derby.jdbc.EmbeddedDriver";

8 private static final String protocol = "jdbc:derby:";

9 public static void main(String[] args) 10 {

11 try 12 {

Loads embedded Derby driver

13 Class.forName(driver).newInstance();

14 System.out.println("Loaded the embedded driver.");

15 }

Must catch ClassNotFoundException,

I i i E i Ill lA E i

16 catch (Exception err) 17 {

18 System.err.println("Unable to load the embedded driver.");

19 err.printStackTrace(System.err);

InstantiationException, IllegalAccessException.

19‐68 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

20 System.exit(0);

21 }

(18)

Derby Database Creation Example (2 of 3) Derby Database Creation Example (2 of 3)

Connection String to create the database.

22 String dbName = "BookDatabase";

g

Remove “;create=true” if connecting to an existing database.

g ;

23 Connection conn = null;

24 try 25 {

26 System.out.println("Connecting to and creating the database...");y p ( g g );

27 conn = DriverManager.getConnection(protocol + dbName + ";create=true");

28 System.out.println("Database created.");

29 Statement s = conn.createStatement();();

30 s.execute("CREATE TABLE names" +

31 "(author varchar(50), author_id int, url varchar(80))");

32 System.out.println("Created 'names' table.");

Create a table called "names" with three fields, 50 characters for an author, an integer author ID, and 80 characters for a URL

19‐69 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Derby Database Creation Example (3 of 3) Derby Database Creation Example (3 of 3)

Insert sample data 33 System.out.println("Inserting authors.");

34 s.execute("INSERT INTO names " +

35 "VALUES ('Adams, Douglas', 1, 'http://www.douglasadams.com')");

36 s execute("INSERT INTO names " +

p

36 s.execute( INSERT INTO names +

37 "VALUES ('Simmons, Dan', 2, 'http://www.dansimmons.com')");

38 s.execute("INSERT INTO names " +

39 "VALUES ('Stephenson, Neal', 3, 'http://www.nealstephenson.com')");

40 System.out.println("Authors inserted.");

40 System.out.println( Authors inserted. );

41 conn.close();

42 }

43 catch (SQLException err) Catch SQL Error Exceptions 43 catch (SQLException err)

44 {

45 System.err.println("SQL error.");

46 err.printStackTrace(System.err);

47 System.exit(0); SAMPLE DIALOGUE

Loaded the embedded driver 47 System.exit(0);

48 } 49 } 50 }

Loaded the embedded driver.

Connecting to and creating the database.

Database created.

Created 'names' table.

Inserting authors

19‐70 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Inserting authors.

Authors inserted.

Retrieving Data from Derby Retrieving Data from Derby

• The SELECT statement is used to retrieve data  from the database

– Invoke the  executeQuery( ) method of a 

Statement object.

Statement object.  

– Returns an object of type  ResultSet that  maintains a cursor to each matching row in the maintains a cursor to each matching row in the  database. 

• Can iterate through the set with a loop

• Can iterate through the set with a loop

Processing a ResultSet Processing a ResultSet

• Initially, the cursor is positioned before the first row.  

• The  next( ) method advances the cursor to the next  row.  If there is no next row, then  false is returned.  

Otherwise,  true is returned. 

• Use one of following methods to retrieve data from a  specific column in the current row :

spec c co u e cu e o

intVal = resultSet.getInt("name of int field");

lngVal = resultSet.getLong("name of bigint field");

strVal = resultSet.getString("name of varchar field");

dblVal = resultSet.getDouble("name of double field");

fltVal = resultSet.getFloat("name of float field");

(19)

Reading from a Derby Database Reading from a Derby Database

SQL to retrieve the ID and // Code to connect to the database

Statement s = conn.createStatement();

ResultSet rs = null;

Author for all records

ResultSet rs null;

rs = s.executeQuery("SELECT author, author_id FROM names");

while (rs.next()) while (rs.next()) {

int id = rs.getInt("author_id");

String author = rs.getString("author“);

System.out.println(id + " " + author);

Loop through and print all records that match the query System.out.println(id + + author);

}

rs.close();

// Above should be in a try/catch block SAMPLE DIALOGUE 1 Adams, Douglas 2 Simmons, Dan 3 Stephenson, Neal

19‐73 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Update Query Update Query

• Use the execute command for UPDATE queries

• Example to change the URL to the contents of Example to change the URL to the contents of  the variable  newURL for author with ID 1

Statement s = conn.createStatement();

s execute("UPDATE names SET URL = '" + newURL + s.execute( UPDATE names SET URL = + newURL +

"' WHERE author_id = 1");

19‐74 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

More SQL More SQL

• We have just scratched the surface of what is  possible to do with SQL, JDBC, Java DB, etc.

p

• This section covered the basics about how to  integrate a database with a Java application integrate a database with a Java application

– Refer to database and more advanced Java  textbooks to learn more

19‐75 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Web Programming with Java Server  Pages

• Many technologies exist that allow programs to run  within a web browser when visiting a website

• Applets

– Run on the client

• Servlets

– Compiled Java programs on the server Compiled Java programs on the server

• JSP

Dynamically compiles to Servlets and integrated with the – Dynamically compiles to Servlets and integrated with the 

server

19‐76 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(20)

Running a Java Applet Running a Java Applet

Internet

Client Computer Server Computer

Web Browser Request Web Server

HTML + Applet

The client’s web browser sends a request to the server for a web page ith J A l t

Java VM

with a Java Applet.

The server sends the HTML for the web page and applet class files to the client.

The client runs the applet using the Java Virtual Machine and displays its output in the web browser.

19‐77 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Running a Java Servlet Running a Java Servlet

Internet

Client Computer Server Computer

Web Browser Web Server

Servlet Request

HTML HTML

The client’s web browser sends a request to the server for a web page that runs a Java servlet

Servlet Engine

that runs a Java servlet.

The web server instructs the Servlet engine to execute the requested servlet, which consists of running precompiled Java code. The servlet outputs HTML that is returned to the web server

HTML that is returned to the web server.

The web server sends the servlet’s HTML to the client’s web browser to be displayed.

19‐78 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Running a Java Server Page (JSP)  Program

Internet

Client Computer Server Computer

Web Browser Web Server

JSPServlet Request

HTML HTML

The client’s web browser sends a request to the server for a web page that contains JSPcode

JSPServlet Engine

that contains JSPcode.

The JSPServlet engine dynamically compiles the JSP source code into a Java servlet if a current,compiled servlet doesn’t exist. The servlet runs and outputs HTML that is returned to the web server

HTML that is returned to the web server.

The web server sends the servlet’s HTML to the client’s web browser to be displayed.

JSP Requirements JSP Requirements

• Web server capable of running JSP servlets Web server capable of running JSP servlets

• Here we use the Sun GlassFish Enterprise  Server, previously known as the Sun Java  System Application Server y pp

– Part of the Java Enterprise Edition SDK

See instructions that come with the software for – See instructions that come with the software for 

installation

• Documents go in

• Documents go in 

<glassfish_home>\domains\domain1\docroot 

• Default URL is http://localhost:8080

• Default URL is http://localhost:8080

(21)

HTML Forms HTML Forms

• The information you enter into an HTML form is

• The information you enter into an HTML form is  transmitted to the web server using a protocol called  the Common Gateway Interface (CGI)

the Common Gateway Interface (CGI)

• Syntax for HTML Form

<FORM ACTION="Path_To_CGI_Program" METHOD="GET or POST">

Form_Elements

</FORM>

• ACTION identifies the program to execute

– In our case a JSP program In our case, a JSP program

• GET or POST identify how data is transmitted

GET sends data as the URL POST over the socket – GET sends data as the URL, POST over the socket

19‐81 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Some HTML Form Elements Some HTML Form Elements

• Input Textbox

<INPUT TYPE="TEXT" NAME="Textbox Name" VALUE="Default Text"U e tbo _ a e U e au t_ e t SIZE="Length_In_Characters"

MAXLENGTH="Maximum_Number_Of_Allowable_Characters">

• Submission Button

S

<INPUT TYPE="SUBMIT" NAME="Name" VALUE="Button_Text">

• Many others form elements exist

– E g radio buttons drop down list etc E.g. radio buttons, drop down list, etc.

19‐82 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Example HTML Form Document (Di l 19 16)

(Display 19.16)

<html>

<head>

<title>Change Author's URL</title>g

</head>

<body>

<h1>Change Author's URL</h1>

<p>

Invokes the JSP program named EditURL.jsp. If this program does not

<p>

Enter the ID of the author you would like to change along with the new URL.

</p>

f ACTION "EditURL j " METHOD POST

j p p g

exist you will see an error message upon clicking the Submit button.

<form ACTION = "EditURL.jsp" METHOD = POST>

Author ID:

<input TYPE = "TEXT" NAME = "AuthorID"

VALUE = "" SIZE = "4" MAXLENGTH = "4">

<br />

Creates a TextBox named AuthorID that is empty, displays 4 characters at once, and accepts at most 4 characters

New URL:

<input TYPE = "TEXT" NAME = "URL"

VALUE = "http://" SIZE = "40" MAXLENGTH = "200">

<p>

characters.

Creates a submission button

<p>

<INPUT TYPE="SUBMIT" VALUE="Submit">

</p>

</form>

</b d >

19‐83 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

</body>

</html>

Browser View of HTML Form  Document

19‐84 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(22)

JSP Tags Declarations JSP Tags ‐ Declarations

• Declarations

– Use to define variables and methods

– The variables and methods are accessible from any scriptlets and  expressions on the same page

– Variable declarations are compiled as instance variables for a class that  corresponds to the JSP page p p g

– Syntax:

<%!

Declarations Declarations

%>

<%!

Defines an instance variable named private int count = 0;

private void incrementCount() {

count++;

}

Defines an instance variable named countand a method named incrementCountthat increments the count variable

19‐85 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

}

%>

JSP Tags Expressions JSP Tags ‐ Expressions

• Expressions

– Use to access variables defined in declarations Syntax:

– Syntax:

<%=

Expression

%>

%>

The value of count is <b> <%= count %> </b>

Outputs the value of the count variable in bold type

19‐86 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

JSP Tags Scriptlet JSP Tags ‐ Scriptlet

• Scriptlet

– Use to embed blocks of Java Code – Syntax:

<%

Java Code

%>

– Use  out.println() to output to the browser

<%

incrementCount();

out.println("The counter's value is " + count + "<br />");

%>

Invokes the incrementCount( ) method and then outputs the value in p count

JSP Example To Display Heading  Levels

<html>

<title>

Displaying Heading Tags with JSPp y g g g

</title>

<body>

<%!

JSP Declaration

private static final int LASTLEVEL = 6;

%>

<p>

This page uses JSP to display Heading Tags fromp g p y g g Level 1 to Level <%= LASTLEVEL %>

</p>

<%

int i;

JSP Expression that evaluates to 6

JSP Scriptlet for (i = 1; i <= LASTLEVEL; i++)

{

out.println("<H" + i + ">" +

"This text is in Heading Level " + i +

JSP Scriptlet

g

"</H" + i + ">");

}

%>

</body>

</html>

(23)

HTML Generated by JSP Example HTML Generated by JSP Example

<html>

<title>

Displaying Heading Tags with JSP Displaying Heading Tags with JSP

</title>

<body>

<p>

This page uses JSP to display Heading Tags from This page uses JSP to display Heading Tags from Level 1 to Level 6

</p>

<H1>This text is in Heading Level 1</H1>

<H2>This text is in Heading Level 2</H2>

<H2>This text is in Heading Level 2</H2>

<H3>This text is in Heading Level 3</H3>

<H4>This text is in Heading Level 4</H4>

<H5>This text is in Heading Level 5</H5>

<H6>This text is in Heading Level 6</H6>

<H6>This text is in Heading Level 6</H6>

</body>

</html>

19‐89 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Browser View of JSP Page Browser View of JSP Page

19‐90 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Reading HTML Form Input Reading HTML Form Input

• The  request.getParameter method takes a String  parameter as input that identifies the name of an  HTML form element and returns the value entered  by the user for that element on the form.  

– For example, if there is a textbox named AuthorID then we  can retrieve the value entered in that textbox with the 

i tl t d scriptlet code:

String value = request.getParameter("AuthorID");

• If the user leaves the field blank then getParameter  returns an empty string. 

19‐91 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

JSP Program To Echo Input From  g p the HTML Form in Display 19.16

This file should be named “EditURL.JSP” and match the entry in the ACTION tag of the HTML form.

<html>

<title>Edit URL: Echo submitted values</title>

<body>

<h2>Edit URL</h2>

<p>

This version of EditURL.jsp simply echoes back to the user the values that were entered in the textboxes.

</p> The getParameter

th d ll t

<%

String url = request.getParameter("URL");

String stringID = request.getParameter("AuthorID");

int author id = Integer.parseInt(stringID);

method calls return as Strings the values entered by the user in the URL and AuthorID textboxes from Displa 19 16

_ g p ( g );

out.println("The submitted author ID is: " + author_id);

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

out.println("The submitted URL is: " + url);

%>

</body>

Display 19.16.

19‐92 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

</body>

</html>

(24)

Sample Dialogue for EditUrl JSP Sample Dialogue for EditUrl.JSP

SUBMITTED ON THE WEB BROWSER WHEN VIEWING DISPLAY 19.16

Author ID:

2

New URL:

http://www.dansimmons.com/about/bio.htm http://www.dansimmons.com/about/bio.htm

WEB BROWSER DISPLAY AFTER CLICKING SUBMIT

Edit URL

This version of EditURL jsp simply echoes back to the user This version of EditURL.jsp simply echoes back to the user the values that were entered in the textboxes.

The submitted author ID is: 2 The submitted URL is:

19‐93 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

http://www.dansimmons.com/about/bio.htm

JSP Tags Directive JSP Tags ‐ Directive

• Directives 

– Instruct the compiler how to process a JSP program.  

Examples include the definition of our own tags, including  the source code of other files, and importing packages.

S t – Syntax:

<%@

Directives Directives

%>

<%@

<%@

page import="java.util.*,java.sql.*"

%> Import libraries so we could use SQL

code. Multiple packages separated by a comma.

19‐94 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

y

More JSP More JSP

• Although we have covered enough JSP to write fairly  sophisticated programs, there is much more that we  have not covered.

– For example, beans can be used as a convenient way to  encapsulate data submitted from a HTML form.  

– Sessions, tag libraries, security, and numerous other topics 

i t t i th t ti f JSP

are important in the construction of JSP pages.  

– Refer to a textbook dedicated to JSP to learn more.

參考文獻

相關文件

Starting from a discussion on this chapter, Jay a nanda proceeds to explain 22 kinds of mental initiation for the pursuit of enlightenment... The first chapter of Madhyamak a vat a

透過 Java Servlet 程式存取資料庫.

Additional Key Words and Phrases: Topic Hierarchy Generation, Text Segment, Hierarchical Clustering, Partitioning, Search-Result Snippet, Text Data

¾ To fetch a Web page, browser establishes TCP connection to the machine where the page is and sends a message over the connection asking for the

• A simple look at a website can reveal many potential web accessibility issues for persons with disabilities.  Can the content be

[r]

Experiment a little with the Hello program. It will say that it has no clue what you mean by ouch. The exact wording of the error message is dependent on the compiler, but it might

Click to view Web Link, click Chapter 7, Click Web Link from left navigation, then click Network Attached Storage below Chapter 7..