Mark Dixon 1
12 – Java Beans
Mark Dixon 2
Session Aims & Objectives• Aims
– To cover the use of Java Beans
• Objectives,by end of this week’s sessions, you should be able to:
– Create and use a Java Bean
Mark Dixon 3
PersonList.jsp
• Class complex
• Pages simpler
<%@page import="Main.*" %><%@page contentType="text/html" pageEncoding="UTF-8"%><%!People p = new People();%><%String html = ""; p.Open(); p.Select("SELECT * FROM Person;"); while(p.Next()){ html += p.get("Surname") + "<br />"; } p.Close();%>
<!DOCTYPE html><html> <head><title>People</title></head> <body> <%=html%> </body></html>
Import Package
Use methods
Create Instance
Mark Dixon 4
PersonList.jsp (using Bean)
• Class complex
• Pages simpler
<jsp:useBean id="p" scope="session" class="Main.People" /><%@page contentType="text/html" pageEncoding="UTF-8"%><%String html = ""; p.Open(); p.Select("SELECT * FROM Person;"); while(p.Next()){ html += p.get("Surname") + "<br />"; } p.Close();%>
<!DOCTYPE html><html> <head><title>People</title></head> <body> <%=html%> </body></html>
Create Bean
Use methods
Mark Dixon 5
• JavaBean (Bean) = Java class instance
• JSP programming style strongly encourages JavaBeans use
• special tags built-in for JavaBean properties
• JSP + Bean combination– separates page html look from ‘logic’ – i.e. the presentation from the code
JSP and JavaBeans
Mark Dixon 6
• Java class meeting specific requirements:
– Must have a zero-argument constructor:public MyBean() { …
}
– All properties private (no public properties)
– data accessed via access methods
What is a JavaBean
Mark Dixon 7
BANK ACCOUNT BEAN
0 Parameter constructor Important
Exception is for boolean attributes isXxxx()
Beans MUST be in packages
Get and set methods
MUST conform to getXxxx() and setXxxx()
Can have other methods but method
names cannot look like property get / set
Mark Dixon 8
• An attribute is a variable which belongs to an class/object – For objects also known as instance
variables– For classes also known as class variables
• Remember final static int COLOUR_ONE
• Math.PI is a class variable
• A property is an attribute which has getter and setter methods – And that’s it !
REFINING THE TERMINOLOGY
Mark Dixon 9
• Read-only properties:
String getAccountID()
• returns the accountID property
• Read/write properties:
void setBalance(double bal)double getBalance()
• Boolean properties:
boolean isActive()void setActive(boolean act)
JAVABEAN PROPERTIES
Mark Dixon 10
• It is important to distinguish between a JavaBean as used in a:–GUI development tool
• This is a visual component –i.e. will subclass Panel, Button etc.
• Note there is a visual Bean design tool at:http://java.sun.com/products/javabeans/beanbuilder/
index.jsp
–Server-Side application• We are only dealing with the latter
MORE THAN ONE BEAN
Mark Dixon 11
• <jsp: useBean ……… >
• <jsp: setProperty ……… >
• <jsp: getProperty ……… >
BEAN RELATED TAGS
Mark Dixon 12
BEANS WITH JSP• A JSP file which makes use of the Class Bank
– Note: file called Bank.jsp
Mark Dixon 13
CREATING AN OBJECT
• Creates a bean instance called ‘myAccount’ of type ‘BankAccount’
• The id attribute is the name of the variable • Similar to the following JSP code:<% BankAccount myAccount = new BankAccount(); %>
• Or Java:BankAccount myAccount = new BankAccount();
Note: use of package name
Important
This / is important
Mark Dixon 14
SETTING BEAN PROPERTIES 1
• Sets the value of the myAccount property balance to 500
• Basically the same operation as:
<%= myAccount.setBalance(500) %>
• Or in Java as:BankAccount myAccount = new BankAccount();
mybalance = myAccount.setBalance(500);
Mark Dixon 15
SETTING BEAN PROPERTIES 2• Also can have a dynamic property which uses an
expression tag
• This example is just setting the balance to some random value between 0 and 100
Mark Dixon 16
SETTING BEAN PROPERTIES 3
• Although this value is text
• converted automatically to correct type– In this case a double
Mark Dixon 17
READING BEAN PROPERTIES
• Inserts the value of myAccount property balance into the web page
• Basically the same as:<%= myAccount.getBalance() %>
• Or in Java as:BankAccount myAccount = new BankAccount();
double mybalance;mybalance = myAccount.getBalance();
Mark Dixon 18
JSP BEANS - REVIEWThis line creates an object called myAccount of class BankAccount
This line sets the balance property to 500
This line gets the balance
Note how the value is displayed on the html page
Mark Dixon 19
SETTING BEAN PROPERTIES FROM TEXT
BOXES
• This the same as:
String bal = request.getParamter(“openingbalance”);double tempBal = Double.parseDouble(bal);myaccount.setBalance(tempBal);
Sets the property ‘balance’ to what ever was typed in the textbox.
.jsp Page
.htmlPage
Mark Dixon 20
USING TEXTBOXESIf the textbox name is the same name as the property
Then we do not need a ‘param’
Mark Dixon 21
SETTING BEAN PROPERTIES … ‘WILDCARDS’
• Using wildcards to set properties:
Sets the value of all ‘somebean’ properties to JSP parameters with the same name If the parameters do not exist, the value of the bean properties do
not change
Mark Dixon 22
OpenAccount.html
‘WILDCARDS’ EXAMPLE
NewAccount.jsp
Mark Dixon 23
‘WILDCARDS’ EXAMPLE
Mark Dixon 24
scope = “page”
scope = “request”
• These beans will not last after the request is completed– The difference between these 2 scopes is very small– Beans such as this do not allow you to share data between
servlets and JSPs
scope = “application”
scope = “session”
• These beans will last between requests, thus allowing sharing of data between requests– Again, the differences between these two requests are mostly
cosmetic
JAVABEAN SCOPE 1The default scope
Mark Dixon 25
SESSION BEANS
As Bank.jsp and Rent.jsp are scoped at session level, the object myAccount is not created in Rent.jsp
File: Rent.jsp
Mark Dixon 26
SESSION BEANS
File: Rent.jsp
File: Bank.jsp
The file Bank.jsp
Creates the object myAccount, which is then used by Rent.jsp
Essentially passing information between JSP pages
Mark Dixon 27
CONDITIONAL BEANS
• So far we have used the <jsp: useBean id =“somebean…. > tag – jsp:useBean results in new bean being created only if no bean with
same id and scope can be found– If a bean with same id and scope is found, then that bean is used.
• This means that any property we initially set will be again be set each time we visit the page
• This is ok when we visit the a page for the 1st time as we want to set the properties of the bean which will be used across several pages.
• But what if we wanted to set initial bean properties for a bean which is shared by multiple pages.
• Since we don’t know which page will be accessed first, we don’t know which page should contain the initialization code.
Mark Dixon 28
EXAMPLE:• Lets assume we have a ‘back’ link on the PayRent.jsp
??? Balance should be 350.00
Mark Dixon 29
• Problem is that when we return to the Bank.jsp page the setProperty sets the balance to 500 again
Mark Dixon 30
SOLUTION: CONDITIONAL BEAN• The <jsp:useBean ... />• replaced by
<jsp:useBean ...> statements </jsp:useBean>
• The statements (i.e. jsp:setProperty elements) are executed only if a new bean is created, not if an existing bean is found.
This is subtle but the effects are profound
Modified file: Bank.jsp
Mark Dixon 31
EXAMPLE:• Now we have
Balance is correct at 350.00
Mark Dixon 32
• Apache – http server (html pages)
• Tomcat – runs JSP + Servlets– servlet container (interpreter/compiler)– Can run:
• Standalone– Handles simple page requests– Handles servlet requests
• Apache plugin– Apache handles HTML pages, CGI, PHP etc– Tomcat handles servlets
Apache Tomcat
Mark Dixon 33
Tomcat: LocalHost
Mark Dixon 34
Directory Description context root This is the root directory for the Web application.
All JSPs, HTML documents, and supporting files reside in this directory or subdirectories. Name of directory is specified by the Web creator. To provide structure in a Web application, subdirectories can be placed in the context root. i.e. /images
WEB-INF This directory contains the Web application deployment descriptor (web.xml)
WEB-INF/classes Contains the servlet class files and other supporting class files used in a Web application. If the classes are part of a package, the complete package directory structure would begin here.
WEB-INF/lib This directory contains Java archive (JAR) files. JAR files can contain servlet class files and other supporting class files used in a Web application.
Tomcat Directory Structure
Mark Dixon 35
Tomcat Folder StructureContext root
Starting html page
Web application deployment descriptor (web.xml) Package name of
the HelloServlet class
The HelloServlet class
NetbeansWill create this
Structure …
Mark Dixon 36
• fgfg
Default location is in webapps
Can have any number of
webapplications in webapps
But each need WEB-INF and
web.xml
Tomcat Folder Structure
Mark Dixon 37
Tomcat - NetBeans• JRE_HOME = C:\Program Files\Java\jre6
– Control Panel– System– Advanced– Environment Variables
• C:\Program Files\Apache Software Foundation\Apache Tomcat 7.0.14\bin– startup.bat (run from command line)
• http://localhost:8080/
Mark Dixon 38
• Hall, M. Servlets and Java Server Pages 2nd Edition– Chapter 14: Using Beans with JSP
• Best coverage
• Armstrong, E. (2003) The J2EE 1.4 Tutorial – chapter 12: Pages 515 - 525
• http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html
38
REFERENCES - READ AT LEAST ONE OF …