JavaServer Pages (JSP) Introduction - Hans Bergsten

49
2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 1 JavaServer Pages (JSP) Introduction Georgia Web Developers Conference, July 25, 2001

Transcript of JavaServer Pages (JSP) Introduction - Hans Bergsten

Page 1: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 1

JavaServer Pages (JSP)Introduction

Georgia Web DevelopersConference, July 25, 2001

Page 2: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 2

Who I Am

• Hans Bergsten– [email protected]

– President of Gefion software

– Member of the JSP working group (JCP)

– Author of JavaServer Pages (O’Reilly)

Page 3: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 3

Overview

• JSP Background• Processing and Basic JSP 1.1 Elements• Extension Framework/Custom Tags• Flow Control and Scopes• Java 2 Enterprise Edition (J2EE)• Future Direction

Page 4: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 4

Background

• Servlets part of JavaWebServer, 1997• Formalized as Servlet 2.1, Nov. 1998

Page 5: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 5

Code and HTML Mixed

public void doGet(…) { ResultSet rs = getCustomers(“VIP”); out.println(“<ul>”); while (rs.next()) { out.println(“<li>” + rs.getString(“Name”); }

Page 6: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 6

Background

• Servlets part of JavaWebServer, 1997• Formalized as Servlet 2.1, Nov. 1998• JHTML, HTML with Java code snippets• JSP 1.0, June 1999• JSP 1.1, December 1999

Page 7: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 7

Code and HTML Separated

<foo:getVIPCust id=“vips” /><ul><foo:loop name=“vips” loopId=“cust” > <li> <jsp:getProperty name=“cust” property=“name” /></foo:loop>

Page 8: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 8

JSP Elements

• Directives: <%@ dirname attr=value %>• Actions: <pref:name attr=value … />• Scripting:

– Scriptlet: <% scripting code %>

– Expression: <%= expression %>

– Declaration: <%! declaration %>

Page 9: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 9

JSP Page Example

<%@ page contentType=“text/html” %><%@ include file=“header.jsp” %><h1>Hello World!</h1> <jsp:useBean id=“date” class=“java.util.Date” /> It’s <%= date %><%@ include file=“footer.jsp” %>

Page 10: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 10

JSP Processinghello.jsp

hello.java

hello.class

request

response

read

generate

execute compile

Web Server/Web Container

Page 11: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 11

JSP Elements Example

Page 12: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 12

Directive Elements

• page: Page-dependent attributes– contentType, errorPage, buffer

• include: Include another source file• taglib: Tag library declaration

Page 13: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 13

Directives Example

<%@ page contentType=“text/html” %><%@ include file=“header.jsp” %><h1>Hello World!</h1> <jsp:useBean id=“date” class=“java.util.Date()” /> It’s <%= date %><%@ include file=“footer.jsp” %>

Page 14: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 14

Action Elements

• useBean: Declare a bean• getProperty: Add property value to page• setProperty: Set property value• include: Include response from page• forward: Continue processing at page• plugin: Add HTML for Java Plugin

Page 15: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 15

JavaBeans Model

• A “thing” with public properties• A JavaBeans component is a regular

Java class• Naming conventions for property access

methods

Page 16: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 16

JavaBeans Class Example

public class UserInfoBean { private String firstName; public void setFirstName(String fName) { firstName = fName; } public String getFirstName() { return firstName; }}

Page 17: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 17

useBean Example

<jsp:useBean id=“user” class=“com.foo.UserInfoBean” />

Page 18: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 18

setProperty Example

<jsp:setProperty name=“user” property=“firstName” value=“Hans” /><jsp:setProperty name=“user” property=“*” /><jsp:setProperty name=“user” property=“firstName” param=“fName” />

Page 19: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 19

getProperty Example

<jsp:getProperty name=“user” property=“firstName” />

Page 20: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 20

Using Actions and a Bean forInput Validation

<jsp:useBean id=“user” class=“com.foo.UserInfoBean” /><jsp:setProperty name=“user” property=“*” />Valid input?<jsp:getProperty name=“user” property=“valid” />

Page 21: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 21

include Example

<jsp:include page=“foo.jsp” flush=“true”> <jsp:param name=“user” value=“Bob” /></jsp:include>

Page 22: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 22

Reusing Page Fragments

Page 23: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 23

Directive vs. Action

• Directive– In the translation phase

– File merged into including page

• Action– In the request phase

– Response added to including page’sresponse

Page 24: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 24

Using the Directive and theAction

<%@ include file=“header.jsp” %><jsp:useBean id=“user” class=“…” /><jsp:include page=“portfolio.jsp” flush=“true”> <jsp:param name=“user” value=“<%= user.getID() %>” /></jsp:include>

Page 25: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 25

Scripting Elements

• Scriptlet: <% scripting code %>• Expression: <%= expression %>• Declaration: <%! declaration %>

Page 26: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 26

Scriptlet Example

<% if (user.isValid()) { %> Do something<% } else { %> Do something else<% } %>

Page 27: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 27

Expression Example

First Name: <%= user.getFirstName() %>

1 + 1 = <%= 1 + 1 %>

Page 28: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 28

Declaration Example

<%! int pageCounter = 0; %><% int requestCounter = 0; %><h1>Counters</h1>Instance variable counter:<%= pageCounter++ %>Local variable counter:<%= requestCounter++ %>

Page 29: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 29

Implicit Scripting Variables

• request• response• session• application• pageContext• and more

Page 30: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 30

Accessing Request Data

Method: <%= request.getMethod() %>URI: <%= request.getRequestURI() %>Server:<%= request.getServerName() %>Client: <%= request.getRemoteHost() %>Browser:<%=request.getHeader(“User-Agent”)%>

Page 31: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 31

Accessing Request Data

Page 32: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 32

Setting Response Data

<% Cookie c = new Cookie(“foo”, “bar”); c.setMaxAge(2592000); // Seconds response.addCookie(c);%>

Page 33: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 33

Custom Actions

• Used the same as standard actions• Regular Java classes; JavaBeans with

a few extra methods• Invoked automatically by the container• Access to request and application data• Reduces the need for scripting code!

Page 34: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 34

Custom Actions Example

<%@ taglib uri=“/foolib” prefix=“foo” %>

<foo:ifEq name=“user” property=“valid” value=“true”> <foo:save name=“user” /></foo:ifEq>

Page 35: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 35

Custom Action Example

<%@ taglib uri=“/foolib” prefix=“foo” %>

<foo:setCookie name=“foo” value=“bar” maxAge=“2592000” />

Page 36: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 36

MVC Pattern

• Model: business data and logic• View: user’s view of business data• Controller: user interaction

Page 37: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 37

MVC Pattern for Web Apps

• Model: JavaBeans• View: JSP page• Controller: JSP page or servlet

Page 38: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 38

MVC for Web Apps

input.jsp process.jsp confirm.jsp

UserInfoBean

View Controller

Model

View

Page 39: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 39

Page Flow Control

input.jsp process.jsp confirm.jsp

UserInfoBean

forward forward

Page 40: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 40

forward Example

<%@ taglib uri=“/foolib” prefix=“foo” %>

<foo:ifEq name=“user” property=“valid” value=“true”> <foo:save name=“user” /> <jsp:forward page=“confirm.jsp” /></foo:ifEq>

Page 41: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 41

JSP Data Scopes

input.jsp process.jsp confirm.jsp

Page scope

Request scope

Session scope (one user)/Application scope (all users)

Page scope Page scope

Page 42: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 42

Saving Data in a Scope

<useBean id=“user” class=“...” scope=“request” />Or with a scriptlet:<% UserInfoBean u = new UserInfoBean(); request.setAttribute(“user”, u);%>

Page 43: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 43

Request Scope

input.jsp process.jsp confirm.jsp

JavaBeans

Request scope

Page 44: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 44

Session scope

prodlist.jsp addtocart.jsp cartcontents.jsp

CartBean

Session scope

Page 45: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 45

Application scope

prodlist.jsp addtocart.jsp cartcontents.jsp

CartBeanSession scope

ProdBeans

Application scope

Page 46: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 46

Web Container

Java 2 Enterprise Edition(J2EE)

Application

Browser

EJB Container

DatabaseServlet

JSP

EJB

JSP

EJB

JDBCJTA/JTS

JMSJNDIXML

Client Tier Middle Tier EIS Tier

Page 47: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 47

J2EE Application Example

htmlview.jspServlet

wmlview.jsp

EJB EJBIIOP/RMI

HTTP

WAP Database

Page 48: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 48

Future Direction

• JSP 1.2/Servlet 2.3– include without flush

– Listeners

– Filters

– Custom tag development enhancements

• JSP Standard Tag Library (JSPTL)– Conditionals, Iterators, XML/XSLT,

Database access, etc.

Page 49: JavaServer Pages (JSP) Introduction - Hans Bergsten

2001-07-25 GWDC: JavaServer Pages (JSP) Introduction 49

More Info

• JSP Specificationhttp://java.sun.com/products/jsp/

• JavaServer Pages bookhttp://TheJSPBook.com/

• Jakarta Tomcat, Taglibs & Strutshttp://jakarta.apache.org/

• InstantOnline Basichttp://www.gefionsoftware.com/InstantOnline/