To main page
Introduction to JAVA Programming
Y. Daniel Liang, 7th ed.
Comprehensive edition This book exists in two formats, one short and one longer. You want the longer one.
ISBN-13: 978-0-13-605966-0
ISBN-10: 0-13-605966-0
Fredrik Kilander, DSV SU/KTH, 2009
General advice
The list of chapters are rated below in various degrees of interest to
the course. For best results, read a chapter, and try to answer some
of the review questions. Write down the numbers on the ones that
caused you problems, and analyze what was difficult, and why.
After a few days, go back to the chapter and the tricky questions and
look at them again. Are they still mysterious? Sample a few more
questions from the same chapter and reivew the result.
For excercises and assignments, it is important that you have access
to the Java 6 documentation. It can be found online, or if you have a
your own, personal computer, downloaded (see
Java 6 API).
Also, when the text mentions a package or API of which you are not
previously familiar, make the effort of locating it in the
documentation set. Finding your way around the Java APIs is just as
important as knowing the language itself. In a sense, the API
is the language.
You should also verify that you can write, compile and run Java
programs. Acquaint yourself with the follow tools:
- a source code editor (emacs, notepad)
-
javac
(the Java compiler)
-
java
(the Java run command)
-
javadoc
(the Java source code documentation tool)
I recommend that
you avoid integrated development environments, at least initially,
because you may find it difficult to separate the Java language from
the actions of the IDE. IDE's are great when you know what they can do
for you and what you can expect of them, but when learning a language
like Java they mostly get in the way.
Technical remarks
In his example's, Liang prefers the use of StringBuilder over
StringBuffer, because StringBuilder is faster. However, that extra
speed comes with a price, and that is the absence of protection in a
multi-threaded environment. StringBuilder is not thread-safe, but
StringBuffer is.
Many Java programs are multi-threaded (many times implicitly, for
example when using a GUI). This does not in itself pose a threat to
the program, in the majority of cases the string operations are
performed by a single thread anyway. But the programmer must be
aware of the difference and not choose one or the other from sheer
force of habit, or a dim view that one is always better than the other.
StringBuffer and StringBuilder are used in Java to perform string
operations: mostly concatenation, replacement and deletions. While
ordinary string expressions can do this too, the resulting string
objects are immutable once created, and are often used only
once. They consume memory until reclaimed by the garbage
collector. A program that performs a lot of string manipulation
(reading or creating several megabytes of text in its lifetime) is
therefore more memory efficient when it uses mutable objects and
reuses memory.
Threads are paths of execution in a program. All computer programs,
Java programs included, have at least one thread of
execution. Multi-threaded programs have two or more threads of
execution running in the same program and memory (mostly in different
parts of the code). Without careful planning and synchronization,
threads may interfere with each other in unexpected ways. The most
common problem is simultaneous write access to data structures that
are designed to be updated by a single thread at a time. Thread-safe
classes in Java are protected against such conflicts.
Book website
Also, do not forget to check out the book's
website.
Chapters 38-43 are found there, they are not in the printed book. In
order to login on the site, you will need a code that is found on the
very first page of the book.
Contents and reading tracks
Due to the massive amount of information in the book it has been
divided into three tracks. These tracks are
- general information
- multimedia
- Internet programming
All students are expected to read the general chapters and then focus
on either the multimedia or Internet programming track. Participants
in the ISE programme that expect to follow the course Programming of
Interactive Systems are recommended to select the Internet programming
track.
Three different levels of attention are used to indicate the
importance of each chapter. The classification should be seen as a
guide, and students are expected to at least be oriented on the
contents of the chapters marked as as needed. That label does
not mean that the chapter can be skipped without looking; it means
that you should evaluate how relevant it is for you, and plan your
time and effort based on that.
|
[Attention] |
[General] |
[Multimedia] |
[Internet programming] |
|
High
Standard
As needed |
|
|
|
Week 1 |
Chapter 1 - Introduction to Computers,
Programs, and Java |
 |
|
|
|
Chapter 2 - Elementary Programming |
 |
|
|
|
Chapter 3 - Selections |
 |
|
|
|
Chapter 4 - Loops |
 |
|
|
|
Chapter 5 - Methods |
 |
|
|
|
Chapter 6 - Arrays |
 |
|
|
|
Chapter 7 - Objects and Classes |
 |
|
|
|
Week 2 |
Chapter 8 - Strings and Text I/O |
 |
|
|
|
Chapter 9 - Thinking in Objects |
 |
|
|
|
Chapter 10 - Inheritance and Polymorphism |
 |
|
|
|
Chapter 11 - Abstract Classes and Interfaces |
 |
|
|
|
Chapter 12 - Object-Oriented Design and Patterns |
 |
|
|
|
Chapter 13 - GUI Basics |
 |
|
|
|
Chapter 14 - Graphics |
 |
|
|
|
Week 3 |
Chapter 15 - Event-Driven Programming |
 |
|
|
|
Chapter 16 - Creating User Interfaces |
 |
|
|
|
Chapter 17 - Applets and Multimedia |
 |
|
|
|
Chapter 18 - Exception Handling |
 |
|
|
|
Chapter 19 - Binary I/O |
 |
|
|
|
Chapter 20 - Recursion |
 |
|
|
|
Chapter 21 - Generics |
 |
|
|
|
Week 4 |
Chapter 22 - Java Collections Framework |
 |
|
|
|
Chapter 23 - Algorithm Efficiency |
 |
|
|
|
Chapter 24 - Lists, Stacks, and Queues |
 |
|
|
|
Chapter 25 - Trees, Iterators, Heaps, and
Priority Queues |
 |
|
|
|
Chapter 26 - Sorting |
 |
|
|
|
Chapter 27 - Graph Applications |
 |
|
|
|
Chapter 28 - Weighted Graphs Applications |
 |
|
|
|
Week 5 |
Chapter 29 - Multithreading |
 |
|
|
|
Chapter 30 - Networking |
 |
|
|
|
Chapter 31 - Internationalization |
 |
|
|
|
Chapter 32 - JavaBeans and Bean Events |
 |
|
|
|
Chapter 33 - Containers, Layout Managers, and Borders |
 |
|
|
|
Chapter 34 - Menus, Toolbars and Dialogs |
 |
|
|
|
Chapter 35 - MVC and Swing Models |
 |
|
|
|
Week 6 |
Chapter 36 - JTable and JTree |
 |
|
|
|
Chapter 37 - Java Database Programming |
 |
|
|
|
Chapter 38 - Advanced Java Database Programming
website |
 |
|
|
|
Chapter 39 - Servlets
website |
 |
|
|
|
Chapter 40 - JavaServer Pages
website |
 |
|
|
|
Chapter 41 - JSF and Visual Web Development
website |
 |
|
|
|
Chapter 42 - Web Services
website |
 |
|
|
|
Chapter 43 - Remote Method Invocation
website |
 |
|
|
|

- To review computer basics, programs, and operating systems

- To represent numbers in binary, decimal, and hexadecimal

- To explore the relationship between Java and the World Wide Web

- To distinguish the terms API, IDE, and JDK

- To write a simple Java program

- To display output on the console

- To create, compile, and run Java programs

- To explain the basic syntax of a Java program

- (GUI) To display output using the JOptionPane output dialog boxes

- To write Java programs to perform simple calculations

- To use identifiers to name variables, constants, methods, and classes

- To use variables to store data

- To program with assignment statements and assignment expressions

- To use constants to store permanent data (FK: actually, data
that should not change during the execution of the program. Constants
are only permanent in that sense.)

- To declare primitive data types: byte, short, int, long, float, double, and char

- To use Java operators to write numeric expressions

- To represent characters using the char type

- To represent sa string using the String type

- To obtain input from the console using the Scanner class

- To become familiar with Java documentation, programming style, and naming conventions

- To distinguish syntax errors, runtime errors, and logic errors

- To debug logic errors

- (GUI) To obtain input using the JOptionPane input dialog boxes

- To declare boolean type and use Boolean

- To apply relational operators and logic operators to write Boolean expressions

- To use Boolean expressions to control selection statements

- To implement selection control using if and nested if statements

- To implement selection control using switch statements

- To write expressions using the conditional operator

- To display formatted output using the System.out.printf method and to format strings using the String.format method

- To examine the rules governing operator precedence and associativity

- (GUI) To get user confirmation using confirmation dialogs

- To use while, do-while, and for loop statements to control the repetition of statements

- To understand the flow of control in loop statements

- To use Boolean expressions to control loop statements

- To discover the similarities between three types of loops

- To write nested loops

- To learn the techniques for minimizing numerical errors

- To learn loops from a variety of examples

- To implement program control with break and continue

- (GUI) To control a loop with a confirmation dialog

- To define methods, invoke methods, and pass arguments to a method

- To develop reusable code that is modular, easy to read, easy to debug, and easy to maintain

- To use method overloading and understand ambiguous overloading

- To determine the scope of variables

- To solve mathematics problems using the methods in the Math class

- To apply the concept of method abstraction in software development

- To design and implement methods using stepwise refinement

- To describe why arrays are necessary in programming

- To learn the steps involved in using arrays: declaring array reference variables and creating arrays

- To initialize the values in an array

- To access array elements using indexed variables

- To simplify programming using the for-each loops

- To declare, create and initialize an array using an array initializer

- To copy contents from one array to another

- To develop and invoke methods with array arguments and return value

- To declare a method with variable-length argument list

- To search elements using the linear or binary search algorithm

- To sort an array using the selection sort

- To sort an array using the insertion sort algorithm

- To use the methods in the Arrays class

- To declare and create two-dimensional arrays to solve interesting problems such as Sodoku

- To declare and create multi-dimensional arrays

- To describe objects and classes, and use classes to model objects

- To use UML graphical notation to describe classes and objects

- To construct objects using constructors

- To access objects via reference variables

- To define a reference variable using a reference type

- To access an object's data and methods

- To declare a class and create an object from a class

- To assign default values for an object's data fields

- To distinguish between object reference variables and primitive
data type variables

- To use classes Date, Random, and JFrame in the Java library

- To distinguish between instances and static variables and methods

- To declare private data fields with appropriate get and set methods

- To encapsulate data fields to make classes easy to maintain

- To differentiate between primitive-type arguments and object-type arguments

- To develop methods with object arguments

- To store and process objects in arrays

- To use the String class to process fixed strings (FK:
immutable strings)

- To use the Character class to process a single character

- To use the StringBuilder/StringBuffer classes to process flexible
strings (FK: mutable strings)

- To distinguish among the String, StringBuilder and StringBuffer classes

- To learn how to pass arguments to the main method from the command
line

- To discover file properties and to delete and rename files using
the File class

- To write data to a file using the PrintWriter class

- To read data from a file using the Scanner class

- (GUI) To open files using a dialog box

- To create immutable objects from immutable classes to protect the
contents of objects

- To determine the scope of variables in the context of a class

- To use the keyword this to refer to the calling object itself

- To apply class abstraction to develop software

- To explore differences between the procedural paradigm and
object-oriented paradigm

- To design programs using the object-oriented paradigm

- To develop a subclass from a superclass through inheritance

- To illustrate inheritancy by creating a custom frame that extends JFrame

- To invoke the superclass's constructors and methods using the
super keyword

- To override instance methods in the subclass

- To distinguish between overriding and overloading

- To explore the methods toString() and equals(Object) in the Object
class

- To discover polymorphism, dynamic binding, and generic programming

- To describe casting and explain why explicit downcasting is necessary

- To store, retrieve, and manipulate objects in an ArrayList

- To implement a Stack class using ArrayList

- To restrict access to data and methods to subclasses using the
protected visibility modifier

- To prevent class extending and method overriding using the
final modifier

- To design and use abstract classes

- To process a calendar using the Calendar and GregorianCalendar classes

- To specify a common behaviour for objects using interfaces

- To define interfaces and declare classes that implement interfaces

- To define a natural order using the Comparable interface

- To enable objects to listen for action events using the
ActionListener interface

- To make objects cloneable using the Cloneable interface

- To explore the similarities and differences between an abstract
class and an interface

- To create objects for primitive values using the wrapper classes
(Byte, Short, Integer, Long, Float, Double, Character, and Boolean)

- To create a generic sort method

- To simplify programming using automatic conversion between
primitive types and wrapper classes

- To use the BigInteger and BigDecimal classes for computing very
large numbers with arbitrary precision

- To describe the software life cycle

- To discover classes and determine responsibilities of each class

- To describe relationship types: association, aggregation,
composition, dependency, strong inheritance, and weak inheritance

- To declare classes to represent the relationships

- To design systems by identifying the classes and discovering the
relationships among these classes

- To implement the Rational class and process rational numbers using
this class

- To design classes that follow the class-design guidelines

- To explain the concept of framework-based programming using the
Java API

- To apply design patterns for developing sound software systems

- To distinguish between Swing and AWT

- To describe the Java GUI API hierarchy

- To create user interfaces using frames, panels, and simple GUI components

- To understand the role of layout managers

- To use the FlowLayout, GridLayout, and BorderLayout managers to
layout components in a container

- To specify colors and fonts using the Color and Font classes

- To use JPanel as subcontainers

- To apply common features such as borders, tool tips, fonts, and
colors on Swing Components

- To use borders to visually group user-interface components

- To create image icons using the ImageIcon class

- To describe Java coordinate systems in a GUI component

- To draw things using the methods in the Graphics class

- To explain how and when a Graphics object is created

- To override the paintComponent method to draw things on a GUI component

- To use a panel as a canvas to draw things

- To draw strings, lines, rectangles, ovals, arcs, and polygons

- To obtain font properties using FontMetrics and know how to center
a message

- To display an image in a GUI subcomponent

- To develop reusable GUI components FigurePanel, MessagePanel,
StillClock, and ImageViewer

- To describe events, event sources, and event classes

- To declare listener classes, register listener objects with the
source object, and write the code to handle events

- To declare listener classes using inner classes

- To declare listener classes using anonymous inner classes

- To write programs to deal with ActionEvent

- To write programs to deal with WindowEvent

- To simplify coding for listener classes using listener interface adapters

- To write programs to deal with MouseEvent

- To write programs to deal with KeyEvent

- To use the javax.swing.Timer class to control animations

- To create graphical user interfaces with various user-interface
components: JButton, JCheckBox, JRadioButton, JLabel, JTextArea,
JComboBox, JList, JScrollBar, and JSlider

- To create listeners for various types of events

- To explore JButton

- To explore JCheckBox

- To explore JRadioButton

- To explore JLabel

- To explore JTextField

- To explore JTextArea

- To explore JComboBox

- To explore JList

- To explore JSlider

- To display multiple windows in an application

- To explain how the Web browser controls and executes applets

- To describe the init, start, stop, and destroy methods in the
Applet class

- To develop Swing applets using the JApplet class

- To embed applets in Web pages

- To run applets from the appletviewer and from Web browsers

- To write a Java program that can run as both an application and an
applet

- To pass string values to applets from HTML

- To locate resources (images and audio) using the URL class

- To play audio in any Java program

- To get an overview of exceptions and exception handling

- To explore the advantages of using exception handling

- To distinguish exception types: Error (fatal) vs. Exception
(nonfatal), and checked vs. unchecked

- To declare exceptions in a method header

- To throw exceptions in a method

- To write a try-catch block to handle exceptions

- To explain how an exception is propagated

- To use the finally clause in a try-catch block

- To use exceptions only for unexpected errors

- To rethrow exceptions in a catch block

- To create chained exceptions

- To declare custom exception classes

- To discover how I/O is processed in Java

- To distinguish between text I/O and binary I/O

- To read and write bytes using FileInputStream and FileOutputStream

- To filter data using base classes FilterInputStream / FilterOutputStream

- To read and write primitive values and strings using
DataInputStream / DataOutputStream

- To store and restore objects using ObjectOutputStream and
ObjectInputStream, and to understand how objects are serialized and
what kind of objects can be serialized

- To implement the Serializable interface to make objects serializable

- To serialize arrays

- To read and write files using the RandomAccessFile class

- To describe what a recursive method is and the benefit of using recursion

- To develop recursive methods for recursive mathematical functions

- To explain how recursive method calls are handled in a call stack

- To use an overloaded helper method to derive a recursive method

- To solve selection sort using recursion

- To solve binary search using recursion

- To get the directory size using recursion

- To solve the Towers of Hanoi problem using recursion

- To draw fractals using recursion

- To solve the Eight Queens problem

- To discover the relationship and difference between recursion and iteration

- To describe the benefits of generics

- To use generic classes and interfaces

- To declare generic classes and interfaces

- To explain why generic types can improve reliability and readability

- To declare and use generic methods and bounded generic types

- To use raw types for backward compatibility

- To explain why wildcard generic types are necessary

- To describe generic type erasure and list certain restrictions and
limitations on generic types caused by type erasure

- To design and implement generic matrix classes

- To describe the Java collections framework

- To use the common methods defined in the Collection interface for
operating sets and lists

- To use the iterator interface to traverse a collection

- To use the for-each loop to simplify traversing a collection

- To explore how and when to use HashSet, LinkedHashSet, or TreeSet
to store elements

- To compare elements using the Comparable interface and the
Comparator interface

- To explore how and when to use ArrayList or LinkedList to store
elements

- To use the static utility methods in the Collections class for
sorting, searching, shuffling lists, and finding the largest and
smallest element in collections

- To compare performance of sets and lists

- To distinguish between Vector and ArrayList, and to use the Stack
class for creating stacks

- To explore the relationships among Collection, Queue, LinkedList,
and PriorityQueue and to create priority queues using the
PriorityQueue class

- To tell the difference between Collection and Map, and describe
when and how to use HashMap, LinkedHashMap, and TreeMap to store
values associated with keys

- To obtain singleton sets, lists, and maps and unmodifiable sets,
lists and maps, using the static methods in the Collections class

- To estimate algorithm efficiency using the Big O notation

- To explain growth rates and why constants and nondominating terms
can be ignored in the estimation

- To determine the complexity of various types of algorithms

- To analyze the binary search algorithm

- To analyze the selection sort algorithm

- To analyze the insertion sort algorithm

- To analyze the Towers of Hanoi algorithm

- To describe common growth functions (constant, logarithmic,
log-linear, quadratic, cubic, expoential)

- To design efficient algorithms for finding Fibonacci numbers

- To design efficient algorithms for finding GCD

- To design efficient algorithms for finding prime numbers

- To design efficient algorithms for finding a closest pair of points

- To design common features of list in an interface and provide
skeleton implementation in an abstract class

- To design and implement a dynamic list using an array

- To design and implement a dynamic list using a linked structure

- To explore variations of linked lists

- To design and implement a stack using an array list

- To design and implement a queue using a linked list

- To evaluate expressions using a stack

- To design and implement a binary search tree

- To represent binary trees using linked data structures

- To search an element in binary search tree

- To insert an element into a binary search tree

- To traverse elements in a binary tree

- To delete elements from a binary search tree

- To display binary tree graphically

- To create iterators for traversing a binary tree

- To design and implement a heap

- To design and implement a priority queue

- To study and analyze time efficiency of various sorting algorithms

- To design, implement, and analyze bubble sort

- To design, implement, and analyze merge sort

- To design, implement, and analyze quick sort

- To design, implement, and analyze heap sort

- To design, implement, and analyze bucket sort and radix sort

- To design, implement, and analyze external sort for large data in
a file

- To model real-world problems using graphs and explain the Seven
Bridges of Königsberg problem

- To describe the graph terminologies: vertices, edges, simple
graphs, weighted/unweighted graphs, and direct/undirected graphs

- To represent vertices and edges using lists, adjacent matrices,
and adjacent lists

- To model graphs using the Graph interface, the AbstractGraph
class, and the UnweightedGraph class

- To represent the traversal of a graph using the
AbstractGraph.Tree class

- To design and implement depth-first search

- To design and implment breadth-first search

- To solve the nine-tail problem using breadth-first search

- To solve the Knight's Tour problem by reducing it to a
Hamiltonian path problem

- To represent weighted edges using adjacency matrices and priority
queues

- To model weighted graphs using the WeightedGraph class that
extends the AbstractGraph class

- To design and implement the algorithm for finding a minumum
spanning tree

- To define the MST class that extends the Tree class

- To design and implement the algorithm for finding single-source
shortest paths

- To define the ShortestPath class that extends the Tree class

- To solve the weighted nine tail problem using the shortest-path
algorithm

- To get an overview of multithreading

- To develop task classes by implementing the Runnable interface

- To create threads to run tasks using the Thread class

- To control threads using the methods in the Thread class

- To control animations using threads

- To run code in the event dispatch thread

- To execute tasks in a thread pool

- To use synchronized methods or blocks to synchronize threads to
avoid race conditions

- To synchronize threads using locks

- To faciliate thread communications using conditions on locks

- To use blocking queues to synchronize access to an array queue,
linked queue, and priority queue

- To restrict the number of accesses to a shared resource using
semaphores

- To use the resource-ordering technique to avoid deadlocks

- To describe the life cycle of a thread

- To create synchronized collections using the static methods in
the Collections class

- To run time-consuming tasks in a SwingWorker rather than in the
event dispatch thread

- To display the completion status of a task using JProgressBar

- To explain terms: TCP, IP, domain name, domain name server,
stream-based communication, and packet-based communications

- To create servers using server sockets and create clients using
sockets

- To implement Java networking programs using stream sockets

- To obtain Internet addresses using the InetAddress class

- To develop servers for multiple clients

- To develop applets that communicate with the server

- To send and receive objects on a network

- To create applications or applets to retrieve files from a network

- To render HTML files using the JEditorPane class

- To develop and interactive TicTacToe game played on the Internet

- To describe Java's internationalization features

- To construct a locale with language, country, and variant

- To display date and time based on locale

- To display numbers, currencies, and percentages based on locale

- To develop applications for international audiences using
resource bundles

- To specify encoding schemes for text I/O

- To describe what a JavaBeans component is

- To explain the similarities between beans and regular objects

- To develop JavaBeans components that follow the naming patterns

- To review the Java event delegation model

- To create custom event classes and listener interfaces

- To develop source components using event sets from the Java API
or custom event sets

- To explore the internal structure of the Swing container

- To explain how a layout manager works in Java

- To use CardLayout and BoxLayout

- To use the absolute layout manager to place components in the
fixed position

- To create custom layout managers

- To use JScrollPane to create scroll panes

- To use JTabbedPane to create tabbed panes

- To use JSplitPane to create split panes

- To use various borders for Swing components

- To create menus using components JMenuBar, JMenu, JMenuItem,
JCheckBoxMenuItem, and JRadioButtonMenuItem

- To create popup menus using components JPopupMenu, JMenuItem,
JCheckBoxMenuItem, and JRadioButtonMenuItem

- To use JToolBar to create toolbars

- To use Action objects to generalize the code for processing actions

- To create standard dialogs using the JOptionPane

- To extend the JDialog class to create custom dialogs

- To select colors using JColorChooser

- To use JFileChooser to display Open and Save File dialogs

- To use the model-view-controller approach to separate data and
logic from the presentation of data

- To implement the model-view-controller components using the
JavaBeans event model

- To explain the Swing model-view-controller architecture

- To use JSpinner to scroll the next and previous values

- To create custom spinner models and editors

- To use JList to select single or multiple items in a list

- To add and remove items using ListModel and DefaultListModel

- To render list cells using a default or custom cell renderer

- To create custom combo box models and renderers

- To display tables using JTable

- To process rows and columns using TableModel, DefaultTableModel,
TableColumnModel, DefaultTableColumnModel, and ListSelectionModel

- To enable auto sort and filtering on table model

- To add rows and columns, delete rows and columns

- To render and edit table cells using the default renderers and editors

- To render and edit table cells using the custom renderers and editors

- To handle table model events

- To display data in a tree hierarchy using JTree

- To model the structure of a tree using TreeModel and DefaultTreeModel

- To add, remove, and process tree nodes using TreeNode,
DefaultMutableTreeNode, and TreePath

- To select tree nodes and paths using TreeSelectionModel and
DefaultTreeSelectionModel

- To edit and render tree nodes using the default and custom
renderers and editors

- To understand the concept of database and database management
systems

- To understand the relational data model: relational data
structures, and languages

- To use SQL to create and drop tables to retrieve and modify data

- To learn how to load a driver, connect to a database, execute
statements, and process result sets using JDBC

- To use prepared statements to execute precompiled SQL statements

- To use callable statements to execute stored SQL procedures and
functions

- To explore database metadata using the DatabaseMetaData and
ResultSetMetaData interfaces

- To create a universal SQL client for accessing local or remote database

- To execute SQL statements in a batch mode

- To process updatable and scrollable result sets

- To simplify Java database programming using RowSet

- To create a custom table model for RowSet

- To store and retrieve images in JDBC

- To explain how a servlet works

- To create/develop/run servlets

- To deploy servlets on application servers such as Tomcat and GlassFish

- To describe the servlets API

- To create simple servlets

- To create and process HTML forms

- To develop servlets to access databases

- To use hidden fields, cookies, and HttpSession
to track sessions

- To send images from servlets

- To create a simple JSP page

- To explain how a JSP page is processed

- To use JSP constructs to code JSP script

- To use predefined variables and directives in JSP

- To use JavaBeans components in JSP

- To get and set JavaBeans properties in JSP

- To associate JavaBeans properties with input
parameters

- To forward requests from one JSP page to another

- To develop an application for browsing database tables using
JSP

- To explain what JSF is

- To create a JSF page using NetBeans

- To use JSF UI components (e.g., Static Text, Text Field,
Button, Drop Down List, List Box, Radio Button Group,
Check Box Group, Text Area, Table)

- To use JSF containers Grid Panel, Group Panel, and
Layout Panel to group components

- To bind data with JSF UI components

- To maintain persistency using session tracking

- To validate input using Message components

- To improve efficiency using virtual forms

- To describe what a Web service is

- To create a Web service class

- To publish and test a Web service

- To create a Web service client reference

- To explain the role of WSDL

- To pass arguments of object type in a Web service

- To discover how a client communicates with a Web
service

- To describe what SOAP requests and SOAP responses
are

- To track a session in Web services

- To explain how RMI works

- To describe the process of developing RMI applications

- To distinguish between RMI and socket-level programming

- To develop three-tier applications using RMI

- To use callbacks to develop interactive applications