1 JSP – Java Server Pages: The Gory Details 10 fake-points (which aren’t worth anything) to whoever: 1)spots the quote in this slide and names its source.

Slides:



Advertisements
Similar presentations
Chapter 6 Server-side Programming: Java Servlets
Advertisements

Java Script Session1 INTRODUCTION.
Apache Struts Technology
© Yaron Kanza Advanced Java Server Pages Written by Dr. Yaron Kanza, Edited by permission from author by Liron Blecher.
Java II--Copyright © Tom Hunter. J2EE JSP Custom Tag Libraries.
 Copyright Wipro Technologies JSP Ver 1.0 Page 1 Talent Transformation Java Server Pages.
Using JavaServer Pages Harry R. Erwin, PhD CIT304/CSE301.
JSP – Java Server Pages Part 1 Representation and Management of Data on the Internet.
JSP Tag Extensions And Java Bean. JSP Tag Extensions Tag extensions look like HTML (or rather, XML) tags embedded in a JSP page. They have a special meaning.
DT211/3 Internet Application Development
18-Jun-15 JSP Java Server Pages Reference: Tutorial/Servlet-Tutorial-JSP.html.
JSP – Java Server Pages Representation and Management of Data on the Internet.
JSP Architecture  JSP is a simple text file consisting of HTML or XML content along with JSP elements  JSP packages define the interface for the compiled.
JSP – Java Server Pages Part 2 Representation and Management of Data on the Internet.
Java Enterprise Edition Java Web Development Structure of a web project Introduction to Web Applications The first project Introduction to Java Web Development.
Struts 2.0 an Overview ( )
Overview of JSP Technology. The need of JSP With servlets, it is easy to – Read form data – Read HTTP request headers – Set HTTP status codes and response.
DAT602 Database Application Development Lecture 15 Java Server Pages Part 1.
1 CIS336 Website design, implementation and management (also Semester 2 of CIS219, CIS221 and IT226) Lecture 9 JavaServer Pages (JSP) (Based on Møller.
© Yaron Kanza Server-Side Programming using Java Server Pages Written by Dr. Yaron Kanza, Edited by permission from author by Liron Blecher.
CSC 2720 Building Web Applications Using Java Beans, Custom Tags and Tag Libraries in JSP pages.
Using JavaBeans and Custom Tags in JSP Lesson 3B / Slide 1 of 37 J2EE Web Components Pre-assessment Questions 1.The _____________ attribute of a JSP page.
JSP Java Server Pages Softsmith Infotech.
JavaServer Faces Jeff Schmitt October 5, Introduction to JSF Presents a standard framework for building presentation tiers for web applications.
Li Tak Sing COMPS311F. Static attributes in Servlets Since Servlets are also Java classes, you can also use static attributes to store values that can.
® IBM Software Group © 2007 IBM Corporation JSP Custom Tags
Introduction to Java Server Pages (JSPs) Robert Thornton.
Chapter 7 Java Server Pages. Objectives Explain how the separation of concerns principle applies to JSP Describe the operation and life-cycle of a JSP.
Introduction to JavaServer Pages (JSP) Slides from Dr. Mark Llewellyn.
Java Server Pages Lecture July Java Server Pages Java Server Pages (JSPs) provide a way to separate the generation of dynamic content (java)
 Embeds Java code  In HTML tags  When used well  Simple way to generate dynamic web-pages  When misused (complex embedded Java)  Terribly messy.
Chapter 8 Script-free pages. Problem with scripting in JSP When you use scripting (declaration, scriplet, expressions) in your JSP, you actually put Java.
JSP Most of the web developers deploying web applications using servlets mixes the presentation logic and business logic. Separation of business logic.
® IBM Software Group © 2007 IBM Corporation JSP Expression Language
JAVA SERVER PAGES. 2 SERVLETS The purpose of a servlet is to create a Web page in response to a client request Servlets are written in Java, with a little.
Stanisław Osiński, 2002JSP – A technology for serving dynamic web content Java Server Pages™ A technology for serving dynamic web content Stanisław Osiński,
JAVA SERVER PAGES CREATING DYNAMIC WEB PAGES USING JAVA James Faeldon CS 119 Enterprise Systems Programming.
Chapter 3 Servlet Basics. 1.Recall the Servlet Role 2.Basic Servlet Structure 3.A simple servlet that generates plain text 4.A servlet that generates.
16-Oct-15 JSP Implicit Objects. 2 JSP Implicit Objects are the Java objects that the JSP Container makes available to developers in each page and developer.
1 JSP with Custom Tags Blake Adams Introduction Advanced Java Server Pages – Custom Tags Keyterms: - Tag Library Descriptor(TLD) - Tag Libraries.
JSTL Lec Umair©2006, All rights reserved JSTL (ni) Acronym of  JavaServer Pages Standard Tag Library JSTL (like JSP) is a specification, not an.
Fall 2007cs4201 Advanced Java Programming Umar Kalim Dept. of Communication Systems Engineering
CS320 Web and Internet Programming Java Beans and Expression Language (EL) Chengyu Sun California State University, Los Angeles.
COMP 321 Week 11. Overview Lab 8-1 Solution Tag Files Custom Tags Web Application Deployment.
1 (Server-Side Programming using Java Server Pages) cs
JSP Tag Libraries Lec Last Lecture Example We incorporated JavaBeans in “Course Outline” Example But still have to write java code inside java.jsp.
Java server pages. A JSP file basically contains HTML, but with embedded JSP tags with snippets of Java code inside them. A JSP file basically contains.
Copyright © 2002 ProsoftTraining. All rights reserved. JavaServer Pages.
Java Server Pages (JSP)
Topic 1 Object Oriented Programming. 1-2 Objectives To review the concepts and terminology of object-oriented programming To discuss some features of.
1 (Server-Side Programming using Java Server Pages) cs
JavaServer Page by Antonio Ko. Overview ► Introduction ► What is a servlet? ► What can servlets do? ► Servlets Vs JSP ► Syntax ► Samples ► JavaBean ►
JSP Custom Tags. Prerequisites Servlet API Mapping to JSP implicit objects JavaServer Pages Basic syntax Implementation via servlet API XML.
CSC 2720 Building Web Applications JavaServer Pages (JSP) JSP Directives and Action Elements.
JSP Pages. What and Why of JSP? JSP = Java code imbedded in HTML or XML –Static portion of the page is HTML –Dynamic portion is Java Easy way to develop.
JSP. Types of JSP Scripting Elements Expressions of the form, which are evaluated and inserted into the servlet's output. Scriptlets of the form, which.
JSP BASICS AND ARCHITECTURE. Goals of JSP Simplify Creation of dynamic pages. Separate Dynamic and Static content.
© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/3 JSP Application Models.
Basic JSP Celsina Bignoli Problems with Servlets Servlets contain –request processing, –business logic –response generation all lumped.
COMP9321 Web Application Engineering Semester 2, 2015 Dr. Amin Beheshti Service Oriented Computing Group, CSE, UNSW Australia Week 3 1COMP9321, 15s2, Week.
1 Java Server Pages A Java Server Page is a file consisting of HTML or XML markup into which special tags and code blocks are inserted When the page is.
Java Server Pages. 2 Servlets The purpose of a servlet is to create a Web page in response to a client request Servlets are written in Java, with a little.
Chapter 14 Using JavaBeans Components in JSP Documents.
Bayu Priyambadha, S.Kom. Static content  Web Server delivers contents of a file (html) 1. Browser sends request to Web Server 3. Web Server sends HTML.
J2EE JSP Custom Tag Libraries 1 3 JSP: Custom Tag Libraries.
Introduction to JSP Part 2
Scripted Page Web App Development (Java Server Pages)
Knowledge Byte In this section, you will learn about:
JSP – Java Server Pages: The Gory Details
Scripted Page Web Application Development (Java Server Pages)
Presentation transcript:

1 JSP – Java Server Pages: The Gory Details 10 fake-points (which aren’t worth anything) to whoever: 1)spots the quote in this slide and names its source 2)Figures out why the container we use is named Apache Tomcat

2 Using External Parameters

3 JSP Initial Parameters Like Servlets, initialization parameters can be passed to JSP files using the element of the application configuration file web.xml Use the sub-element instead of the sub- element Since a element is being used, a element is also needed -Use the real JSP URL as the -Remember that just like in servlets mapping, you have the flexibility of being able to map several URLs to the same jsp or servlet, each with different init parameters.

4 dbLogin snoopy dbPassword snoopass An Example web.xml Application scoped initialization parameters (we haven’t discussed these, but by now you can guess what they do and what they’re good for…)

5 ParamPage /paramPage.jsp tableName users ParamPage /paramPage.jsp web.xml JSP scoped initialization parameters In the case of JSP, the relative location of the JSP (relative to the application’s root directory) should be given instead of the Servlet classname since the Servlet is created from it by the container. You can also map a different URL to this JSP (highly useful if you need the URL to end with an extension other than.jsp)

6 JSP initial parameters Hello I should use the table To access the Database, I should use the login and the password. paramPage.jsp JSP scoped initialization parameters Application scoped initialization parameters You can omit the config and call getInitParameter() directly, since the generated servlet extends HttpJspBase which extends HttpServlet which implements the ServletConfig interface Reminder: within a JSP this is Equivalent to getServletContext().getInitParameter() within a Servlet

7 Interacting with other Resources

8 JSP Cooperation We will consider several ways in which JSP and other resources cooperate -Forwarding the request handling to other resources -Including the content of other sources -Including the code of other JSP files -Forwarding exception handling to other JSPs

9 Actions JSP actions use constructs in XML syntax to control the behavior of the Servlet engine Using actions, you can -forward the request to another resource in the application -dynamically include a resource content in the response A Quick Reference to JSP ElementsReference to JSP Elements

10 The forward Action jsp:forward - Forwards the requester to a new resource }"> <jsp:param name="parameterName" value="{parameterValue | }" /> * Can you write down the code this translates to? -Hint: Recall RequestDispatcher from last week You can use %=, % instead of so that the code would be a legal XML 0 or more parameters (not attributes!) added to the original request parameters The forward actionforward action

11 " /> " /> Forward Action Example forward.jsp

12 Print Request Params : Open /forward.jsp?year=2006/forward.jsp?year=2006 requestParams.jsp

13 The include Action jsp:include - Include a resource content at run time }"> <jsp:param name="parameterName" value="{parameterValue | }" /> * This action is also translated to an invocation of the RequestDispatcher The include actioninclude action 0 or more parameters added to the original request parameters

14 Include (action) Example Included part begins: " /> Included part ends Include Action Example include.jsp

15 : requestParams2.jsp Open /include.jsp?year=2006/include.jsp?year=2006 The html tags were removed. Otherwise the main JSP output HTML code would have 2 html elements for example…

16 The include Directive This directive lets you include files at the time the JSP page is translated into a Servlet The directive looks like this: Included JSP content can affect main JSP page -e.g. included page directive can affect the result ContentType As of Tomcat 5.x, generated Servlets are updated when included files change (unlike older versions...) The include directiveinclude directive

17 Include - Action File1.jsp Servlet1 File2.jsp Servlet2 HTML content HTML content HTML content Using RequestDispatcher Main JSP

18 Include Directive File1.jsp File2.jsp Servlet HTML content

19 include Action vs. Directive When a resource is included using the include action, the generated Servlet uses the dispatcher to include its content at runtime (so the resource needs not be a JSP or even a Servlet) When a file is included using the include directive, the file itself is included verbatim into the JSP code, prior to the Servlet generation (so the included resource must have JSP syntax) In which of the above cases can the included resouce change the HTTP headers or status? Compare the results of includeaction.jsp, includedirective.jspincludeaction.jspincludedirective.jsp

20 Including JSP Here is an interesting page. Bla, Bla, Bla, Bla. BlaBla.jsp Accesses to page since Servlet init: Page Created for Dbi Course at. us here. AccessCount.jsp dbimail.jsp

21 out.write(" \r\n"); out.write(" Including JSP \r\n"); out.write(" \r\n"); out.write(" Here is an interesting page. \r\n"); out.write(" Bla, Bla, Bla, Bla. \r\n"); out.write(" \r\n"); out.write(" Accesses to page since Servlet init: \r\n"); out.print( ++accessCount ); out.write(" \r\n"); org.apache.jasper.runtime.JspRuntimeLibrary. include(request, response, "/dbimail.jsp", out, false); out.write(" \r\n"); BlaBla_jsp.java Original JSP Included JSP Similar to RequestDispatcher().include() Original JSP

22 Directive Included Counter Suppose that the file BlaBla2.jsp is similar the BlaBla.jsp How will the counter of BlaBla2.jsp act? Why? -Will it be identical to the 1 st counter or What if we used a JSP action instead of a JSP directive for the counter? -Will it be to the 1 st counter or not? Why? not? identical

23 Error Pages We can set one JSP page to be the handler of uncaught exceptions of another JSP page, using JSP directives -The default behaviour is displaying a 500 Internal Server Error with a partial stack trace with other exception info to the client (ugly and a security risk). -You can log the entire stack trace along with other data for easier debugging -Defines a JSP page that handles uncaught exceptions -The page in url should have true in the page-directive: -The variable exception holds the exception thrown by the calling JSP Creating an error page without isErrorPage=true, is legal but the exception object is not created in the generated Servlet. If you refer to exception in such a JSP, you’ll have a compilation error… Runtime exceptions or other exceptions which are declared as thrown by methods your JSP code use. Other exceptions cannot be thrown or else your generated servlet code wouldn’t compile

24 Reading From Database <% Class.forName("org.postgresql.Driver"); Connection con = DriverManager.getConnection ("jdbc:postgresql://dbserver/public?user=" + "snoopy"); %> Can Connect!! connect.jsp Reminder: The driver is loaded dynamically Creates an instance of itself Register this instance with the DriverManager

25 Connection Error Oops. There was an error when you accessed the database. Here is the stack trace: errorPage.jsp A method of any exception object (and not a JSP special method) that prints the stack trace into a given PrintWriter. In our case, the PrintWriter is the out implicit object. If you want to sleep better at night, flush the PrintWriter before continuing (why, if we aren’t using out anymore?)

26 This is the result you’ll see if the server can find the driver package, and connect to the database using the driver created with user=snoopy

27 This is the result you’ll see if the server can find the driver package, but fails to connect to the database using the driver created with user=snoopy Check the result of calling connect2.jsp which raises an exception after trying to load a non-existing classconnect2.jsp This time the error page is errorPage2.jsp in which isErrorPage=true is missing…errorPage2.jsp

28 Custom JSP Tags

29 Custom JSP Tags JSP code may use custom tags – tags that are defined and implemented by the programmer The programmer defines how each of the custom tags is translated into Java code There are two methods to define custom tags: -Tag libraries - used in old versions of JSP -Tag files - much simpler, introduced in JSP 2.0

30 Tag Libraries A tag library consists of: -Tag handlers - Java classes that define how each of the new tags is translated into Java code -A TLD (Tag Library Descriptor) file, which is an XML file that defines the structure and the implementing class of each tag Tag Libraries tutorialtutorial The taglib directivetaglib directive

31 package dbi; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; import java.io.IOException; public class DateTag extends SimpleTagSupport { public void doTag() throws JspException, IOException { getJspContext().getOut().print(new java.util.Date()); } DateTag.java A Simple TagLib Example Using the JSP-context, You can also acquire other implicit objects by calling getSession(), getRequest() etc… The class file is placed in webapps/dbi/WEB-INF/classes/dbi/ The java file is placed in webapps/dbi/WEB-INF/src/dbi/ Base class of tags which don’t handle the body or the attributes Read more about SimpleTagSupport Class SimpleTagSupport Class We must use a package (not necessarily named like your application) since this is a helper class which is imported form the JSP’s generated Servlet that is placed within a named package Goal:

date dbi.DateTag empty dbi-taglib.tld Hello. The time is: taglibuse.jsp As you can see from the path, the taglib is specifically defined to the current application context. The prefix for this tag must appear before the tag itself (looks like a namespace). The Prefix can’t be empty The path could be a URL. If you choose to use a local path, it must begin with /WEB-INF/tags/ Set this value that indicates your tag library version Name of the tag Tag’s class file in /dbi/WEB-INF/classes/dbi/ This defined tag contains no body You can add here more tags…

33 Taglib with Attributes package dbi; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; import java.io.IOException; public class DateTag2 extends TagSupport { private boolean isLongFormat = false; public void setIsLongFormat(boolean b) { isLongFormat = b; } public boolean getIsLongFormat() { return isLongFormat; { DateTag2.java Base class of tags which do handle attributes In our example the attribute is defined as not required so it must have a default value Attribute’s setter method Attribute’s getter method This member’s name should be identical to the attribute’s. The setter/getter methods should be named after the attribute (i.e. “get” + capital ( ))

34 public int doStartTag() throws JspException { try { if (isLongFormat) { pageContext.getOut().print(new java.util.Date().getTime()); } else { pageContext.getOut().print(new java.util.Date()); } } catch (Exception e) { throw new JspException("DateTag: " + e.getMessage()); } return SKIP_BODY; } public int doEndTag() { return EVAL_PAGE; } Invoked when the generated Servlet starts processing the “start tag” Prints the date according to the isLongFormat attribute Signals the generated Servlet there’s no body within the tag to process Invoked when the generated Servlet starts processing the “end tag” Signals the generated Servlet to continue executing the generated Servlet code Read more about TagSupport Class TagSupport Class

35 date2 dbi.DateTag2 empty isLongFormat false dbi-taglib2.tld Hello. The time is: Milliseconds since the epoch : taglibuse2.jsp Same as before, only with different names for the tag,class You can put several blocks one after another The attribute is “not required” so you have to define a default value in DateTag2.java Uses default attribute value Uses a given attribute value

36 How does it work? taglibuse2.jsp taglibuse2_jsp.java JspContext DateTag2 setIsLongFormat() doStartTag() doEndTag() JSP to Java Servlet translation Create the JspContext When the translation engine first encounters it creates a new instance of DateTag2 (so we needn’t worry about concurrency issues) and passes it the JspContext reference The attribute value is set using the setter method. The translator actually translated the attribute string value as it appears in the JSP source, to a boolean value as the Java tag class expects it… “Start tag” is reached “End tag” is reached

37 Tag Files JSP 2.0 provides an extremely simplified way of defining tags The movitation: JSP programmers don’t like writing cumbersome code or class files. The idea: for each custom tag, write a tag file tagName.tag that implements the tag translation using JSP code This way, the programmer can avoid creating tag handlers and TLD files

38 The Simplified Example Hello. The time is: date.tag taguse.jsp In this new mechanism we use tagdir instead of uri we used in the old taglib implementation

39 <%!private String createDate(String isLong) { if ((isLong == null) || (isLong.equals("false"))) { return new java.util.Date().toString();} else { return new Long(new java.util.Date().getTime()).toString();} } %> The Attributes Example Hello. The time is: Milliseconds since the epoch : date3.tag taguse3.jsp Private method declaration Default and isLongFormat=“false” case Calls the private method isLongFormat=“true” case Default case isLongFormat=“true” A new directive The isLongFormat parameter is identified as the isLongFormat attribute because we used the attribute directive

40 Other Capabilities of Custom Tags Attributes -You can add validation mechanism for the attributes values Tag Body -Tag translation may choose to ignore, include or change the tag body

41 Java Beans in JSP Read more about JavaBeansJavaBeans The useBean actionuseBean action The setProperty actionsetProperty action The getProperty actiongetProperty action

42 Motivation Software components (e.g. objects, data structures, primitives) are extensively used in Web applications For example: -Service local variables -Attributes forwarded in requests -Session attributes, like users information -Application attributes, like access counters

43 Motivation Standard actions are used to manipulate components: declaration, reading from the suitable context, setting of new values (according to input parameters), storing inside the suitable context, etc. Java Beans provide a specification for automatic handling and manipulation of software components in JSP (and other technologies...)

44 Java Beans: The Idea Java Beans are simply objects of classes that follow some (natural) coding convention: -An empty constructor -A readable property has a matching getter -A writable property has a matching setter Use JSP actions to access and manipulate the bean, and special action attributes to specify the properties of the bean, like its scope JSP programmers don’t like writing cumbersome code or class files.

45 Example 1: Access Counter In the following example, we use a Bean to maintain an access counter for requests to the pages

46 package dbi; public class CounterBean { private int counter; public CounterBean() { counter = 0; } public int getCounter() { return counter; } public void setCounter(int i) { counter = i; } public void increment() { ++counter; } } Counter Bean CounterBean.java Bean must reside in a package A Bean is created by an empty constructor Counter setter and getter Other methods can be implemented as well A Bean is a concept and therefore there’s no need to extend any class or implement any interface! (though it would’ve been very Java-ish to create an empty interface “Bean”)

47 Bean Example <jsp:useBean id="accessCounter" class="dbi.CounterBean" scope="application"/> Welcome to Page A Accesses to this application: Page B pageA.jsp Invokes getCounter() An instance named according to the given id is either found in the right scope or created. Any tags inside will be executed on instantiation only (but not if the instance is already an attribute of the right scope) The default scope is page You could also use the type attribute in order to instantiate a data type which is either superclass of class or an interface that class implements

48 Bean Example <jsp:useBean id="accessCounter" class="dbi.CounterBean" scope="application"/> Welcome to Page B Accesses to this application: Page A pageB.jsp A very similar JSP Since an instance named according to the given id can be found in the application scope, no instantiation takes place

49 dbi.CounterBean accessCounter = null; synchronized (application) { accessCounter = (dbi.CounterBean) _jspx_page_context.getAttribute("accessCounter", PageContext.APPLICATION_SCOPE); if (accessCounter == null) { accessCounter = new dbi.CounterBean(); _jspx_page_context.setAttribute("accessCounter", accessCounter, PageContext.APPLICATION_SCOPE); } From the Generated Servlet Similar effect to getServletContext().setAttribute() Similar effect to getServletContext().getAttribute() The instance is created and kept in the application’s scope as required. Note however that accessing this instance is out of the synchronized scope

50 Example 2: Session Data In the following example, we use a Bean in order to keep a user's details throughout the session

51 package dbi; public class UserInfoBean { private String firstName; private String lastName; public UserInfoBean() { firstName = lastName = null;} public String getFirstName() {return firstName;} public String getLastName() {return lastName;} public void setFirstName(String string) {firstName = string;} public void setLastName(String string) {lastName = string;} } UserInfoBean.java

52 Information Form Fill in your details: Your First Name: Your Last Name: infoForm.html

53 Page A Hello, Have a nice session! User Info B infoA.jsp Match all the request parameters to corresponding properties. You could match parameters to properties explicitly using property=… param=… You can also set properties with explicit values using property=… value=… The String values are converted to the right bean’s property types..

54 Page B Hello, Have a nice session! User Info A infoB.jsp A very similar JSP This time the request has no parameters so no bean properties are set

55 Advantages of Java Beans Easy and standard management of data -Automatic management of bean sharing and lots more Good programming style -Allow standard but not direct access to members -You can add code to the setters and getters (e.g. constraint checks) without changing the client code -You can change the internal representation of the data without changing the client code Increase of separation between business logic (written by programmers) and HTML (written by GUI artists)

56 JSP Expression Language Read more about JSP ELJSP EL

57 JSP Expression Language JSP expression language is a comfortable tool to access useful objects in JSP This language provides shortcuts in a somewhat JavaScript-like syntax An expression in EL is written as ${expr} For example: Hi, ${user}. Welcome Note that the EL expression does not violate the XML syntax as opposed to

58 EL Variables JSP EL does not recognize JSP's implicit objects, but rather has its own set Each of these objects maps names to values param, paramValues, header,headerValues, cookie, initParam, pageScope, requestScope, sessionScope, applicationScope For example, use the param[“x”] or param.x to get the value of the parameter x Map a parameter name to a single value or to multiple values Map a header name to a single value or to multiple values Maps a cooki e name to a single value Maps a context initialization parameter name to a single value Variables belonging to the different scopes. Now is a good time to make sure you remember they exist and what they mean…

59 EL Variables (cont) A variable that is not an EL implicit object is looked up at the page, request, session (if valid) and application scopes That is, x is evaluated as the first non null element obtained by executing pageContext.getAttribute("x"), request.getAttribute("x"), etc. Might be confusing. Make sure you know what you’re accessing!

60 Object Properties In JSP EL, Property prop of Object o is referred to as o[prop] Property prop of Object o is evaluated as follows: -If o is a Map object, then o.get(prop) is returned -If o is a List or an array, then prop is converted into an integer and o.get(prop) or o[prop] is returned -Otherwise, treat o “as a bean”, that is: convert p to a string, and return the corresponding getter of o, that is o.getProp() The term o.p is equivalent to o["p"]

61 An Example <% response.addCookie(new Cookie("course","dbi")); session.setAttribute("dbiurl",new java.net.URL(" String[] strs = {"str1","str2"}; session.setAttribute("arr", strs); %> JSP Expressions Write the parameter x: elcall.jsp

62 EL Examples Expression-Language Examples Parameter x : ${param["x"]} Cookie course : ${cookie.course.value} Header Connection : ${header.Connection} Path of session attr. dbiurl : ${sessionScope.dbiurl.path} Element arr[${param.x}] : ${arr[param.x]} el.jsp The default value is TRUE cookie[“course”].getValue() header [“Connection”] sessionScope[“dbiurl”]. getPath(). You can omit the sessionScope ${…} means evaluate the expression inside the {} Only the ${param.x} is evaluated sessionScope[“arr”][param[“x”]

63 JSP and XML

64 Simple XML Production "> JSP directive which sets the MIME-type of the result… Ordinary XML declarations Link with XSL stylesheet Open colors.jspcolors.jsp Check the result of the same JSP without the page contentType directiveresult

65 Generated XML red blue green

66 JSPX files are JSP files that have the extension jspx and have XML syntax JSPX files are also referred to as JSP documents Special JSP tags are used to replace non-XML JSP symbols ( <%, etc.) (Tags and EL can help too!) The default content type of JSPX is text/xml (and not text/html ) You can also keep the.jsp suffix and tell the container that a JSP file acts as a JSPX file (and therefore its output is of XML type etc.) JSPX Files (JSP Documents) Sun JSP Documents TutorialJSP Documents Tutorial

67 Advantages/Disadvantages of JSPX Since JSPX documents conform to a legal XML structure you can: -Check if the document is well formed XML -Validate the document against a DTD -Nest and scope namespaces within the document -Use all kinds of XML tools (e.g. editors) The main disadvantage is JSPX documents they can grow very long and very (very) cumbersome (as will soon become apparent). Much ado about nothing? sometimes the above “advantages” simple aren’t needed or are of little help.

68 Expression Code Declaration <jsp:directive.type Attribute="value"/> An empty element

69 Problems on the way to a legal XML The XML declaration ( ) and the DOCTYPE definition are now those of the JSPX file. -How do we include the declaration+dtd of the original XML document in the result XML? -Solution: use the tag to explicitly require DOCTYPE and XML declarations (next slide…) How do we generate dynamic attribute values and still keep the document well formed? -Solution 1: use for explicit element construction -Solution 2: use an EL expression The following line is an illegal XML opening tag: i “>

70 <jsp:output doctype-root-element="colors" doctype-system="colors.dtd" /> static String[] colors = {"red","blue","green"}; i colors[i] } Namespace of basic JSP elements and Tag libraries.. Root element + DTD of the resulting XML Do not omit the XML declaration of the result The result is equivalent to the original line: "> CDATA is used because of <. Altenatively: use < Open colors.jspx, result of the same JSP with omit-xml-declaration=true (omittruecolors.jspx)colors.jspxomittruecolors.jspx

71 A few more problems on the way… Where can we add an XSL declaration? it should both be: -outside the root element (colors) -after jsp:output which must be defined after jsp namespace declaration within the colors element… When using the include directive, the JSP might become illegal XML with more than a single root. A solution: Use the element as the document root Does this solve all the problems which might arise when using the include directive?

72 ]]> static String[] colors = {"red","blue","green"}; i colors[i] } Open colors1.2.jspcolors1.2.jsp Now we can add the XSL We use CDATA because of the etc Still problematic: Which DTD should we use? the DTD should enable every JSP element within every other element…