1 / 74

USING JAVABEANS COMPONENT IN JSP DOCUMENTS

USING JAVABEANS COMPONENT IN JSP DOCUMENTS. References. Marty Hall. Core Servlet and Java Server Page. Sun Micro System. Prentice Hall PTR; 1 edition 2000. (Chapter 14, 15, 16). Content. Why use Beans What are Beans Using Beans (setting, getting Bean Properties)

Télécharger la présentation

USING JAVABEANS COMPONENT IN JSP DOCUMENTS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. USING JAVABEANS COMPONENT IN JSP DOCUMENTS

  2. References • Marty Hall. Core Servlet and Java Server Page. Sun Micro System. Prentice Hall PTR; 1 edition 2000. (Chapter 14, 15, 16)

  3. Content • Why use Beans • What are Beans • Using Beans (setting, getting Bean Properties) • <Jsp:useBean Options> (type, scope) • Sharing Beans • Setting Bean Properties: Advanced Techniques • Examples

  4. Strategies for invoking dynamic code from JSP

  5. Why use Beans ? • No Java syntax • Simpler object sharing • Convenient correspondence between request parameters and object properties: The JSP bean constructs greatly simplify the process of reading request parameters, converting from strings, and putting the results inside objects.

  6. What are Beans? • Beans are simply Java classes that are written in a standard format • A bean class must have a zero-argument (default) constructor. • A bean class should have no public instance variables (fields). • Persistent values should be accessed through methods called getXxx and setXxx

  7. Using Beans • jsp:useBean. In the simplest case, this element builds a new bean. It is normally used as follows: • <jsp:useBean id="beanName“ class="package.Class" /> Ex: <jsp:useBean id=“simBean“ class=“MyBeans.SimpleBean" /> or <% MyBeans.SimpleBean simBean = new MyBeans.SimpleBean(); %>

  8. Using Beans • jsp:getProperty. This element reads and outputs the value of a bean property. Reading a property is a shorthand notation for calling a method of the form getXxx. This element is used as follows: • <jsp:getProperty name="beanName" property="propertyName" /> • jsp:setProperty. This element modifies a bean property (i.e., calls a method of the form setXxx). It is normally used as follows: • <jsp:setProperty name="beanName" property="propertyName" value="propertyValue" />

  9. Installing Bean Classes • In the same directories where servlets can be installed • WEB-INF/classes/subdirectoryMatchingPackageName • Example: • MyWebApp/WEB-INF/classes/MyBeans/BookClass.class • WEB-INF/lib for JAR files.

  10. Example 1: SimpleBean.Java package MyBeans; public class SimpleBean { private String msg = "No Message"; private int id = 0; public String getMessage() { return msg; } public void setMessage(String msg) { this.msg = msg; } public void setId(int iId) { this.id = iId; } public int getId() { return this.id; } }

  11. Example 1: useSimpleBean.jsp <jsp:useBean id="simpleBean" class="MyBeans.SimpleBean"></jsp:useBean> <br>Message: <jsp:getProperty name="simpleBean" property="message"></jsp:getProperty> <br>ID:<jsp:getProperty name="simpleBean" property="id"></jsp:getProperty> <jsp:setProperty name="simpleBean" property="id" value="1"></jsp:setProperty> <jsp:setProperty name="simpleBean" property="message" value="New Message"></jsp:setProperty> <br><b>After Setting: </b> <br>Message: <jsp:getProperty name="simpleBean" property="message"></jsp:getProperty> <br>ID:<jsp:getProperty name="simpleBean" property="id"></jsp:getProperty>

  12. Using jsp:useBean Options: type • In most cases, you want the local variable to have the same type as the object being created. In a few cases, however, you might want the variable to be declared to have a type that is a superclass of the actual bean type or is an interface that the bean implements. Use the type attribute to control this declaration, as in the following example. <jsp:useBean id="thread1" class="mypackage.MyClass" type="java.lang.Runnable" /> • This use results in code similar to the following being inserted into the _jspService method. java.lang.Runnable thread1 = new myPackage.MyClass();

  13. Using jsp:useBean Options: scope • <jsp:useBean ... scope="page" />: default • <jsp:useBean ... scope="request" /> : • <jsp:useBean ... scope="session" /> : • <jsp:useBean ... scope="application" /> :

  14. Sharing Beans • First, a jsp:useBean element results in a new bean being instantiated only if no bean with the same id and scope can be found. If a bean with the same id and scope is found, the preexisting bean is simply bound to the variable referenced by id. • Second, instead of <jsp:useBean ... /> you can use <jsp:useBean ...>statements</jsp:useBean>

  15. Sharing Beans • The point of using the second form is that the statements between the jsp:useBean start and end tags are executed only if a new bean is created, not if an existing bean is used. Because jsp:useBean invokes the default (zero-argument) constructor, you frequently need to modify the properties after the bean is created. To mimic a constructor, however, you should make these modifications only when the bean is first created, not when an existing (and presumably updated) bean is accessed. No problem: multiple pages can contain jsp:setProperty statements between the start and end tags of jsp:useBean; only the page first accessed executes the statements.

  16. Sharing Beans • <jsp:useBean ... scope="page" />: in addition to being bound to a local variable, the bean object should be placed in the PageContext object for the duration of the current request. This indicates that the bean is not shared and thus a new bean will be created for each request.

  17. Sharing Beans • <jsp:useBean ... scope="request" />: in addition to being bound to a local variable, the bean object should be placed in the HttpServletRequest object for the duration of the current request

  18. Sharing Beans • <jsp:useBean ... scope=" session" />: in addition to being bound to a local variable, the bean will be stored in the HttpSession object associated with the current request

  19. Sharing Beans • <jsp:useBean ... scope=“application" />: in addition to being bound to a local variable, the bean will be stored in the ServletContext. The ServletContext is shared by all servlets and JSP pages in the Web application

  20. Example 2: AccessCountBean.java package coreservlets; /** Simple bean to illustrate sharing beans through * use of the scope attribute of jsp:useBean. */ public class AccessCountBean { private String firstPage; private int accessCount = 1; public String getFirstPage() { return(firstPage); }

  21. Example 2: AccessCountBean.java public void setFirstPage(String firstPage) { this.firstPage = firstPage; } public int getAccessCount() { return(accessCount); } public void setAccessCountIncrement(int increment) { accessCount = accessCount + increment; } }

  22. Example 2: SharedCounts1.jsp <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD><TITLE>Shared Access Counts: Page 1</TITLE></HEAD> <BODY> <TABLE BORDER=5 ALIGN="CENTER"> <TR><TH CLASS="TITLE"> Shared Access Counts: Page 1</TABLE> <P> <jsp:useBean id="counter" class="coreservlets.AccessCountBean" scope="application"> <jsp:setProperty name="counter" property="firstPage" value="SharedCounts1.jsp" /> </jsp:useBean>

  23. Example 2: SharedCounts1.jsp Of SharedCounts1.jsp (this page), <A HREF="SharedCounts2.jsp">SharedCounts2.jsp</A>, and <A HREF="SharedCounts3.jsp">SharedCounts3.jsp</A>, <jsp:getProperty name="counter" property="firstPage" /> was the first page accessed. <P> Collectively, the three pages have been accessed <jsp:getProperty name="counter" property="accessCount" /> times. <jsp:setProperty name="counter" property="accessCountIncrement" value="1" /> </BODY></HTML>

  24. Example 2

  25. Setting Bean Properties: Advanced Techniques • For example, the SaleEntry class shown in has an itemID property (a String), a numItems property (an int), a discountCode property (a double), and two read-only properties, itemCost and totalCost

  26. Setting Bean Properties: Advanced Techniques • <jsp:useBean id="entry" class="coreservlets.SaleEntry" /> • <jsp:setProperty name="entry" property="itemID" value='<%= request.getParameter("itemID") %>' /> ???

  27. Setting Bean Properties: Advanced Techniques – SaleEntry Class package coreservlets; /** Simple bean to illustrate the various forms * of jsp:setProperty. */ public class SaleEntry{ private String itemID = "unknown"; private double discountCode = 1.0; private int numItems = 0; public String getItemID() { return(itemID); } public void setItemID(String itemID) { if (itemID != null) { this.itemID = itemID; } else { this.itemID = "unknown"; } }

  28. Setting Bean Properties: Advanced Techniques - SaleEntry Class public double getDiscountCode() { return(discountCode); } public void setDiscountCode(double discountCode) { this.discountCode = discountCode; } public int getNumItems() { return(numItems); } public void setNumItems(int numItems) { this.numItems = numItems; }

  29. Setting Bean Properties: Advanced Techniques - SaleEntry Class public double getItemCost() { double cost; if (itemID.equals("a1234")) { cost = 12.99*getDiscountCode(); } else { cost = -9999; } return(roundToPennies(cost)); } private double roundToPennies(double cost) { return(Math.floor(cost*100)/100.0); } public double getTotalCost() { return(getItemCost() * getNumItems()); } }

  30. Setting Bean Properties: Advanced Techniques - SaleEntry1-Form.jsp

  31. Setting Bean Properties: Advanced Techniques - SaleEntry1-Form.jsp <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE>Invoking SaleEntry1.jsp</TITLE> </HEAD> <BODY> <CENTER> <TABLE BORDER=5> <TR><TH CLASS="TITLE"> Invoking SaleEntry1.jsp</TABLE> <FORM ACTION="SaleEntry1.jsp"> Item ID: <INPUT TYPE="TEXT" NAME="itemID"><BR> Number of Items: <INPUT TYPE="TEXT" NAME="numItems"><BR> Discount Code: <INPUT TYPE="TEXT" NAME="discountCode"><P> <INPUT TYPE="SUBMIT" VALUE="Show Price"> </FORM> </CENTER></BODY></HTML>

  32. Setting Bean Properties: Advanced Techniques - SaleEntry1.jsp <jsp:useBean id="entry" class="coreservlets.SaleEntry" /> <jsp:setProperty name="entry" property="itemID" value='<%= request.getParameter("itemID") %>' /> <% int numItemsOrdered = 1; try { numItemsOrdered = Integer.parseInt(request.getParameter("numItems")); } catch(NumberFormatException nfe) {} %> <jsp:setProperty name="entry" property="numItems" value="<%= numItemsOrdered %>" />

  33. Setting Bean Properties: Advanced Techniques - SaleEntry1.jsp <% double discountCode = 1.0; try { String discountString = request.getParameter("discountCode"); discountCode = Double.parseDouble(discountString); } catch(NumberFormatException nfe) {} %> <jsp:setProperty name="entry" property="discountCode" value="<%= discountCode %>" />

  34. Setting Bean Properties: Advanced Techniques - SaleEntry1.jsp … <TD><jsp:getProperty name="entry" property="itemID" /> <TD>$<jsp:getProperty name="entry" property="itemCost" /> <TD><jsp:getProperty name="entry" property="numItems" /> <TD>$<jsp:getProperty name="entry" property="totalCost" /> …

  35. Setting Bean Properties: Advanced Techniques <jsp:setProperty name="entry" property="numItems"param="numItems" /> Instead of using the value attribute, you use param to name an input parameter. The value of the named request parameter is automatically used as the value of the bean property, and type conversions from String to primitive types (byte, int, double, etc.) and wrapper classes (Byte, Integer, Double, etc.) are automatically performed.

  36. Setting Bean Properties: Advanced Techniques • You can simplify the code slightly if the request parameter name and the bean property name are the same. <jsp:setProperty name="entry" property="numItems" /> <%-- param="numItems" is assumed. --%>

  37. Setting Bean Properties: Advanced Techniques – SaleEntry2.jsp ... <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" /> ...

  38. Setting Bean Properties: Advanced Techniques – SaleEntry3.jsp • Associating All Properties with Request Parameters <jsp:setProperty name="entry" property="*" /> ... <jsp:useBean id="entry" class="coreservlets.SaleEntry" /> <jsp:setProperty name="entry" property="*" /> ...

  39. Warnings • No action is taken when an input parameter is missing. • Automatic type conversion does not guard against illegal values as effectively as does manual type conversion • Bean property names and request parameters are case sensitive. So, the property name and request parameter name must match exactly.

  40. INTEGRATING SERVLETS AND JSP: THE MVC MODEL ARCHITECTURE

  41. References • Marty Hall. Core Servlet and Java Server Page. Sun Micro System. Prentice Hall PTR; 1 edition 2000. (Chapter 14, 15, 16)

  42. Content • Understanding the benefits of MVC • Using RequestDispatcher to implement MVC • sendRedirect method of Response & forward method of RequestDispatcher • Summarizing MVC Code • JSP/Servlet & JavaBean MVC Examples

  43. Strategies for invoking dynamic code from JSP

  44. Understanding the benefits of MVC • Servlets are good at data processing: reading and checking data, communicating with databases, invoking business logic, and so on. • JSP pages are good at presentation: building HTML to represent the results of requests.  How to combine servlets and JSP pages to best make use of the strengths of each technology?

  45. Understanding the benefits of MVC • The original request is handled by a servlet • Model: The servlet invokes the business-logic and data-access code and creates beans to represent the results. That's the model. • View: The servlet decides which JSP page is appropriate to present those particular results and forwards the request there (the JSP page is the view) • Controller: The servlet decides what business logic code applies and which JSP page should present the results (the servlet is the controller).

  46. Implementing MVC with RequestDispatcher • Define beans to represent the data: Your first step is define beans to represent the results that will be presented to the user. • Use a servlet to handle requests: In most cases, the servlet reads request parameters. • Populate the beans: The servlet invokes business logic, or data-access code to obtain the results. The results are placed in the beans that were defined in step 1

  47. Implementing MVC with RequestDispatcher • Store the bean in the request, session, or servlet context: The servlet calls setAttribute on the request, session, or servlet context objects to store a reference to the beans that represent the results of the request. • Forward the request to a JSP page: The servlet determines which JSP page is appropriate to the situation and uses the forward method of RequestDispatcher to transfer control to that page. • Extract the data from the beans: The JSP page accesses beans with jsp:useBean and a scope. The page then uses jsp:getProperty to output the bean properties

  48. sendRedirect &RequestDispatcher • sendRedirect requires the client to reconnect to the new resource, whereas the forward method of RequestDispatcher is handled completely on the server. • sendRedirect results in a different final URL, whereas with forward, the URL ofthe original servlet is maintained. • sendRedirect does not automatically preserve all of the request data; forward does.

  49. Applying MVC Example: Random Number package coreservlets; public class NumberBean { private double num = 0; public NumberBean(double number) { setNumber(number); } public double getNumber() { return(num); } public void setNumber(double number) { num = number; } }

More Related