internet technologies 9 - servlets and javabeansricci/it/slides/9-servlets3.pdf · shopping cart is...

63
Internet Technologies 9 - Servlets and JavaBeans F. Ricci 2010/2011

Upload: others

Post on 04-Mar-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Internet Technologies 9 - Servlets and JavaBeans

F. Ricci 2010/2011

Page 2: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Content

p  Implementing session tracking from scratch p  The session-tracking API p  Storing immutable objects vs. storing mutable objects p  Examples of usage of the session-tracking API p  Understanding the benefits of beans p  Creating beans p  Installing bean classes on your server p  Accessing bean properties p  Explicitly setting bean properties p  Automatically setting bean properties from request

parameters p  Sharing beans among multiple servlets and JSP pages

Most of the slides were made available by www. coreservlets.com

Page 3: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Rolling Your Own Session Tracking: Cookies

p  Idea: associate cookie with data on server String sessionID = makeUniqueString(); HashMap sessionInfo = new HashMap();

HashMap globalTable = findTableStoringSessions(); globalTable.put(sessionID, sessionInfo); Cookie sessionCookie = new Cookie("JSESSIONID", sessionID); sessionCookie.setPath("/");

response.addCookie(sessionCookie);

p  Still to be done: n  Extracting cookie that stores session identifier n  Setting appropriate expiration time for cookie n  Associating the hash tables with each request n  Generating the unique session identifiers

Page 4: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Your Own Session Tracking: URL-Rewriting

p  Idea n  Client appends some extra data on the end of each

URL that identifies the session n  Server associates that identifier with data it has

stored about that session n  E.g., http://host/path/file.html;jsessionid=1234

p  Advantage n  Works even if cookies are disabled or unsupported

p  Disadvantages n  Must encode all URLs that refer to your own site n  All pages must be dynamically generated n  Fails for bookmarks and links from other sites.

Page 5: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Your Own Session Tracking: Hidden Fields

p  Idea: <INPUT TYPE="HIDDEN" NAME="session" VALUE="...">

p  Advantage n  Works even if cookies are disabled or

unsupported p  Disadvantages

n  Lots of tedious processing n  All pages must be the result of form

submissions.

Page 6: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Session Tracking in Java

p  Session objects live on the server p  Sessions automatically associated with client via cookies

or URL-rewriting

p  Use request.getSession() to get session n  Behind the scenes, the system looks at cookie or URL

extra info and sees if it matches the key to some previously stored session object

n  If so, it returns that stored session object n  If not, it creates a new one, assigns a cookie or URL

info as its key, and returns that new session object p  Hashtable-like mechanism lets you store arbitrary

objects inside the HttpSession object

n  setAttribute(name, value) stores values

n  getAttribute(name) retrieves values

Page 7: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Session Tracking Basics

p  Access the session object n  Call request.getSession to get HttpSession object

p This is a hashtable associated with the user p  Store information in a session

n  Use setAttribute with a key (String) and a value (object)

p  Look up information associated with a session n  Call getAttribute on the HttpSession object, cast

the return value to the appropriate type, and check whether the result is null

p  Discard session data n  Call removeAttribute discards a specific value n  Call invalidate to discard an entire session.

Page 8: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Session Tracking Basics: Sample Code

HttpSession session = request.getSession(); SomeClass value = (SomeClass)session.getAttribute("credentials"); if (value == null) { value = new SomeClass(...); session.setAttribute("credentials", value); } doSomethingWith(value);

n  Do not need to call setAttribute again (after modifying value) if the modified value is the same object

n  But, if value is immutable (e.g. a String object), modified value will be a new object reference, and you must call setAttribute again.

Page 9: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

What Changes if Server Uses URL Rewriting?

p  Session tracking code: No change p  Code that generates hypertext links back to same

site: n  Pass URL through response.encodeURL()

p  If server is using cookies, this returns URL unchanged

p  If server is using URL rewriting, this appends the session info to the URL

p E.g.: String url = "order-page.html"; url = response.encodeURL(url);

p  Code that does sendRedirect to own site: n  Pass URL through response.encodeRedirectURL()

Page 10: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

HttpSession Methods p  getAttribute

n  Extracts a previously stored value from a session object - returns null if no value is associated with given name

p  setAttribute

n  Associates a value with a name n  If you want to monitor changes: value must implement HttpSessionBindingListener interface (method valueBound)

p  removeAttribute

n  Removes values associated with name p  getAttributeNames

n  Returns names of all attributes in the session p  getId

n  Returns the unique identifier.

Page 11: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

HttpSession Methods (Continued)

p  isNew n  Determines if session is new to client (e.g. the

client has not sent back the cookie) p  getCreationTime

n  Returns time at which session was first created p  getLastAccessedTime

n  Returns time at which session was last sent from client

p  getMaxInactiveInterval,setMaxInactiveInterval n  Gets or sets the amount of time session should go

without access before being invalidated p  invalidate

n  Invalidates current session.

Page 12: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

A Servlet that Shows Per-Client Access Counts

public class ShowSession extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); HttpSession session = request.getSession(); String heading; Integer accessCount = (Integer)session.getAttribute("accessCount"); if (accessCount == null) { accessCount = new Integer(0); heading = "Welcome, Newcomer"; } else { heading = "Welcome Back"; accessCount = new Integer(accessCount.intValue() + 1); } session.setAttribute("accessCount", accessCount);

call

Must be an object (not

an int)

Page 13: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

A Servlet that Shows Per-Client Access Counts

PrintWriter out = response.getWriter(); … out.println (docType + "<HTML>\n" + "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n" + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<CENTER>\n" + "<H1>" + heading + "</H1>\n" + "<H2>Information on Your Session:</H2>\n" + "<TABLE BORDER=1>\n" + "<TR BGCOLOR=\"#FFAD00\">\n" + " <TH>Info Type<TH>Value\n" + … " <TD>Number of Previous Accesses\n" + " <TD>" + accessCount + "\n" + "</TABLE>\n" + "</CENTER></BODY></HTML>");

Page 14: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Shows Per-Client Access Counts: Result 1

session.getId()

new Date(session.getCreat

ionTime())

new Date(session.getLastAcc

essedTime())

Page 15: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Shows Per-Client Access Counts: Result 12

Page 16: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Accumulating a List of User Data: Front End

call

Page 17: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Accumulating a List of User Data: Result

Page 18: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Accumulating a List of User Data public class ShowItems extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); ArrayList previousItems = (ArrayList)session.getAttribute("previousItems"); if (previousItems == null) { previousItems = new ArrayList(); session.setAttribute("previousItems", previousItems); } String newItem = request.getParameter("newItem"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = "Items Purchased"; String docType = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n";

Page 19: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Accumulating a List of User Data out.println(docType + "<HTML>\n" + "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n" + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1>" + title + "</H1>"); synchronized(previousItems) { if (newItem != null) { previousItems.add(newItem); } if (previousItems.size() == 0) { out.println("<I>No items</I>"); } else { out.println("<UL>"); for(int i=0; i<previousItems.size(); i++) { out.println(" <LI>" + (String)previousItems.get(i)); } out.println("</UL>"); } } out.println("</BODY></HTML>"); } }

Page 20: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

An On-Line Bookstore

call

call

Page 21: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

An On-Line Bookstore

p  This servlet displays three forms n  Two ("update order" submit) call again the same servlet

and update the number of items in the cart n  The third call the checkout page (not displayed here)

Page 22: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

An On-Line Bookstore

p  Session tracking code stays the same as in simple examples

p  Shopping cart is an attribute of the session object p  Shopping cart class is relatively complex

n  Identifies items by a unique catalog ID n  Does not repeat items in the cart

p Instead, each entry has a count associated with it

p If count reaches zero, item is deleted from cart

p  Pages built automatically from objects that have descriptions of books.

Page 23: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Distributed and Persistent Sessions

p  Some servers support distributed Web applications n  Load balancing used to send different requests to

different machines - sessions should still work even if different hosts are hit

p  Some servers support persistent sessions n  Session data written to disk and reloaded when server is

restarted (as long as browser stays open) p  Tomcat 5 and 6 support this

p  To support both, session data should implement the java.io.Serializable interface n  There are no methods in this interface; it is just a flag:

public class MySessionData implements Serializable ... }

n  Builtin classes like String and ArrayList are already Serializable

Page 24: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Uses of JSP Constructs

p  Scripting elements calling servlet code directly

p  Scripting elements calling servlet code indirectly (by means of utility classes)

p  Beans p  Servlet/JSP combo (MVC) p  MVC with JSP expression language p  Custom tags p  MVC with beans, custom tags, and a

framework like Struts or JSF

Simple Application

Complex Application

Page 25: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

What Are Beans?

p  Java classes that follow certain conventions: n  Must have a zero-argument (empty) constructor

p  You can satisfy this requirement either by explicitly defining such a constructor or by omitting all constructors

p  Not required if no JSP creates instances n  Should have no public instance variables (fields)

p  You should follow this practice and use accessor methods instead of allowing direct access to fields

n  Persistent values should be accessed through methods called getXxx and setXxx

p  If class has method getTitle that returns a String, class is said to have a String property named title

p  Boolean properties use isXxx instead of getXxx.

Page 26: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Using Beans: Basic Tasks

p  jsp:useBean - in the simplest case, this element builds a new bean

<jsp:useBean id="beanName" class="package.Class" />

p  jsp:setProperty - this element modifies a bean property (i.e., calls a method of the form setXxx)

<jsp:setProperty name="beanName"

property="propertyName" value="propertyValue" />

p  jsp:getProperty - this element reads and outputs the value of a bean property

<jsp:getProperty name="beanName"

property="propertyName" />

Page 27: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Using Beans in Standalone Pages

p  User submits form that refers to a JSP page <FORM ACTION="SomePage.jsp">

p  JSP page instantiates a bean <jsp:useBean id="myBean" class="…"/>

p  The JSP page passes some request data to the bean <jsp:setProperty name="myBean" property="customerID" value="…"/>

p  The JSP page outputs some value(s) derived from the request data and contained in the bean <jsp:getProperty name="myBean" property="bankAccountBalance"/>

Page 28: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Example: StringBean package coreservlets; public class StringBean { private String message = "No message specified"; public String getMessage() { return(message); } public void setMessage(String message) { this.message = message; } }

p  Beans installed in normal Java directory n  Let the IDE to decide where to create n  Deployment: WEB-INF/classes/

folderMatchingPackage p  Beans must always be in packages!

Field is private!

getXxx is required

setXxx is required

Page 29: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

JSP Page That Uses StringBean (Code)

<jsp:useBean id="stringBean" class="coreservlets.StringBean" /> <OL> <LI>Initial value (from jsp:getProperty): <I><jsp:getProperty name="stringBean" property="message" /></I> <LI>Initial value (from JSP expression): <I><%= stringBean.getMessage() %></I> <LI><jsp:setProperty name="stringBean" property="message" value="Best string bean: Fortex" /> Value after setting property with jsp:setProperty: <I><jsp:getProperty name="stringBean" property="message" /></I> <LI><% stringBean.setMessage ("My favorite: Kentucky Wonder"); %> Value after setting property with scriptlet: <I><%= stringBean.getMessage() %></I> </OL>

Page 30: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

JSP Page That Uses StringBean(Result)

call

Page 31: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Why Using Accessors, Not Public Fields

p  To be a bean, you cannot have public fields p  So, you should replace

public double speed;

p  with private double speed;

public double getSpeed() {

return(speed);

}

public void setSpeed(double newSpeed) {

speed = newSpeed;

}

p  You should do this in all your Java code anyhow. Why?

Page 32: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Why You Should Use Accessors

p  You can put constraints on values: public void setSpeed(double newSpeed) { if (newSpeed < 0) {

sendErrorMessage(...); newSpeed = Math.abs(newSpeed); } speed = newSpeed; }

p  You can change your internal representation without changing interface: // Now using metric units (kph, not mph) public void setSpeed(double newSpeed) { speedInKPH = convert(newSpeed); } public void setSpeedInKPH(double newSpeed){ speedInKPH = newSpeed; }

New field replaces speed

but you must

convert input in

mph

Page 33: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Why You Should Use Accessors

p  You can perform arbitrary side effects

public double setSpeed(double newSpeed) {

speed = newSpeed;

updateSpeedometerDisplay();

}

p  If users of your class accessed the fields directly, then they would each be responsible for executing side effects

p  Too much work and runs huge risk of having display inconsistent from actual values.

Page 34: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Setting Bean Properties

<!DOCTYPE ...>

...

<jsp:useBean id="entry" class="coreservlets.SaleEntry" />

<%-- setItemID expects a String --%>

<jsp:setProperty

name="entry"

property="itemID"

value='<%= request.getParameter("itemID") %>' />

p  Here we have used a JSP expression for the value attribute

p  JSP attribute values must be fixed strings but for the value attribute that is possible

p  Single quote is used because double quote is used in the expression.

Page 35: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Setting Bean Properties: Explicit Conversion & Assignment

<%

int numItemsOrdered = 1;

try {

numItemsOrdered =

Integer.parseInt(request.getParameter("numItems"));

} catch(NumberFormatException nfe) {}

%>

<%-- setNumItems expects an int --%>

<jsp:setProperty

name="entry"

property="numItems"

value="<%= numItemsOrdered %>" />

Page 36: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Setting Bean Properties: Explicit Conversion & Assignment <%

double discountCode = 1.0;

try {

String discountString =

request.getParameter("discountCode");

discountCode =

Double.parseDouble(discountString);

} catch(NumberFormatException nfe) {}

%>

<%-- setDiscountCode expects a double --%>

<jsp:setProperty

name="entry"

property="discountCode"

value="<%= discountCode %>" />

Page 37: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Setting Bean Properties: Explicit Conversion & Assignment

SaleEntry1.jsp

SaleEntry1-Form.jsp

Bean SaleEntry.java

Reading parameters and creating a bean with

property values equal to the parameters.

Displaying the bean property values.

call

Page 38: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Associating Properties with Input Parameters

p  Use the param attribute of jsp:setProperty to indicate that n  Value should come from specified request

parameter n  Simple automatic type conversion from the String type of the parameter should be performed for properties that expect values of standard types p boolean, Boolean, byte, Byte, char,

Character, double, Double, int, Integer, float, Float, long, or Long.

Page 39: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Associating Properties with Input Parameters

<jsp:useBean id="entry"

class="coreservlets.SaleEntry" />

<jsp:setProperty

name="entry"

property="itemID"

param="itemID" />

<jsp:setProperty

name="entry"

property="numItems"

param="numItems" />

<jsp:setProperty

name="entry"

property="discountCode"

param="discountCode" />

The parameter named "itemID" received by the JSP is passed to the bean "entry" to set the property "itemID".

SaleEntry2.jsp

Page 40: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Associating All Properties with Input Parameters

p  Use "*" for the value of the property attribute of jsp:setProperty to indicate that n  Value should come from request parameter whose

name matches property name n  Simple automatic type conversion should be

performed

<jsp:useBean id="entry" class="coreservlets.SaleEntry" /> <jsp:setProperty name="entry" property="*" />

p  This is extremely convenient for making "form beans": objects whose properties are filled in from a form submission.

SaleEntry3.jsp

Page 41: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Warning

p  No action is taken when an input parameter is missing – the system does not supply a null value so the bean must have default values for properties

p  Automatic type conversion does not guard against illegal values as you could do with manual type conversion

p  Bean property names and request parameters are case sensitive – the property name and the request parameter name must match exactly.

Page 42: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Sharing Beans

p  Up to now the beans we created are bound to local variables in _jspService

p  You can use the scope attribute to specify additional places where bean is stored

n  <jsp:useBean id="…" class="…" scope="…" />

p  Lets multiple servlets or JSP pages share data p  Also permits conditional bean creation

n  Creates new object only if it can't find existing one in the location specified by scope

n  Only if it has not been created by another JSP or servlet.

Values: page,

request, session,

application.

Page 43: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Sharing Beans: Example

p  page1.jsp <jsp:useBean id="foo" class="…" scope="application"/> <jsp:setProperty name="foo" property="message"

value="Hello"/> <jsp:getProperty name="foo" property="message">

p  page2.jsp <jsp:useBean id="foo" class="…" scope="application"/> <jsp:getProperty name="foo" property="message">

p  Possible scenario 1 n  Joe goes to page 2: output is n  Jane goes to page 1: output is

p  Possible scenario 2 n  Joe goes to page 1: output is n  Jane goes to page 2: output is

"Default Message" "Hello"

"Hello" "Hello"

Page 44: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Values of the scope Attribute

p  Page: <jsp:useBean … scope="page"/> or <jsp:useBean…> n  Default value: bean object is placed in the PageContext object, accessible through the pageContext variable, for the duration of the current request (see JSP specifications)

n  Methods in the generated servlet can access the bean

p  Application: <jsp:useBean … scope="application"/> n  Bean will be stored in ServletContext - available

through the application variable or by call to getServletContext() (method of HttpServlet)

n  ServletContext is shared by all servlets in the same Web application.

Page 45: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Values of the scope Attribute

p  Session: <jsp:useBean … scope="session"/> n  Bean will be stored in the HttpSession object

associated with the current request (session variable), where it can be accessed from regular servlet code with getAttribute and setAttribute, as with normal session objects

p  Request: <jsp:useBean … scope="request"/> n  Bean object should be placed in the HttpServletRequest object for the duration of the current request, where it is available by means of getAttribute

n  Do not miss getAttribute with getParameter, used to access the parameters sent by the client.

Page 46: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Sharing Beans Four Ways: Bean Code package coreservlets; public class BakedBean { private String level = "half-baked"; //default value private String goesWith = "hot dogs"; //default value public String getLevel() { return(level); } public void setLevel(String newLevel) { level = newLevel; } public String getGoesWith() { return(goesWith); } public void setGoesWith(String dish) { goesWith = dish; } }

BakedBean.java

Page 47: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Page-Scoped - Unshared

p  Create the bean n  Use jsp:useBean with scope="page" (or no

scope at all, since page is the default) p  Modify the bean

n  Use jsp:setProperty with property="*" n  This will supply request parameters that match

the bean property names (level and goesWith)

p  Access the bean n  Use jsp:getProperty

Page 48: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Page-Scoped - Unshared

<BODY>

<H1>Baked Bean Values: page-based Sharing</H1>

<jsp:useBean id="pageBean"

class="coreservlets.BakedBean" />

<jsp:setProperty name="pageBean" property="*" />

<H2>Bean level:

<jsp:getProperty name="pageBean"

property="level" />

</H2>

<H2>Dish bean goes with:

<jsp:getProperty name="pageBean"

property="goesWith" />

</H2>

</BODY></HTML> BakedBeanDisplay-page.jsp

No scope attribute

page scope is default

Page 49: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Result by passing a parameter

p  A parameter is passed to the JSP: goesWith=fish

call

Page 50: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Result without passing parameters

p  A second call without passing a parameter p  The value of the bean property goesWith, set in

the previous call is forgotten, the default ("hot dogs") is returned.

call

Page 51: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Request-Based Sharing

p  Create the bean n  Use jsp:useBean with scope="request"

p  Modify the bean n  Use jsp:setProperty with property="*" n  When calling the JSP supply request parameters

that match the bean property names p  Access the bean in the 1st (main) page

n  Use jsp:getProperty n  Use jsp:include (action not the directive) to

invoke the second page p  Access the bean in the 2nd (included) page

n  Use jsp:useBean with the same id as in the first page, again with scope="request"

n  Then, use jsp:getProperty.

Page 52: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Request-Based Sharing: Main Page …

<BODY>

<H1>Baked Bean Values: request-based Sharing</H1>

<jsp:useBean id="requestBean"

class="coreservlets.BakedBean"

scope="request" />

<jsp:setProperty name="requestBean"

property="*" />

<H2>Bean level:

<jsp:getProperty name="requestBean"

property="level" /></H2>

<H2>Dish bean goes with:

<jsp:getProperty name="requestBean"

property="goesWith" /></H2>

<jsp:include page="BakedBeanDisplay-snippet.jsp" />

</BODY></HTML> BakedBeanDisplay-request.jsp

Page 53: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Code for Included Page

<H1>Repeated Baked Bean Values:

request-based Sharing</H1>

<jsp:useBean id="requestBean"

class="coreservlets.BakedBean"

scope="request" />

<H2>Bean level:

<jsp:getProperty name="requestBean"

property="level" />

</H2>

<H2>Dish bean goes with:

<jsp:getProperty name="requestBean"

property="goesWith" />

</H2>

BakedBeanDisplay-snippet.jsp

Page 54: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Request-Based Sharing

p  The property goesWith, set to fish in the main JSP is also view in the second page (snippet included).

call

Page 55: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

The jsp:param Element: Augmenting Request Parameters

p  Code <jsp:include page="/fragments/StandardHeading.jsp">

<jsp:param name="bgColor" value="YELLOW" />

</jsp:include>

p  Requested URL n  http://host/path/MainPage.jsp?fgColor=RED

p  Main page n  fgColor: RED n  bgColor: null

p  Regardless of whether you check before or after inclusion

p  Included page n  fgColor: RED n  bgColor: YELLOW

Page 56: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Session-Based Sharing

p  Create the bean n  Use jsp:useBean with scope="session"

p  Modify the bean n  Use jsp:setProperty with property="*" n  Then, supply request parameters that match the bean

property names p  Access the bean in the initial request

n  Use jsp:getProperty in the request in which jsp:setProperty is invoked

p  Access the bean later n  Use jsp:getProperty in a request that does not include

request parameters and thus does not invoke jsp:setProperty

n  If this request is from the same client the previously modified value is seen.

Page 57: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Session-Based Sharing: Code …

<BODY>

<H1>Baked Bean Values: session-based Sharing</H1>

<jsp:useBean id="sessionBean"

class="coreservlets.BakedBean"

scope="session" />

<jsp:setProperty name="sessionBean"

property="*" />

<H2>Bean level:

<jsp:getProperty name="sessionBean"

property="level" />

</H2>

<H2>Dish bean goes with:

<jsp:getProperty name="sessionBean"

property="goesWith" />

</H2></BODY></HTML> BakedBeanDisplay-session.jsp

Page 58: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Initial Request

p  In the initial request we pass a parameter (goesWith=fish)

call

Page 59: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Later Request - Same Client

p  In a second request we do not pass the parameter but the bean still store the property value set in the previous call

call

Page 60: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Application-Based Sharing

p  Create the bean n  Use jsp:useBean with scope="application"

p  Modify the bean n  Use jsp:setProperty with property="*" n  Then, supply request parameters that match the bean

property names p  Access the bean in the initial request

n  Use jsp:getProperty in the request in which jsp:setProperty is invoked

p  Access the bean later n  Use jsp:getProperty in a request that does not include

request parameters and thus does not invoke jsp:setProperty

n  Whether this request is from the same client or a different client, the previously modified value is seen.

Page 61: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Application-Based Sharing: Code

<BODY>

<H1>Baked Bean Values:

application-based Sharing</H1>

<jsp:useBean id="applicationBean"

class="coreservlets.BakedBean"

scope="application" />

<jsp:setProperty name="applicationBean"

property="*" />

<H2>Bean level:

<jsp:getProperty name="applicationBean"

property="level" />

</H2>

<H2>Dish bean goes with:

<jsp:getProperty name="applicationBean"

property="goesWith"/>

</H2></BODY></HTML> BakedBeanDisplay-application.jsp

Page 62: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Bean property shared between clients

call

Page 63: Internet Technologies 9 - Servlets and JavaBeansricci/IT/slides/9-servlets3.pdf · Shopping cart is an attribute of the session object ! Shopping cart class is relatively complex

Conditional Bean Operations

p  Bean conditionally created n  jsp:useBean results in new bean being

instantiated only if no bean with same id and scope can be found

n  If a bean with same id and scope is found, the preexisting bean is simply bound to variable referenced by id

p  Bean properties conditionally set n  <jsp:useBean ... />

replaced by <jsp:useBean ...>statements</jsp:useBean>

n  The statements (jsp:setProperty elements) are executed only if a new bean is created, not if an existing bean is found.