€¦ · server side internet programming dynamic web content content generated from cgi or...

235
Server Side Internet Programming Server Side Internet Programming DD1335 (Lecture 6) Basic Internet Programming Spring 2010 1 / 53

Upload: others

Post on 14-Aug-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Server Side Internet Programming

Objectives

I The basics of servletsI mapping and configurationI compilation and execution

I Cookies and sessionsI Request and session attributesI JSP

I execution, examplesI JSP Expression Language (EL)I Databases:

I SQL (Structured Query Language)I JDBC (Java Data Base Connectivity)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 1 / 53

Page 2: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Server Side Internet ProgrammingObjectives

I The basics of servletsI mapping and configurationI compilation and execution

I Cookies and sessionsI Request and session attributesI JSP

I execution, examplesI JSP Expression Language (EL)I Databases:

I SQL (Structured Query Language)I JDBC (Java Data Base Connectivity)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 1 / 53

Page 3: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Server Side Internet ProgrammingObjectives

I The basics of servletsI mapping and configurationI compilation and execution

I Cookies and sessions

I Request and session attributesI JSP

I execution, examplesI JSP Expression Language (EL)I Databases:

I SQL (Structured Query Language)I JDBC (Java Data Base Connectivity)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 1 / 53

Page 4: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Server Side Internet ProgrammingObjectives

I The basics of servletsI mapping and configurationI compilation and execution

I Cookies and sessionsI Request and session attributes

I JSPI execution, examples

I JSP Expression Language (EL)I Databases:

I SQL (Structured Query Language)I JDBC (Java Data Base Connectivity)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 1 / 53

Page 5: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Server Side Internet ProgrammingObjectives

I The basics of servletsI mapping and configurationI compilation and execution

I Cookies and sessionsI Request and session attributesI JSP

I execution, examples

I JSP Expression Language (EL)I Databases:

I SQL (Structured Query Language)I JDBC (Java Data Base Connectivity)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 1 / 53

Page 6: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Server Side Internet ProgrammingObjectives

I The basics of servletsI mapping and configurationI compilation and execution

I Cookies and sessionsI Request and session attributesI JSP

I execution, examplesI JSP Expression Language (EL)

I Databases:I SQL (Structured Query Language)I JDBC (Java Data Base Connectivity)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 1 / 53

Page 7: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Server Side Internet ProgrammingObjectives

I The basics of servletsI mapping and configurationI compilation and execution

I Cookies and sessionsI Request and session attributesI JSP

I execution, examplesI JSP Expression Language (EL)I Databases:

I SQL (Structured Query Language)I JDBC (Java Data Base Connectivity)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 1 / 53

Page 8: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Dynamic web content

Content generated from CGI or application servers is different from HTTP

Instead of static content you may generate dynamic content

Even when you don’t respond to forms you can use CGI, servlets, JSP, PHPor any server script language to generate dynamic content

But what are servlets?

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 2 / 53

Page 9: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Dynamic web content

Content generated from CGI or application servers is different from HTTP

Instead of static content you may generate dynamic content

Even when you don’t respond to forms you can use CGI, servlets, JSP, PHPor any server script language to generate dynamic content

But what are servlets?

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 2 / 53

Page 10: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Dynamic web content

Content generated from CGI or application servers is different from HTTP

Instead of static content you may generate dynamic content

Even when you don’t respond to forms you can use CGI, servlets, JSP, PHPor any server script language to generate dynamic content

But what are servlets?

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 2 / 53

Page 11: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Dynamic web content

Content generated from CGI or application servers is different from HTTP

Instead of static content you may generate dynamic content

Even when you don’t respond to forms you can use CGI, servlets, JSP, PHPor any server script language to generate dynamic content

But what are servlets?

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 2 / 53

Page 12: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

What are servlets?

Servlets are programs that run on the server side. They work like CGIprograms but are partial Java programs following a special recipe and theyare run by a container application program

A servlet reads data from the client, generates an answer – by communicatingwith files, databases or other programs – and sends back the answer to theclient

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 3 / 53

Page 13: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

What are servlets?

Servlets are programs that run on the server side. They work like CGIprograms but are partial Java programs following a special recipe and theyare run by a container application program

A servlet reads data from the client, generates an answer – by communicatingwith files, databases or other programs – and sends back the answer to theclient

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 3 / 53

Page 14: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

How do servlets run?

I A servlet runs in a container according to a specific SUN standard.I This means that there is a basic servlet class to use as a template.I There is a reference implementation container called Tomcat defining

how a servlet is to be run.I There are many application servers that work as servlet containers.I Resin, Jetty (is a combined http, java servlet and application server),

JOnAS, BEA WebLogic, SIP Servlet Application Server, iPlanet, et.c.see: http://en.wikipedia.org/wiki/List_of_Servlet_containersfor a more actual (accurate) list

I If you run Tomcat you can test your servlets by submitting a form or bysimply starting it without any form parameters.

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 4 / 53

Page 15: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

How do servlets run?

I A servlet runs in a container according to a specific SUN standard.

I This means that there is a basic servlet class to use as a template.I There is a reference implementation container called Tomcat defining

how a servlet is to be run.I There are many application servers that work as servlet containers.I Resin, Jetty (is a combined http, java servlet and application server),

JOnAS, BEA WebLogic, SIP Servlet Application Server, iPlanet, et.c.see: http://en.wikipedia.org/wiki/List_of_Servlet_containersfor a more actual (accurate) list

I If you run Tomcat you can test your servlets by submitting a form or bysimply starting it without any form parameters.

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 4 / 53

Page 16: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

How do servlets run?

I A servlet runs in a container according to a specific SUN standard.I This means that there is a basic servlet class to use as a template.

I There is a reference implementation container called Tomcat defininghow a servlet is to be run.

I There are many application servers that work as servlet containers.I Resin, Jetty (is a combined http, java servlet and application server),

JOnAS, BEA WebLogic, SIP Servlet Application Server, iPlanet, et.c.see: http://en.wikipedia.org/wiki/List_of_Servlet_containersfor a more actual (accurate) list

I If you run Tomcat you can test your servlets by submitting a form or bysimply starting it without any form parameters.

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 4 / 53

Page 17: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

How do servlets run?

I A servlet runs in a container according to a specific SUN standard.I This means that there is a basic servlet class to use as a template.I There is a reference implementation container called Tomcat defining

how a servlet is to be run.

I There are many application servers that work as servlet containers.I Resin, Jetty (is a combined http, java servlet and application server),

JOnAS, BEA WebLogic, SIP Servlet Application Server, iPlanet, et.c.see: http://en.wikipedia.org/wiki/List_of_Servlet_containersfor a more actual (accurate) list

I If you run Tomcat you can test your servlets by submitting a form or bysimply starting it without any form parameters.

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 4 / 53

Page 18: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

How do servlets run?

I A servlet runs in a container according to a specific SUN standard.I This means that there is a basic servlet class to use as a template.I There is a reference implementation container called Tomcat defining

how a servlet is to be run.I There are many application servers that work as servlet containers.

I Resin, Jetty (is a combined http, java servlet and application server),JOnAS, BEA WebLogic, SIP Servlet Application Server, iPlanet, et.c.see: http://en.wikipedia.org/wiki/List_of_Servlet_containersfor a more actual (accurate) list

I If you run Tomcat you can test your servlets by submitting a form or bysimply starting it without any form parameters.

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 4 / 53

Page 19: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

How do servlets run?

I A servlet runs in a container according to a specific SUN standard.I This means that there is a basic servlet class to use as a template.I There is a reference implementation container called Tomcat defining

how a servlet is to be run.I There are many application servers that work as servlet containers.I Resin, Jetty (is a combined http, java servlet and application server),

JOnAS, BEA WebLogic, SIP Servlet Application Server, iPlanet, et.c.see: http://en.wikipedia.org/wiki/List_of_Servlet_containersfor a more actual (accurate) list

I If you run Tomcat you can test your servlets by submitting a form or bysimply starting it without any form parameters.

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 4 / 53

Page 20: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

How do servlets run?

I A servlet runs in a container according to a specific SUN standard.I This means that there is a basic servlet class to use as a template.I There is a reference implementation container called Tomcat defining

how a servlet is to be run.I There are many application servers that work as servlet containers.I Resin, Jetty (is a combined http, java servlet and application server),

JOnAS, BEA WebLogic, SIP Servlet Application Server, iPlanet, et.c.see: http://en.wikipedia.org/wiki/List_of_Servlet_containersfor a more actual (accurate) list

I If you run Tomcat you can test your servlets by submitting a form or bysimply starting it without any form parameters.

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 4 / 53

Page 21: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Servlet structure

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class ServletTemplate extends HttpServlet {

public void doGet(HttpServletRequest request,HttpServletResponse response)

throws ServletException, IOException {// Use "request" to read incoming HTTP headers// e.g. cookies and query data from HTML forms// Use "response" to specify HTTP response status// code and headers, e.g. content type and cookiesPrintWriter out = response.getWriter();// Use "out" to send the content to the browser

}}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 5 / 53

Page 22: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Servlet structure

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;

public class ServletTemplate extends HttpServlet {public void doGet(HttpServletRequest request,

HttpServletResponse response)throws ServletException, IOException {

// Use "request" to read incoming HTTP headers// e.g. cookies and query data from HTML forms// Use "response" to specify HTTP response status// code and headers, e.g. content type and cookiesPrintWriter out = response.getWriter();// Use "out" to send the content to the browser

}}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 5 / 53

Page 23: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Servlet structure

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class ServletTemplate extends HttpServlet {

public void doGet(HttpServletRequest request,HttpServletResponse response)

throws ServletException, IOException {// Use "request" to read incoming HTTP headers// e.g. cookies and query data from HTML forms// Use "response" to specify HTTP response status// code and headers, e.g. content type and cookiesPrintWriter out = response.getWriter();// Use "out" to send the content to the browser

}}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 5 / 53

Page 24: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Servlet structure

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class ServletTemplate extends HttpServlet {

public void doGet(HttpServletRequest request,HttpServletResponse response)

throws ServletException, IOException {

// Use "request" to read incoming HTTP headers// e.g. cookies and query data from HTML forms// Use "response" to specify HTTP response status// code and headers, e.g. content type and cookiesPrintWriter out = response.getWriter();// Use "out" to send the content to the browser

}}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 5 / 53

Page 25: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Servlet structure

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class ServletTemplate extends HttpServlet {

public void doGet(HttpServletRequest request,HttpServletResponse response)

throws ServletException, IOException {// Use "request" to read incoming HTTP headers// e.g. cookies and query data from HTML forms

// Use "response" to specify HTTP response status// code and headers, e.g. content type and cookiesPrintWriter out = response.getWriter();// Use "out" to send the content to the browser

}}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 5 / 53

Page 26: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Servlet structure

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class ServletTemplate extends HttpServlet {

public void doGet(HttpServletRequest request,HttpServletResponse response)

throws ServletException, IOException {// Use "request" to read incoming HTTP headers// e.g. cookies and query data from HTML forms// Use "response" to specify HTTP response status// code and headers, e.g. content type and cookiesPrintWriter out = response.getWriter();// Use "out" to send the content to the browser

}}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 5 / 53

Page 27: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Simple text generating servlet

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class HelloWorld extends HttpServlet {

public void doGet(HttpServletRequest request,HttpServletResponse response)

throws ServletException, IOException {// container takes care of headers but// we change headers:response.setContentType("text/plain");// and now the contentPrintWriter out = response.getWriter();out.println("Hello World");

}}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 6 / 53

Page 28: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Simple text generating servlet

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class HelloWorld extends HttpServlet {

public void doGet(HttpServletRequest request,HttpServletResponse response)

throws ServletException, IOException {

// container takes care of headers but// we change headers:response.setContentType("text/plain");// and now the contentPrintWriter out = response.getWriter();out.println("Hello World");

}}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 6 / 53

Page 29: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Simple text generating servlet

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class HelloWorld extends HttpServlet {

public void doGet(HttpServletRequest request,HttpServletResponse response)

throws ServletException, IOException {// container takes care of headers but// we change headers:response.setContentType("text/plain");

// and now the contentPrintWriter out = response.getWriter();out.println("Hello World");

}}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 6 / 53

Page 30: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Simple text generating servlet

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class HelloWorld extends HttpServlet {

public void doGet(HttpServletRequest request,HttpServletResponse response)

throws ServletException, IOException {// container takes care of headers but// we change headers:response.setContentType("text/plain");// and now the contentPrintWriter out = response.getWriter();out.println("Hello World");

}}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 6 / 53

Page 31: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Compiling a servlet

Assuming that you use Tomcat, be sure that the catalina jar path is inCLASSPATH

In Windows, add to CLASSPATH:%CATALINA_HOME%\common\lib\servlet.jar

and compile with javac. If CLASSPATH is not defined, it’s OK to add aclasspath value when calling javac:javac -classpath %CATALINA_HOME%\common\lib\servlet.jar myServlet.java

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 7 / 53

Page 32: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Compiling a servlet

Assuming that you use Tomcat, be sure that the catalina jar path is inCLASSPATH

In Windows, add to CLASSPATH:%CATALINA_HOME%\common\lib\servlet.jar

and compile with javac. If CLASSPATH is not defined, it’s OK to add aclasspath value when calling javac:javac -classpath %CATALINA_HOME%\common\lib\servlet.jar myServlet.java

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 7 / 53

Page 33: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Compiling a servlet

Assuming that you use Tomcat, be sure that the catalina jar path is inCLASSPATH

In Windows, add to CLASSPATH:%CATALINA_HOME%\common\lib\servlet.jar

and compile with javac. If CLASSPATH is not defined, it’s OK to add aclasspath value when calling javac:javac -classpath %CATALINA_HOME%\common\lib\servlet.jar myServlet.java

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 7 / 53

Page 34: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Manage Tomcat with ant

If you use ant to install Tomcat all environment variables are set and it works inSolaris, Linux, MacOSX and Windows (all variants, haven’t tested windows 7).

In Solaris you do as follows:

~> mkdir test~> cd test~/test> module add ant~/test> cp -r /info/DD1335/localTomcat .~/test> cd localTomcat

If the default port is occupied you need to choose another port. Make thechange in conf/server.xml

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 8 / 53

Page 35: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Manage Tomcat with ant

If you use ant to install Tomcat all environment variables are set and it works inSolaris, Linux, MacOSX and Windows (all variants, haven’t tested windows 7).

In Solaris you do as follows:

~> mkdir test~> cd test~/test> module add ant~/test> cp -r /info/DD1335/localTomcat .~/test> cd localTomcat

If the default port is occupied you need to choose another port. Make thechange in conf/server.xml

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 8 / 53

Page 36: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Manage Tomcat with ant . . .

localTomcat> ant installlocalTomcat> ant compilelocalTomcat> ant tomcatlocalTomcat> ant stopTomcat

When you have modified a servlet you need to restart tomcat. The fastest way is touse the manager web application.http://localhost:8080/manager/reload?path=/labbar

username: student, password: NADA

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 9 / 53

Page 37: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Manage Tomcat with ant . . .

localTomcat> ant installlocalTomcat> ant compilelocalTomcat> ant tomcatlocalTomcat> ant stopTomcat

When you have modified a servlet you need to restart tomcat. The fastest way is touse the manager web application.http://localhost:8080/manager/reload?path=/labbar

username: student, password: NADA

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 9 / 53

Page 38: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Standard Web Application (webapp) Directories

webapps/ (servlet contexts)ROOT/ http://host:port/

examples/ http://host:port/examplesWEB-INF/. . . (not visible by http)

labbar/ http://host:port/labbartest.html, test.jsp foo/bar.html http://host:port/labbar/test.htmlWEB-INF/. . . (not visible by http)

web.xml someJSPTagLibrary.tldclasses/

HelloWoldServlet.java HelloWorldServlet.classsomepackage/AClassInThePackage

lib/someLibrary.jar

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 10 / 53

Page 39: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

A servlet that generates HTML

import java.io.*;import javax.servlet.http.*;import javax.servlet.*;public class HelloWWW extends HttpServlet {public void doGet(HttpServletRequest request,

HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();String docType = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +

"Transitional//EN\">\n";out.println(docType + "<HTML>\n" +

"<HEAD><TITLE>Hello WWW</TITLE></HEAD>\n" +"<BODY>\n" + "<H1>Hello WWW</H1>\n" +"</BODY></HTML>");

}}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 11 / 53

Page 40: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

A utility class generating HTML header

public class ServletUtilities {public static final String DOCTYPE =

"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +"Transitional//EN\">";

public static String headWithTitle(String title) {return(DOCTYPE +

"\n" + "<HTML>\n" +"<HEAD><TITLE>" +title + "</TITLE>\n</HEAD>\n");

}}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 12 / 53

Page 41: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

A servlet using our utility class

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class SimplerHelloWWW extends HttpServlet {public void doGet(HttpServletRequest request,

HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();out.println(ServletUtilities.headWithTitle ("Hello WWW") +

"<BODY>\n" +"<H1>Hello WWW</H1>\n" +"</BODY></HTML>");

}}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 13 / 53

Page 42: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Mapping a servlet to a path in web.xml

Normally you can access a servlet like

http://server:port/webapp/servlet/servletName e.g.

http://localhost:8080/labbar/servlet/SimplerHelloWWW

We can configure further mappings in labbar/WEB-INF/web.xml

We can make the servlet accessible from

http://localhost:8080/labbar/bla.abc

or why not http://localhost:8080/labbar/<anything>.abc ?

(where <anything> may be substituted with just anything.

and http://localhost:8080/labbar/world/<anything>

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 14 / 53

Page 43: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Mapping a servlet to a path in web.xml

Normally you can access a servlet like

http://server:port/webapp/servlet/servletName e.g.

http://localhost:8080/labbar/servlet/SimplerHelloWWW

We can configure further mappings in labbar/WEB-INF/web.xml

We can make the servlet accessible from

http://localhost:8080/labbar/bla.abc

or why not http://localhost:8080/labbar/<anything>.abc ?

(where <anything> may be substituted with just anything.

and http://localhost:8080/labbar/world/<anything>

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 14 / 53

Page 44: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Mapping a servlet to a path in web.xml

Normally you can access a servlet like

http://server:port/webapp/servlet/servletName e.g.

http://localhost:8080/labbar/servlet/SimplerHelloWWW

We can configure further mappings in labbar/WEB-INF/web.xml

We can make the servlet accessible from

http://localhost:8080/labbar/bla.abc

or why not http://localhost:8080/labbar/<anything>.abc ?

(where <anything> may be substituted with just anything.

and http://localhost:8080/labbar/world/<anything>

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 14 / 53

Page 45: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Mapping a servlet to a path in web.xml . . .

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"version="2.4"><servlet>

<servlet-name>hello</servlet-name><servlet-class>SimplerHelloWWW</servlet-class>

</servlet><servlet-mapping>

<servlet-name>hello</servlet-name><url-pattern>*.abc</url-pattern>

</servlet-mapping><servlet-mapping>

<servlet-name>hello</servlet-name><url-pattern>/world</url-pattern>

</servlet-mapping></web-app>

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 15 / 53

Page 46: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Mapping a servlet to a path in web.xml . . .

<?xml version="1.0" encoding="ISO-8859-1"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"version="2.4">

<servlet><servlet-name>hello</servlet-name><servlet-class>SimplerHelloWWW</servlet-class>

</servlet><servlet-mapping>

<servlet-name>hello</servlet-name><url-pattern>*.abc</url-pattern>

</servlet-mapping><servlet-mapping>

<servlet-name>hello</servlet-name><url-pattern>/world</url-pattern>

</servlet-mapping></web-app>

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 15 / 53

Page 47: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Mapping a servlet to a path in web.xml . . .

<?xml version="1.0" encoding="ISO-8859-1"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"version="2.4"><servlet>

<servlet-name>hello</servlet-name><servlet-class>SimplerHelloWWW</servlet-class>

</servlet>

<servlet-mapping><servlet-name>hello</servlet-name><url-pattern>*.abc</url-pattern>

</servlet-mapping><servlet-mapping>

<servlet-name>hello</servlet-name><url-pattern>/world</url-pattern>

</servlet-mapping></web-app>

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 15 / 53

Page 48: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Mapping a servlet to a path in web.xml . . .

<?xml version="1.0" encoding="ISO-8859-1"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"version="2.4"><servlet>

<servlet-name>hello</servlet-name><servlet-class>SimplerHelloWWW</servlet-class>

</servlet><servlet-mapping>

<servlet-name>hello</servlet-name><url-pattern>*.abc</url-pattern>

</servlet-mapping><servlet-mapping>

<servlet-name>hello</servlet-name><url-pattern>/world</url-pattern>

</servlet-mapping></web-app>

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 15 / 53

Page 49: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Calling a servlet from a form

<html><body>

<form action="/servlet/ThreeParams">First Parameter: <input type="text" name="param1"><br />Second Parameter: <input type="text" name="param2"><br />Third Parameter: <input type="text" name="param3"><br /><center>

<input type="submit"></center>

</form>

</body></html>

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 16 / 53

Page 50: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Calling a servlet from a form

<html><body><form action="/servlet/ThreeParams">

First Parameter: <input type="text" name="param1"><br />Second Parameter: <input type="text" name="param2"><br />Third Parameter: <input type="text" name="param3"><br /><center>

<input type="submit"></center>

</form></body>

</html>

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 16 / 53

Page 51: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Calling a servlet from a form

<html><body><form action="/servlet/ThreeParams">

First Parameter: <input type="text" name="param1"><br />Second Parameter: <input type="text" name="param2"><br />Third Parameter: <input type="text" name="param3"><br />

<center><input type="submit">

</center>

</form></body>

</html>

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 16 / 53

Page 52: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Calling a servlet from a form

<html><body><form action="/servlet/ThreeParams">

First Parameter: <input type="text" name="param1"><br />Second Parameter: <input type="text" name="param2"><br />Third Parameter: <input type="text" name="param3"><br /><center>

<input type="submit"></center>

</form></body>

</html>

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 16 / 53

Page 53: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Responding to the form

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class ThreeParams extends HttpServlet {public void doGet(HttpServletRequest request,

HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();String title = "Reading Three Request Parameters";out.println(ServletUtilities.headWithTitle(title) +

"<body bgcolor=\"#fdf5e6\">\n" +"<h1 align=\"center\">" + title +"</h1>\n" + "<ul>\n" + " <li><b>param1</b>: " +request.getParameter("param1") + "\n" +" <li><b>param2</b>: " + request.getParameter("param2") +"\n" + " <li><b>param3</b>: " +request.getParameter("param3") + "\n" + "</ul>\n" +"</body>\n</html>");

}

}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 17 / 53

Page 54: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Request details:javax.servlet.http.HttpServletRequest

I Beware, some of the HttpServletRequest methods are declared in itssuperinterface javax.servlet.ServletRequest.

I Look there as well! There are no other subclasses ofjavax.servlet.ServletRequest but you might want to implement oneif you use another protocol than HTTP

I As in CGI, you have access to all the HTTP command elementsI getMethod()I getProtocol()I getQueryString()

irrespective of if you used GET or POST or combined!I The query string is already broken down into parameters

I String getParameter(String name) returns one parameterI String[] getParameterValues() returns all values of a parameterI Map getParameterMap() returns all parameters

I TCP information (like CGI)I Local: getServerPort(), getServerName()I Remote: getRemoteHost(), getRemoteAddr()

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 18 / 53

Page 55: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Request details:javax.servlet.http.HttpServletRequest

I Beware, some of the HttpServletRequest methods are declared in itssuperinterface javax.servlet.ServletRequest.

I Look there as well! There are no other subclasses ofjavax.servlet.ServletRequest but you might want to implement oneif you use another protocol than HTTP

I As in CGI, you have access to all the HTTP command elementsI getMethod()I getProtocol()I getQueryString()

irrespective of if you used GET or POST or combined!I The query string is already broken down into parameters

I String getParameter(String name) returns one parameterI String[] getParameterValues() returns all values of a parameterI Map getParameterMap() returns all parameters

I TCP information (like CGI)I Local: getServerPort(), getServerName()I Remote: getRemoteHost(), getRemoteAddr()

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 18 / 53

Page 56: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Request details:javax.servlet.http.HttpServletRequest

I Beware, some of the HttpServletRequest methods are declared in itssuperinterface javax.servlet.ServletRequest.

I Look there as well! There are no other subclasses ofjavax.servlet.ServletRequest but you might want to implement oneif you use another protocol than HTTP

I As in CGI, you have access to all the HTTP command elementsI getMethod()I getProtocol()I getQueryString()

irrespective of if you used GET or POST or combined!

I The query string is already broken down into parametersI String getParameter(String name) returns one parameterI String[] getParameterValues() returns all values of a parameterI Map getParameterMap() returns all parameters

I TCP information (like CGI)I Local: getServerPort(), getServerName()I Remote: getRemoteHost(), getRemoteAddr()

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 18 / 53

Page 57: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Request details:javax.servlet.http.HttpServletRequest

I Beware, some of the HttpServletRequest methods are declared in itssuperinterface javax.servlet.ServletRequest.

I Look there as well! There are no other subclasses ofjavax.servlet.ServletRequest but you might want to implement oneif you use another protocol than HTTP

I As in CGI, you have access to all the HTTP command elementsI getMethod()I getProtocol()I getQueryString()

irrespective of if you used GET or POST or combined!I The query string is already broken down into parameters

I String getParameter(String name) returns one parameterI String[] getParameterValues() returns all values of a parameterI Map getParameterMap() returns all parameters

I TCP information (like CGI)I Local: getServerPort(), getServerName()I Remote: getRemoteHost(), getRemoteAddr()

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 18 / 53

Page 58: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Request details:javax.servlet.http.HttpServletRequest

I Beware, some of the HttpServletRequest methods are declared in itssuperinterface javax.servlet.ServletRequest.

I Look there as well! There are no other subclasses ofjavax.servlet.ServletRequest but you might want to implement oneif you use another protocol than HTTP

I As in CGI, you have access to all the HTTP command elementsI getMethod()I getProtocol()I getQueryString()

irrespective of if you used GET or POST or combined!I The query string is already broken down into parameters

I String getParameter(String name) returns one parameterI String[] getParameterValues() returns all values of a parameterI Map getParameterMap() returns all parameters

I TCP information (like CGI)I Local: getServerPort(), getServerName()I Remote: getRemoteHost(), getRemoteAddr()

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 18 / 53

Page 59: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Request details . . .

I As in CGI there are special methods for HTTP headers that are often usedI getContentType()I getContentLength()

I Unlike CGI, you can read any HTTP headerI getHeader(String name)I Enumeration getHeaderNames()I getIntHeader(String name)

I You can get the POST content by invokingI getInputStream()I getReader()

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 19 / 53

Page 60: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Request details . . .

I As in CGI there are special methods for HTTP headers that are often usedI getContentType()I getContentLength()

I Unlike CGI, you can read any HTTP headerI getHeader(String name)I Enumeration getHeaderNames()I getIntHeader(String name)

I You can get the POST content by invokingI getInputStream()I getReader()

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 19 / 53

Page 61: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Request details . . .

I As in CGI there are special methods for HTTP headers that are often usedI getContentType()I getContentLength()

I Unlike CGI, you can read any HTTP headerI getHeader(String name)I Enumeration getHeaderNames()I getIntHeader(String name)

I You can get the POST content by invokingI getInputStream()I getReader()

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 19 / 53

Page 62: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Request details . . .

I As in CGI there are special methods for HTTP headers that are often usedI getContentType()I getContentLength()

I Unlike CGI, you can read any HTTP headerI getHeader(String name)I Enumeration getHeaderNames()I getIntHeader(String name)

I You can get the POST content by invokingI getInputStream()I getReader()

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 19 / 53

Page 63: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Request printing example

public class ShowRequestHeaders extends HttpServlet {public void doGet(HttpServletRequest request,

HttpServletResponse response)throws ServletException, IOException {

response.setContentType("text/html");PrintWriter out = response.getWriter();String title = "Servlet Example: Showing Request Headers";out.println(ServletUtilities.headWithTitle(title) +

"<body bgcolor=\"#fdf5e6\">\n" + "<h1 align=\"center\">" +title + "</h1>\n" +"<b>Request Method: </b>" +request.getMethod() + "<br />\n" +"<b>Request URI: </b>" +request.getRequestURI() + "<br />\n" +"<b>Request Protocol: </b>" +request.getProtocol() + "<br /><br />\n");

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 20 / 53

Page 64: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Request printing example . . .

out.println("<table border=\"1\" align=\"center\">\n" +"<tr bgcolor=\"#ffad00\">\n" +"<th>Header Name<th>Header Value");

Enumeration headerNames = request.getHeaderNames();while(headerNames.hasMoreElements()) {

String headerName = (String)headerNames.nextElement();out.println("<tr><td>" + headerName);out.println(" <td>" + request.getHeader(headerName));

}out.println("</table>\n</body></html>");

}public void doPost(HttpServletRequest request,

HttpServletResponse response)throws ServletException, IOException {

doGet(request, response); /* doPost() do as doGet(). */}

}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 21 / 53

Page 65: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Servlet lifecycle

I init(ServletConfig) is called when the servlet is created. Called once!

public void init(ServletConfig conf) throws ServletException {// initialize the servlet

}

I init(ServletConfig) calls init() with no parametersI destroy() is called just before the server goes down, or when the web

application is reloadedI destroyservice(ServletRequest, ServletResponse) is called for each

accessI doGet(), doPost() and doXxx

service() will call one of these, depending on the HTTP method

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 22 / 53

Page 66: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Servlet lifecycle

I init(ServletConfig) is called when the servlet is created. Called once!

public void init(ServletConfig conf) throws ServletException {// initialize the servlet

}

I init(ServletConfig) calls init() with no parameters

I destroy() is called just before the server goes down, or when the webapplication is reloaded

I destroyservice(ServletRequest, ServletResponse) is called for eachaccess

I doGet(), doPost() and doXxxservice() will call one of these, depending on the HTTP method

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 22 / 53

Page 67: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Servlet lifecycle

I init(ServletConfig) is called when the servlet is created. Called once!

public void init(ServletConfig conf) throws ServletException {// initialize the servlet

}

I init(ServletConfig) calls init() with no parametersI destroy() is called just before the server goes down, or when the web

application is reloaded

I destroyservice(ServletRequest, ServletResponse) is called for eachaccess

I doGet(), doPost() and doXxxservice() will call one of these, depending on the HTTP method

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 22 / 53

Page 68: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Servlet lifecycle

I init(ServletConfig) is called when the servlet is created. Called once!

public void init(ServletConfig conf) throws ServletException {// initialize the servlet

}

I init(ServletConfig) calls init() with no parametersI destroy() is called just before the server goes down, or when the web

application is reloadedI destroyservice(ServletRequest, ServletResponse) is called for each

access

I doGet(), doPost() and doXxxservice() will call one of these, depending on the HTTP method

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 22 / 53

Page 69: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Servlet lifecycle

I init(ServletConfig) is called when the servlet is created. Called once!

public void init(ServletConfig conf) throws ServletException {// initialize the servlet

}

I init(ServletConfig) calls init() with no parametersI destroy() is called just before the server goes down, or when the web

application is reloadedI destroyservice(ServletRequest, ServletResponse) is called for each

accessI doGet(), doPost() and doXxx

service() will call one of these, depending on the HTTP method

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 22 / 53

Page 70: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Servlet configuration parameters

public class ShowMessage extends HttpServlet {private String message;private String defaultMessage = "No message.";private int repeats = 1;public void init() throws ServletException {

ServletConfig config = getServletConfig();message = config.getInitParameter("message");if (message == null) { message = defaultMessage; }try {

String repeatString = config.getInitParameter("repeats");repeats = Integer.parseInt(repeatString);

}catch(NumberFormatException nfe) {/* NumberFormatException handles case where repeatString is null

*and* case where it is in an illegal format. */}

}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 23 / 53

Page 71: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Servlet configuration parameters . . .

public void doGet(HttpServletRequest request,HttpServletResponse response)

throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();String title = "The ShowMessage Servlet";out.println(ServletUtilities.headWithTitle(title) +

"<body bgcolor=\"#fdf5e6\">\n" +"<h1 align=\"center\">" +title + "</h1>");

for(int i = 0; i < repeats; i++) {out.println("<b>" + message + "</b><br />");

}out.println("</body></html>");

}}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 24 / 53

Page 72: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Setting configuration parameters in web.xml

<?xml version="1.0" encoding="ISO-8859-1"?><web-app

xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.or g/2001/XMLSchema-instance"xsi:schemaLocation=

"http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"version="2.4"><servlet>

<servlet-name>Show Msg</servlet-name><servlet-class>ShowMess age</servlet-class><init-param>

<param-name>message</param-name><param-value>Shibboleth</param-value>

</init-param><init-param>

<param-name>repeats</param-name><param-value>5</param-value>

</init-param></servlet>

</web-app>

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 25 / 53

Page 73: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Cookies

I HTTP is a stateless protocol

I Even if two HTTP accesses are made by the same user from the samebrowser, there is nothing in the HTTP accesses to indicate this.

I Cookies can be used to link data to a certain browser that has accessed the sitebefore

I Name/password (careful! Better to just keep info that the user is alreadyauthenticated),

I the browser has connected to the site before the actual occasionI shopping basket, etc

I The cookie is created by the server and sent to the browser with the response

I Besides application-specific data, each cookie has an expiration date

I The cookie is then kept on the client machineI It is sent to the server at each subsequent access until it expiresI Cookies have an important application called session trackingI The rest is not important for the course seehttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/Cookie.htmlhttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/←↩

HttpServletResponse.html#addCookie(javax.servlet.http.Cookie)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 26 / 53

Page 74: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Cookies

I HTTP is a stateless protocolI Even if two HTTP accesses are made by the same user from the same

browser, there is nothing in the HTTP accesses to indicate this.

I Cookies can be used to link data to a certain browser that has accessed the sitebefore

I Name/password (careful! Better to just keep info that the user is alreadyauthenticated),

I the browser has connected to the site before the actual occasionI shopping basket, etc

I The cookie is created by the server and sent to the browser with the response

I Besides application-specific data, each cookie has an expiration date

I The cookie is then kept on the client machineI It is sent to the server at each subsequent access until it expiresI Cookies have an important application called session trackingI The rest is not important for the course seehttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/Cookie.htmlhttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/←↩

HttpServletResponse.html#addCookie(javax.servlet.http.Cookie)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 26 / 53

Page 75: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Cookies

I HTTP is a stateless protocolI Even if two HTTP accesses are made by the same user from the same

browser, there is nothing in the HTTP accesses to indicate this.I Cookies can be used to link data to a certain browser that has accessed the site

before

I Name/password (careful! Better to just keep info that the user is alreadyauthenticated),

I the browser has connected to the site before the actual occasionI shopping basket, etc

I The cookie is created by the server and sent to the browser with the response

I Besides application-specific data, each cookie has an expiration date

I The cookie is then kept on the client machineI It is sent to the server at each subsequent access until it expiresI Cookies have an important application called session trackingI The rest is not important for the course seehttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/Cookie.htmlhttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/←↩

HttpServletResponse.html#addCookie(javax.servlet.http.Cookie)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 26 / 53

Page 76: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Cookies

I HTTP is a stateless protocolI Even if two HTTP accesses are made by the same user from the same

browser, there is nothing in the HTTP accesses to indicate this.I Cookies can be used to link data to a certain browser that has accessed the site

beforeI Name/password (careful! Better to just keep info that the user is already

authenticated),

I the browser has connected to the site before the actual occasionI shopping basket, etc

I The cookie is created by the server and sent to the browser with the response

I Besides application-specific data, each cookie has an expiration date

I The cookie is then kept on the client machineI It is sent to the server at each subsequent access until it expiresI Cookies have an important application called session trackingI The rest is not important for the course seehttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/Cookie.htmlhttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/←↩

HttpServletResponse.html#addCookie(javax.servlet.http.Cookie)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 26 / 53

Page 77: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Cookies

I HTTP is a stateless protocolI Even if two HTTP accesses are made by the same user from the same

browser, there is nothing in the HTTP accesses to indicate this.I Cookies can be used to link data to a certain browser that has accessed the site

beforeI Name/password (careful! Better to just keep info that the user is already

authenticated),I the browser has connected to the site before the actual occasion

I shopping basket, etcI The cookie is created by the server and sent to the browser with the response

I Besides application-specific data, each cookie has an expiration date

I The cookie is then kept on the client machineI It is sent to the server at each subsequent access until it expiresI Cookies have an important application called session trackingI The rest is not important for the course seehttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/Cookie.htmlhttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/←↩

HttpServletResponse.html#addCookie(javax.servlet.http.Cookie)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 26 / 53

Page 78: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Cookies

I HTTP is a stateless protocolI Even if two HTTP accesses are made by the same user from the same

browser, there is nothing in the HTTP accesses to indicate this.I Cookies can be used to link data to a certain browser that has accessed the site

beforeI Name/password (careful! Better to just keep info that the user is already

authenticated),I the browser has connected to the site before the actual occasionI shopping basket, etc

I The cookie is created by the server and sent to the browser with the response

I Besides application-specific data, each cookie has an expiration date

I The cookie is then kept on the client machineI It is sent to the server at each subsequent access until it expiresI Cookies have an important application called session trackingI The rest is not important for the course seehttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/Cookie.htmlhttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/←↩

HttpServletResponse.html#addCookie(javax.servlet.http.Cookie)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 26 / 53

Page 79: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Cookies

I HTTP is a stateless protocolI Even if two HTTP accesses are made by the same user from the same

browser, there is nothing in the HTTP accesses to indicate this.I Cookies can be used to link data to a certain browser that has accessed the site

beforeI Name/password (careful! Better to just keep info that the user is already

authenticated),I the browser has connected to the site before the actual occasionI shopping basket, etc

I The cookie is created by the server and sent to the browser with the response

I Besides application-specific data, each cookie has an expiration dateI The cookie is then kept on the client machineI It is sent to the server at each subsequent access until it expiresI Cookies have an important application called session trackingI The rest is not important for the course seehttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/Cookie.htmlhttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/←↩

HttpServletResponse.html#addCookie(javax.servlet.http.Cookie)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 26 / 53

Page 80: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Cookies

I HTTP is a stateless protocolI Even if two HTTP accesses are made by the same user from the same

browser, there is nothing in the HTTP accesses to indicate this.I Cookies can be used to link data to a certain browser that has accessed the site

beforeI Name/password (careful! Better to just keep info that the user is already

authenticated),I the browser has connected to the site before the actual occasionI shopping basket, etc

I The cookie is created by the server and sent to the browser with the responseI Besides application-specific data, each cookie has an expiration date

I The cookie is then kept on the client machineI It is sent to the server at each subsequent access until it expiresI Cookies have an important application called session trackingI The rest is not important for the course seehttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/Cookie.htmlhttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/←↩

HttpServletResponse.html#addCookie(javax.servlet.http.Cookie)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 26 / 53

Page 81: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Cookies

I HTTP is a stateless protocolI Even if two HTTP accesses are made by the same user from the same

browser, there is nothing in the HTTP accesses to indicate this.I Cookies can be used to link data to a certain browser that has accessed the site

beforeI Name/password (careful! Better to just keep info that the user is already

authenticated),I the browser has connected to the site before the actual occasionI shopping basket, etc

I The cookie is created by the server and sent to the browser with the responseI Besides application-specific data, each cookie has an expiration date

I The cookie is then kept on the client machine

I It is sent to the server at each subsequent access until it expiresI Cookies have an important application called session trackingI The rest is not important for the course seehttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/Cookie.htmlhttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/←↩

HttpServletResponse.html#addCookie(javax.servlet.http.Cookie)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 26 / 53

Page 82: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Cookies

I HTTP is a stateless protocolI Even if two HTTP accesses are made by the same user from the same

browser, there is nothing in the HTTP accesses to indicate this.I Cookies can be used to link data to a certain browser that has accessed the site

beforeI Name/password (careful! Better to just keep info that the user is already

authenticated),I the browser has connected to the site before the actual occasionI shopping basket, etc

I The cookie is created by the server and sent to the browser with the responseI Besides application-specific data, each cookie has an expiration date

I The cookie is then kept on the client machineI It is sent to the server at each subsequent access until it expires

I Cookies have an important application called session trackingI The rest is not important for the course seehttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/Cookie.htmlhttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/←↩

HttpServletResponse.html#addCookie(javax.servlet.http.Cookie)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 26 / 53

Page 83: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Cookies

I HTTP is a stateless protocolI Even if two HTTP accesses are made by the same user from the same

browser, there is nothing in the HTTP accesses to indicate this.I Cookies can be used to link data to a certain browser that has accessed the site

beforeI Name/password (careful! Better to just keep info that the user is already

authenticated),I the browser has connected to the site before the actual occasionI shopping basket, etc

I The cookie is created by the server and sent to the browser with the responseI Besides application-specific data, each cookie has an expiration date

I The cookie is then kept on the client machineI It is sent to the server at each subsequent access until it expiresI Cookies have an important application called session tracking

I The rest is not important for the course seehttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/Cookie.htmlhttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/←↩

HttpServletResponse.html#addCookie(javax.servlet.http.Cookie)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 26 / 53

Page 84: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Cookies

I HTTP is a stateless protocolI Even if two HTTP accesses are made by the same user from the same

browser, there is nothing in the HTTP accesses to indicate this.I Cookies can be used to link data to a certain browser that has accessed the site

beforeI Name/password (careful! Better to just keep info that the user is already

authenticated),I the browser has connected to the site before the actual occasionI shopping basket, etc

I The cookie is created by the server and sent to the browser with the responseI Besides application-specific data, each cookie has an expiration date

I The cookie is then kept on the client machineI It is sent to the server at each subsequent access until it expiresI Cookies have an important application called session trackingI The rest is not important for the course seehttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/Cookie.htmlhttp://java.sun.com/javaee/5/docs/api/javax/servlet/http/←↩

HttpServletResponse.html#addCookie(javax.servlet.http.Cookie)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 26 / 53

Page 85: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Session tracking

I You often need to keep data about a certain user that’s currently accessing thesite (the user has a ”session”)

I There are a number of techniques used for session tracking

I Cookies: may be blocked by the clientI URL-rewriting: adds a text to the end of every linkI Hidden forms

I Servlets offer a special mechanism to do session tracking without any worries forthe programmer whether they are implemented with cookies or with URL-rewritingjavax.servlet.http.Sessionrequest.getSession (boolean create)

I A session expires if there is no access from the browser for a certain period(typically 15 minutes)

I You may associate attributes with the session.The attributes, like the session, will be accessible when responding to all HTTPrequests made from the same browser, until the session expires

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 27 / 53

Page 86: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Session tracking

I You often need to keep data about a certain user that’s currently accessing thesite (the user has a ”session”)

I There are a number of techniques used for session tracking

I Cookies: may be blocked by the clientI URL-rewriting: adds a text to the end of every linkI Hidden forms

I Servlets offer a special mechanism to do session tracking without any worries forthe programmer whether they are implemented with cookies or with URL-rewritingjavax.servlet.http.Sessionrequest.getSession (boolean create)

I A session expires if there is no access from the browser for a certain period(typically 15 minutes)

I You may associate attributes with the session.The attributes, like the session, will be accessible when responding to all HTTPrequests made from the same browser, until the session expires

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 27 / 53

Page 87: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Session tracking

I You often need to keep data about a certain user that’s currently accessing thesite (the user has a ”session”)

I There are a number of techniques used for session trackingI Cookies: may be blocked by the client

I URL-rewriting: adds a text to the end of every linkI Hidden forms

I Servlets offer a special mechanism to do session tracking without any worries forthe programmer whether they are implemented with cookies or with URL-rewritingjavax.servlet.http.Sessionrequest.getSession (boolean create)

I A session expires if there is no access from the browser for a certain period(typically 15 minutes)

I You may associate attributes with the session.The attributes, like the session, will be accessible when responding to all HTTPrequests made from the same browser, until the session expires

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 27 / 53

Page 88: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Session tracking

I You often need to keep data about a certain user that’s currently accessing thesite (the user has a ”session”)

I There are a number of techniques used for session trackingI Cookies: may be blocked by the clientI URL-rewriting: adds a text to the end of every link

I Hidden formsI Servlets offer a special mechanism to do session tracking without any worries for

the programmer whether they are implemented with cookies or with URL-rewritingjavax.servlet.http.Sessionrequest.getSession (boolean create)

I A session expires if there is no access from the browser for a certain period(typically 15 minutes)

I You may associate attributes with the session.The attributes, like the session, will be accessible when responding to all HTTPrequests made from the same browser, until the session expires

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 27 / 53

Page 89: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Session tracking

I You often need to keep data about a certain user that’s currently accessing thesite (the user has a ”session”)

I There are a number of techniques used for session trackingI Cookies: may be blocked by the clientI URL-rewriting: adds a text to the end of every linkI Hidden forms

I Servlets offer a special mechanism to do session tracking without any worries forthe programmer whether they are implemented with cookies or with URL-rewritingjavax.servlet.http.Sessionrequest.getSession (boolean create)

I A session expires if there is no access from the browser for a certain period(typically 15 minutes)

I You may associate attributes with the session.The attributes, like the session, will be accessible when responding to all HTTPrequests made from the same browser, until the session expires

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 27 / 53

Page 90: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Session tracking

I You often need to keep data about a certain user that’s currently accessing thesite (the user has a ”session”)

I There are a number of techniques used for session trackingI Cookies: may be blocked by the clientI URL-rewriting: adds a text to the end of every linkI Hidden forms

I Servlets offer a special mechanism to do session tracking without any worries forthe programmer whether they are implemented with cookies or with URL-rewritingjavax.servlet.http.Sessionrequest.getSession (boolean create)

I A session expires if there is no access from the browser for a certain period(typically 15 minutes)

I You may associate attributes with the session.The attributes, like the session, will be accessible when responding to all HTTPrequests made from the same browser, until the session expires

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 27 / 53

Page 91: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Session tracking

I You often need to keep data about a certain user that’s currently accessing thesite (the user has a ”session”)

I There are a number of techniques used for session trackingI Cookies: may be blocked by the clientI URL-rewriting: adds a text to the end of every linkI Hidden forms

I Servlets offer a special mechanism to do session tracking without any worries forthe programmer whether they are implemented with cookies or with URL-rewritingjavax.servlet.http.Sessionrequest.getSession (boolean create)

I A session expires if there is no access from the browser for a certain period(typically 15 minutes)

I You may associate attributes with the session.The attributes, like the session, will be accessible when responding to all HTTPrequests made from the same browser, until the session expires

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 27 / 53

Page 92: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Session tracking

I You often need to keep data about a certain user that’s currently accessing thesite (the user has a ”session”)

I There are a number of techniques used for session trackingI Cookies: may be blocked by the clientI URL-rewriting: adds a text to the end of every linkI Hidden forms

I Servlets offer a special mechanism to do session tracking without any worries forthe programmer whether they are implemented with cookies or with URL-rewritingjavax.servlet.http.Sessionrequest.getSession (boolean create)

I A session expires if there is no access from the browser for a certain period(typically 15 minutes)

I You may associate attributes with the session.The attributes, like the session, will be accessible when responding to all HTTPrequests made from the same browser, until the session expires

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 27 / 53

Page 93: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Session example

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.Date;public class ShowSession extends HttpServlet {public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {

response.setContentType("text/html");PrintWriter out = response.getWriter();String title = "Session Tracking Example";HttpSession session = request.getSession(true);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);

}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 28 / 53

Page 94: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Session example . . .

session.setAttribute("accessCount", accessCount);out.println(ServletUtilities.headWithTitle(title));out.println("<body bgcolor=\"#fdf5e6\">");out.println("<h1 align=\"center\">" + heading + "</h1>");out.println("<h2>Information on Your Session:</h2>");out.println("<table border=\"1\" align=\"center\">");out.println("<tr bgcolor=\"#ffad00\">");out.println("<th>Info Type</th><th>Value</th></tr>\n");out.println("<tr>\n<td>ID</td>");out.println("<td>" + session.getId() + "</td>\n</tr>");out.println("<tr>\n<td>Creation Time</td>\n<td>");out.println(new Date(session.getCreationTime()) + "</td>\n</tr>");out.println("<tr>\n<td>Time of Last Access</td>\n<td>");out.println(new Date(session.getLastAccessedTime())");out.println("</td>\n</tr>");out.println("<tr><td>Number of Previous Accesses</td>\n<td>");out.println(accessCount + "</td>\n</tr>\n</table>");out.println("</body></html>");

}}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 29 / 53

Page 95: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Request and Session Attributes

I A servlet can access attributes stored within the session or within the request.I Request attributes are accessible as long as the request exists

I Attributes are like variables:I One servlet can set an attribute in the request or sessionI Another servlet (included or forwarded to) can retrieve the attribute value,

change it, et.c.I If the attribute is in the session, future accesses from the same browser can read

its value (this is how form login is implemented)

I javax.servlet.ServletRequest:I setAttribute(String name, Object value)I getAttribute(String name)

I javax.servlet.HttpSessionI setAttribute(String name, Object value)I getAttribute(String name)

I Most of these methods use an internal map (associating objects with String keys)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 30 / 53

Page 96: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Request and Session Attributes

I A servlet can access attributes stored within the session or within the request.I Request attributes are accessible as long as the request exists

I Attributes are like variables:I One servlet can set an attribute in the request or sessionI Another servlet (included or forwarded to) can retrieve the attribute value,

change it, et.c.I If the attribute is in the session, future accesses from the same browser can read

its value (this is how form login is implemented)

I javax.servlet.ServletRequest:I setAttribute(String name, Object value)I getAttribute(String name)

I javax.servlet.HttpSessionI setAttribute(String name, Object value)I getAttribute(String name)

I Most of these methods use an internal map (associating objects with String keys)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 30 / 53

Page 97: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Request and Session Attributes

I A servlet can access attributes stored within the session or within the request.I Request attributes are accessible as long as the request exists

I Attributes are like variables:I One servlet can set an attribute in the request or sessionI Another servlet (included or forwarded to) can retrieve the attribute value,

change it, et.c.

I If the attribute is in the session, future accesses from the same browser can readits value (this is how form login is implemented)

I javax.servlet.ServletRequest:I setAttribute(String name, Object value)I getAttribute(String name)

I javax.servlet.HttpSessionI setAttribute(String name, Object value)I getAttribute(String name)

I Most of these methods use an internal map (associating objects with String keys)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 30 / 53

Page 98: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Request and Session Attributes

I A servlet can access attributes stored within the session or within the request.I Request attributes are accessible as long as the request exists

I Attributes are like variables:I One servlet can set an attribute in the request or sessionI Another servlet (included or forwarded to) can retrieve the attribute value,

change it, et.c.I If the attribute is in the session, future accesses from the same browser can read

its value (this is how form login is implemented)

I javax.servlet.ServletRequest:I setAttribute(String name, Object value)I getAttribute(String name)

I javax.servlet.HttpSessionI setAttribute(String name, Object value)I getAttribute(String name)

I Most of these methods use an internal map (associating objects with String keys)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 30 / 53

Page 99: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Request and Session Attributes

I A servlet can access attributes stored within the session or within the request.I Request attributes are accessible as long as the request exists

I Attributes are like variables:I One servlet can set an attribute in the request or sessionI Another servlet (included or forwarded to) can retrieve the attribute value,

change it, et.c.I If the attribute is in the session, future accesses from the same browser can read

its value (this is how form login is implemented)I javax.servlet.ServletRequest:

I setAttribute(String name, Object value)I getAttribute(String name)

I javax.servlet.HttpSessionI setAttribute(String name, Object value)I getAttribute(String name)

I Most of these methods use an internal map (associating objects with String keys)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 30 / 53

Page 100: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Request and Session Attributes

I A servlet can access attributes stored within the session or within the request.I Request attributes are accessible as long as the request exists

I Attributes are like variables:I One servlet can set an attribute in the request or sessionI Another servlet (included or forwarded to) can retrieve the attribute value,

change it, et.c.I If the attribute is in the session, future accesses from the same browser can read

its value (this is how form login is implemented)I javax.servlet.ServletRequest:

I setAttribute(String name, Object value)I getAttribute(String name)

I javax.servlet.HttpSessionI setAttribute(String name, Object value)I getAttribute(String name)

I Most of these methods use an internal map (associating objects with String keys)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 30 / 53

Page 101: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Request and Session Attributes

I A servlet can access attributes stored within the session or within the request.I Request attributes are accessible as long as the request exists

I Attributes are like variables:I One servlet can set an attribute in the request or sessionI Another servlet (included or forwarded to) can retrieve the attribute value,

change it, et.c.I If the attribute is in the session, future accesses from the same browser can read

its value (this is how form login is implemented)I javax.servlet.ServletRequest:

I setAttribute(String name, Object value)I getAttribute(String name)

I javax.servlet.HttpSessionI setAttribute(String name, Object value)I getAttribute(String name)

I Most of these methods use an internal map (associating objects with String keys)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 30 / 53

Page 102: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Java Server Pages (JSP)

I When we use simple servlets we have to use a lot of println()I In JSP all text is sent to the browser without need for println()I If you want to do other things than printing (call methods, etc)

I you can open a <% java scriptlet %> orI you can print a <%= java expression %>

I So JSP is a mix of HTML (or whatever you send to the browser) and JavaI A designer who doesn’t know Java can still contribute to the layout!

I In Java scriptlets there are some pre-defined (implicit) objects:I request: javax.servlet.http.HttpServletRequestI response: javax.servlet.http.HttpServletResponseI session: javax.servlet.http.HttpSessionI pageContext: javax.servlet.jsp.PageContextI out: javax.servlet.jsp.JspWriterI application: javax.servlet.ServletContext (the webapp)I config: javax.servlet.ServletConfig (argument to init())

I JSP 2.0 dochttp://java.sun.com/products/jsp/syntax/2.0/syntaxref20.html

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 31 / 53

Page 103: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Java Server Pages (JSP)

I When we use simple servlets we have to use a lot of println()

I In JSP all text is sent to the browser without need for println()I If you want to do other things than printing (call methods, etc)

I you can open a <% java scriptlet %> orI you can print a <%= java expression %>

I So JSP is a mix of HTML (or whatever you send to the browser) and JavaI A designer who doesn’t know Java can still contribute to the layout!

I In Java scriptlets there are some pre-defined (implicit) objects:I request: javax.servlet.http.HttpServletRequestI response: javax.servlet.http.HttpServletResponseI session: javax.servlet.http.HttpSessionI pageContext: javax.servlet.jsp.PageContextI out: javax.servlet.jsp.JspWriterI application: javax.servlet.ServletContext (the webapp)I config: javax.servlet.ServletConfig (argument to init())

I JSP 2.0 dochttp://java.sun.com/products/jsp/syntax/2.0/syntaxref20.html

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 31 / 53

Page 104: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Java Server Pages (JSP)

I When we use simple servlets we have to use a lot of println()I In JSP all text is sent to the browser without need for println()

I If you want to do other things than printing (call methods, etc)I you can open a <% java scriptlet %> orI you can print a <%= java expression %>

I So JSP is a mix of HTML (or whatever you send to the browser) and JavaI A designer who doesn’t know Java can still contribute to the layout!

I In Java scriptlets there are some pre-defined (implicit) objects:I request: javax.servlet.http.HttpServletRequestI response: javax.servlet.http.HttpServletResponseI session: javax.servlet.http.HttpSessionI pageContext: javax.servlet.jsp.PageContextI out: javax.servlet.jsp.JspWriterI application: javax.servlet.ServletContext (the webapp)I config: javax.servlet.ServletConfig (argument to init())

I JSP 2.0 dochttp://java.sun.com/products/jsp/syntax/2.0/syntaxref20.html

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 31 / 53

Page 105: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Java Server Pages (JSP)

I When we use simple servlets we have to use a lot of println()I In JSP all text is sent to the browser without need for println()I If you want to do other things than printing (call methods, etc)

I you can open a <% java scriptlet %> orI you can print a <%= java expression %>

I So JSP is a mix of HTML (or whatever you send to the browser) and JavaI A designer who doesn’t know Java can still contribute to the layout!

I In Java scriptlets there are some pre-defined (implicit) objects:I request: javax.servlet.http.HttpServletRequestI response: javax.servlet.http.HttpServletResponseI session: javax.servlet.http.HttpSessionI pageContext: javax.servlet.jsp.PageContextI out: javax.servlet.jsp.JspWriterI application: javax.servlet.ServletContext (the webapp)I config: javax.servlet.ServletConfig (argument to init())

I JSP 2.0 dochttp://java.sun.com/products/jsp/syntax/2.0/syntaxref20.html

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 31 / 53

Page 106: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Java Server Pages (JSP)

I When we use simple servlets we have to use a lot of println()I In JSP all text is sent to the browser without need for println()I If you want to do other things than printing (call methods, etc)

I you can open a <% java scriptlet %> orI you can print a <%= java expression %>

I So JSP is a mix of HTML (or whatever you send to the browser) and JavaI A designer who doesn’t know Java can still contribute to the layout!

I In Java scriptlets there are some pre-defined (implicit) objects:I request: javax.servlet.http.HttpServletRequestI response: javax.servlet.http.HttpServletResponseI session: javax.servlet.http.HttpSessionI pageContext: javax.servlet.jsp.PageContextI out: javax.servlet.jsp.JspWriterI application: javax.servlet.ServletContext (the webapp)I config: javax.servlet.ServletConfig (argument to init())

I JSP 2.0 dochttp://java.sun.com/products/jsp/syntax/2.0/syntaxref20.html

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 31 / 53

Page 107: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Java Server Pages (JSP)

I When we use simple servlets we have to use a lot of println()I In JSP all text is sent to the browser without need for println()I If you want to do other things than printing (call methods, etc)

I you can open a <% java scriptlet %> orI you can print a <%= java expression %>

I So JSP is a mix of HTML (or whatever you send to the browser) and JavaI A designer who doesn’t know Java can still contribute to the layout!

I In Java scriptlets there are some pre-defined (implicit) objects:I request: javax.servlet.http.HttpServletRequestI response: javax.servlet.http.HttpServletResponseI session: javax.servlet.http.HttpSessionI pageContext: javax.servlet.jsp.PageContextI out: javax.servlet.jsp.JspWriterI application: javax.servlet.ServletContext (the webapp)I config: javax.servlet.ServletConfig (argument to init())

I JSP 2.0 dochttp://java.sun.com/products/jsp/syntax/2.0/syntaxref20.html

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 31 / 53

Page 108: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Java Server Pages (JSP)

I When we use simple servlets we have to use a lot of println()I In JSP all text is sent to the browser without need for println()I If you want to do other things than printing (call methods, etc)

I you can open a <% java scriptlet %> orI you can print a <%= java expression %>

I So JSP is a mix of HTML (or whatever you send to the browser) and JavaI A designer who doesn’t know Java can still contribute to the layout!

I In Java scriptlets there are some pre-defined (implicit) objects:I request: javax.servlet.http.HttpServletRequestI response: javax.servlet.http.HttpServletResponseI session: javax.servlet.http.HttpSessionI pageContext: javax.servlet.jsp.PageContextI out: javax.servlet.jsp.JspWriterI application: javax.servlet.ServletContext (the webapp)I config: javax.servlet.ServletConfig (argument to init())

I JSP 2.0 dochttp://java.sun.com/products/jsp/syntax/2.0/syntaxref20.html

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 31 / 53

Page 109: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JSP How-to

I You can put JSPs anywhere in a webapp, except inside WEB-INF

I So wherever you have content (HTML, images) you can have JSPs as wellI Behind the scene, the servlet container (Tomcat) translate JSPs to .java files

that define servlets which do request.getWriter().print() for everyHTML string in the page

I Since JSP pages are servlets as well, they have all the servlet functionality!

I The .java file is compiled behind the scene

I Yet you will see the compilation errors if there are anyI To find the generated java with localTomcat look inwork/Standalone/localhost/labbar

I With JSP, you do not need to restart Tomcat or reload the servlet context whenyou change something. It will be re-translated to Java and recompiled for youautomatically

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 32 / 53

Page 110: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JSP How-to

I You can put JSPs anywhere in a webapp, except inside WEB-INFI So wherever you have content (HTML, images) you can have JSPs as well

I Behind the scene, the servlet container (Tomcat) translate JSPs to .java filesthat define servlets which do request.getWriter().print() for everyHTML string in the page

I Since JSP pages are servlets as well, they have all the servlet functionality!

I The .java file is compiled behind the scene

I Yet you will see the compilation errors if there are anyI To find the generated java with localTomcat look inwork/Standalone/localhost/labbar

I With JSP, you do not need to restart Tomcat or reload the servlet context whenyou change something. It will be re-translated to Java and recompiled for youautomatically

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 32 / 53

Page 111: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JSP How-to

I You can put JSPs anywhere in a webapp, except inside WEB-INFI So wherever you have content (HTML, images) you can have JSPs as well

I Behind the scene, the servlet container (Tomcat) translate JSPs to .java filesthat define servlets which do request.getWriter().print() for everyHTML string in the page

I Since JSP pages are servlets as well, they have all the servlet functionality!I The .java file is compiled behind the scene

I Yet you will see the compilation errors if there are anyI To find the generated java with localTomcat look inwork/Standalone/localhost/labbar

I With JSP, you do not need to restart Tomcat or reload the servlet context whenyou change something. It will be re-translated to Java and recompiled for youautomatically

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 32 / 53

Page 112: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JSP How-to

I You can put JSPs anywhere in a webapp, except inside WEB-INFI So wherever you have content (HTML, images) you can have JSPs as well

I Behind the scene, the servlet container (Tomcat) translate JSPs to .java filesthat define servlets which do request.getWriter().print() for everyHTML string in the page

I Since JSP pages are servlets as well, they have all the servlet functionality!

I The .java file is compiled behind the scene

I Yet you will see the compilation errors if there are anyI To find the generated java with localTomcat look inwork/Standalone/localhost/labbar

I With JSP, you do not need to restart Tomcat or reload the servlet context whenyou change something. It will be re-translated to Java and recompiled for youautomatically

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 32 / 53

Page 113: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JSP How-to

I You can put JSPs anywhere in a webapp, except inside WEB-INFI So wherever you have content (HTML, images) you can have JSPs as well

I Behind the scene, the servlet container (Tomcat) translate JSPs to .java filesthat define servlets which do request.getWriter().print() for everyHTML string in the page

I Since JSP pages are servlets as well, they have all the servlet functionality!I The .java file is compiled behind the scene

I Yet you will see the compilation errors if there are anyI To find the generated java with localTomcat look inwork/Standalone/localhost/labbar

I With JSP, you do not need to restart Tomcat or reload the servlet context whenyou change something. It will be re-translated to Java and recompiled for youautomatically

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 32 / 53

Page 114: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JSP How-to

I You can put JSPs anywhere in a webapp, except inside WEB-INFI So wherever you have content (HTML, images) you can have JSPs as well

I Behind the scene, the servlet container (Tomcat) translate JSPs to .java filesthat define servlets which do request.getWriter().print() for everyHTML string in the page

I Since JSP pages are servlets as well, they have all the servlet functionality!I The .java file is compiled behind the scene

I Yet you will see the compilation errors if there are any

I To find the generated java with localTomcat look inwork/Standalone/localhost/labbar

I With JSP, you do not need to restart Tomcat or reload the servlet context whenyou change something. It will be re-translated to Java and recompiled for youautomatically

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 32 / 53

Page 115: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JSP How-to

I You can put JSPs anywhere in a webapp, except inside WEB-INFI So wherever you have content (HTML, images) you can have JSPs as well

I Behind the scene, the servlet container (Tomcat) translate JSPs to .java filesthat define servlets which do request.getWriter().print() for everyHTML string in the page

I Since JSP pages are servlets as well, they have all the servlet functionality!I The .java file is compiled behind the scene

I Yet you will see the compilation errors if there are anyI To find the generated java with localTomcat look inwork/Standalone/localhost/labbar

I With JSP, you do not need to restart Tomcat or reload the servlet context whenyou change something. It will be re-translated to Java and recompiled for youautomatically

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 32 / 53

Page 116: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JSP How-to

I You can put JSPs anywhere in a webapp, except inside WEB-INFI So wherever you have content (HTML, images) you can have JSPs as well

I Behind the scene, the servlet container (Tomcat) translate JSPs to .java filesthat define servlets which do request.getWriter().print() for everyHTML string in the page

I Since JSP pages are servlets as well, they have all the servlet functionality!I The .java file is compiled behind the scene

I Yet you will see the compilation errors if there are anyI To find the generated java with localTomcat look inwork/Standalone/localhost/labbar

I With JSP, you do not need to restart Tomcat or reload the servlet context whenyou change something. It will be re-translated to Java and recompiled for youautomatically

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 32 / 53

Page 117: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JSP vs other technologies

I JSP vs ASP

I Java is more powerful than Basic and more portable.I Lately ASP works with C# but that’s still less portable than Java

I JSP vs PHP

I Java is more widespread and has more industry support

I JSP vs servlets

I JSP is a servlet in the end, but it can be easier to get things together if thereis a lot of HTML layout to generate

I For more programming-intensive tasks, servlets can work better

I Java Server Faces (JSF) is a more GUI-style web programming and is hard tocombine with JSP

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 33 / 53

Page 118: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JSP vs other technologies

I JSP vs ASPI Java is more powerful than Basic and more portable.

I Lately ASP works with C# but that’s still less portable than JavaI JSP vs PHP

I Java is more widespread and has more industry support

I JSP vs servlets

I JSP is a servlet in the end, but it can be easier to get things together if thereis a lot of HTML layout to generate

I For more programming-intensive tasks, servlets can work better

I Java Server Faces (JSF) is a more GUI-style web programming and is hard tocombine with JSP

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 33 / 53

Page 119: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JSP vs other technologies

I JSP vs ASPI Java is more powerful than Basic and more portable.I Lately ASP works with C# but that’s still less portable than Java

I JSP vs PHP

I Java is more widespread and has more industry support

I JSP vs servlets

I JSP is a servlet in the end, but it can be easier to get things together if thereis a lot of HTML layout to generate

I For more programming-intensive tasks, servlets can work better

I Java Server Faces (JSF) is a more GUI-style web programming and is hard tocombine with JSP

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 33 / 53

Page 120: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JSP vs other technologies

I JSP vs ASPI Java is more powerful than Basic and more portable.I Lately ASP works with C# but that’s still less portable than Java

I JSP vs PHP

I Java is more widespread and has more industry supportI JSP vs servlets

I JSP is a servlet in the end, but it can be easier to get things together if thereis a lot of HTML layout to generate

I For more programming-intensive tasks, servlets can work better

I Java Server Faces (JSF) is a more GUI-style web programming and is hard tocombine with JSP

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 33 / 53

Page 121: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JSP vs other technologies

I JSP vs ASPI Java is more powerful than Basic and more portable.I Lately ASP works with C# but that’s still less portable than Java

I JSP vs PHPI Java is more widespread and has more industry support

I JSP vs servlets

I JSP is a servlet in the end, but it can be easier to get things together if thereis a lot of HTML layout to generate

I For more programming-intensive tasks, servlets can work better

I Java Server Faces (JSF) is a more GUI-style web programming and is hard tocombine with JSP

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 33 / 53

Page 122: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JSP vs other technologies

I JSP vs ASPI Java is more powerful than Basic and more portable.I Lately ASP works with C# but that’s still less portable than Java

I JSP vs PHPI Java is more widespread and has more industry support

I JSP vs servlets

I JSP is a servlet in the end, but it can be easier to get things together if thereis a lot of HTML layout to generate

I For more programming-intensive tasks, servlets can work betterI Java Server Faces (JSF) is a more GUI-style web programming and is hard to

combine with JSP

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 33 / 53

Page 123: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JSP vs other technologies

I JSP vs ASPI Java is more powerful than Basic and more portable.I Lately ASP works with C# but that’s still less portable than Java

I JSP vs PHPI Java is more widespread and has more industry support

I JSP vs servletsI JSP is a servlet in the end, but it can be easier to get things together if there

is a lot of HTML layout to generate

I For more programming-intensive tasks, servlets can work betterI Java Server Faces (JSF) is a more GUI-style web programming and is hard to

combine with JSP

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 33 / 53

Page 124: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JSP vs other technologies

I JSP vs ASPI Java is more powerful than Basic and more portable.I Lately ASP works with C# but that’s still less portable than Java

I JSP vs PHPI Java is more widespread and has more industry support

I JSP vs servletsI JSP is a servlet in the end, but it can be easier to get things together if there

is a lot of HTML layout to generateI For more programming-intensive tasks, servlets can work better

I Java Server Faces (JSF) is a more GUI-style web programming and is hard tocombine with JSP

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 33 / 53

Page 125: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JSP vs other technologies

I JSP vs ASPI Java is more powerful than Basic and more portable.I Lately ASP works with C# but that’s still less portable than Java

I JSP vs PHPI Java is more widespread and has more industry support

I JSP vs servletsI JSP is a servlet in the end, but it can be easier to get things together if there

is a lot of HTML layout to generateI For more programming-intensive tasks, servlets can work better

I Java Server Faces (JSF) is a more GUI-style web programming and is hard tocombine with JSP

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 33 / 53

Page 126: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

The @page directive

<%@page import="java.util.*,java.io.*" contentType="text/html"%>

I Packages imported by default: java.lang.*, javax.servlet.*,javax.servlet.jsp.*, javax.servlet.http.*

I The default contentType is text/htmlI errorPage: the page to which a forward should occur in case of error

I The exception object will be predefined in that pageI isErrorPage indicates that this page is for dealing with such errors in JSP

pages

I buffer, autoFlush for response content buffering

I If you know your page will produce a lot of content, it may be important towork on these

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 34 / 53

Page 127: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

The @page directive

<%@page import="java.util.*,java.io.*" contentType="text/html"%>

I Packages imported by default: java.lang.*, javax.servlet.*,javax.servlet.jsp.*, javax.servlet.http.*

I The default contentType is text/html

I errorPage: the page to which a forward should occur in case of error

I The exception object will be predefined in that pageI isErrorPage indicates that this page is for dealing with such errors in JSP

pages

I buffer, autoFlush for response content buffering

I If you know your page will produce a lot of content, it may be important towork on these

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 34 / 53

Page 128: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

The @page directive

<%@page import="java.util.*,java.io.*" contentType="text/html"%>

I Packages imported by default: java.lang.*, javax.servlet.*,javax.servlet.jsp.*, javax.servlet.http.*

I The default contentType is text/htmlI errorPage: the page to which a forward should occur in case of error

I The exception object will be predefined in that pageI isErrorPage indicates that this page is for dealing with such errors in JSP

pagesI buffer, autoFlush for response content buffering

I If you know your page will produce a lot of content, it may be important towork on these

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 34 / 53

Page 129: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

The @page directive

<%@page import="java.util.*,java.io.*" contentType="text/html"%>

I Packages imported by default: java.lang.*, javax.servlet.*,javax.servlet.jsp.*, javax.servlet.http.*

I The default contentType is text/htmlI errorPage: the page to which a forward should occur in case of error

I The exception object will be predefined in that page

I isErrorPage indicates that this page is for dealing with such errors in JSPpages

I buffer, autoFlush for response content buffering

I If you know your page will produce a lot of content, it may be important towork on these

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 34 / 53

Page 130: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

The @page directive

<%@page import="java.util.*,java.io.*" contentType="text/html"%>

I Packages imported by default: java.lang.*, javax.servlet.*,javax.servlet.jsp.*, javax.servlet.http.*

I The default contentType is text/htmlI errorPage: the page to which a forward should occur in case of error

I The exception object will be predefined in that pageI isErrorPage indicates that this page is for dealing with such errors in JSP

pages

I buffer, autoFlush for response content buffering

I If you know your page will produce a lot of content, it may be important towork on these

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 34 / 53

Page 131: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

The @page directive

<%@page import="java.util.*,java.io.*" contentType="text/html"%>

I Packages imported by default: java.lang.*, javax.servlet.*,javax.servlet.jsp.*, javax.servlet.http.*

I The default contentType is text/htmlI errorPage: the page to which a forward should occur in case of error

I The exception object will be predefined in that pageI isErrorPage indicates that this page is for dealing with such errors in JSP

pagesI buffer, autoFlush for response content buffering

I If you know your page will produce a lot of content, it may be important towork on these

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 34 / 53

Page 132: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

The @page directive

<%@page import="java.util.*,java.io.*" contentType="text/html"%>

I Packages imported by default: java.lang.*, javax.servlet.*,javax.servlet.jsp.*, javax.servlet.http.*

I The default contentType is text/htmlI errorPage: the page to which a forward should occur in case of error

I The exception object will be predefined in that pageI isErrorPage indicates that this page is for dealing with such errors in JSP

pagesI buffer, autoFlush for response content buffering

I If you know your page will produce a lot of content, it may be important towork on these

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 34 / 53

Page 133: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Class declarations

I JSPs generate a Java class, a HttpServlet subclass

I Most of the JSP content will go into the service() methodI If you want to have something outside that method (variable declarations or

method definitions) you can use <%! ... %>

I <%! private int accessCount = 0; %>Accesses to page since server reboot:<%= ++accessCount %>

I This will be translated into something like:public class myJsp extends HttpServlet{private int accessCount = 0;public void service(HttpSerletRequest req,

HttpServletResponse resp)throws IOException, ServletException{

ServletOutputStream out= req.getOutputStream();out.print("Accesses to page since server reboot:");out.print(++accessCount);

}}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 35 / 53

Page 134: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Class declarations

I JSPs generate a Java class, a HttpServlet subclassI Most of the JSP content will go into the service() method

I If you want to have something outside that method (variable declarations ormethod definitions) you can use <%! ... %>

I <%! private int accessCount = 0; %>Accesses to page since server reboot:<%= ++accessCount %>

I This will be translated into something like:public class myJsp extends HttpServlet{private int accessCount = 0;public void service(HttpSerletRequest req,

HttpServletResponse resp)throws IOException, ServletException{

ServletOutputStream out= req.getOutputStream();out.print("Accesses to page since server reboot:");out.print(++accessCount);

}}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 35 / 53

Page 135: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Class declarations

I JSPs generate a Java class, a HttpServlet subclassI Most of the JSP content will go into the service() methodI If you want to have something outside that method (variable declarations or

method definitions) you can use <%! ... %>

I <%! private int accessCount = 0; %>Accesses to page since server reboot:<%= ++accessCount %>

I This will be translated into something like:public class myJsp extends HttpServlet{private int accessCount = 0;public void service(HttpSerletRequest req,

HttpServletResponse resp)throws IOException, ServletException{

ServletOutputStream out= req.getOutputStream();out.print("Accesses to page since server reboot:");out.print(++accessCount);

}}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 35 / 53

Page 136: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Class declarations

I JSPs generate a Java class, a HttpServlet subclassI Most of the JSP content will go into the service() methodI If you want to have something outside that method (variable declarations or

method definitions) you can use <%! ... %>

I <%! private int accessCount = 0; %>Accesses to page since server reboot:<%= ++accessCount %>

I This will be translated into something like:public class myJsp extends HttpServlet{private int accessCount = 0;public void service(HttpSerletRequest req,

HttpServletResponse resp)throws IOException, ServletException{

ServletOutputStream out= req.getOutputStream();out.print("Accesses to page since server reboot:");out.print(++accessCount);

}}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 35 / 53

Page 137: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Class declarations

I JSPs generate a Java class, a HttpServlet subclassI Most of the JSP content will go into the service() methodI If you want to have something outside that method (variable declarations or

method definitions) you can use <%! ... %>

I <%! private int accessCount = 0; %>Accesses to page since server reboot:<%= ++accessCount %>

I This will be translated into something like:public class myJsp extends HttpServlet{private int accessCount = 0;public void service(HttpSerletRequest req,

HttpServletResponse resp)throws IOException, ServletException{

ServletOutputStream out= req.getOutputStream();out.print("Accesses to page since server reboot:");out.print(++accessCount);

}}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 35 / 53

Page 138: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Including and forwardingI You may include a page or servlet by specifying a path

I <jsp:include page="path" />I path can be relative (even using ../, et.c.)I or absolute, starting with / which represents the root of the webappI you can’t include pages from other webapps in the same serverI page="/servlet/somePackage.someClass" will include a servlet

I You can terminate a page and delegate the execution to another page or servlet

I <jsp:forward page="path" />I You can also do this in java using the pageContext object

see the include() and forward() methods

I You can also include or forward from servlets

I request.getRequestDispatcher(String) will give you ajavax.servlet.RequestDispatcher that can perform either include orforward

I You can textually include a file in JSP

I <%@include file="path" %> simply copies JSP code from theindicated file into the caller file prior to any code generation

I While jsp:include is analogous to a method call, @include correspondsto #include in C

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 36 / 53

Page 139: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Including and forwardingI You may include a page or servlet by specifying a path

I <jsp:include page="path" />

I path can be relative (even using ../, et.c.)I or absolute, starting with / which represents the root of the webappI you can’t include pages from other webapps in the same serverI page="/servlet/somePackage.someClass" will include a servlet

I You can terminate a page and delegate the execution to another page or servlet

I <jsp:forward page="path" />I You can also do this in java using the pageContext object

see the include() and forward() methods

I You can also include or forward from servlets

I request.getRequestDispatcher(String) will give you ajavax.servlet.RequestDispatcher that can perform either include orforward

I You can textually include a file in JSP

I <%@include file="path" %> simply copies JSP code from theindicated file into the caller file prior to any code generation

I While jsp:include is analogous to a method call, @include correspondsto #include in C

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 36 / 53

Page 140: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Including and forwardingI You may include a page or servlet by specifying a path

I <jsp:include page="path" />I path can be relative (even using ../, et.c.)

I or absolute, starting with / which represents the root of the webappI you can’t include pages from other webapps in the same serverI page="/servlet/somePackage.someClass" will include a servlet

I You can terminate a page and delegate the execution to another page or servlet

I <jsp:forward page="path" />I You can also do this in java using the pageContext object

see the include() and forward() methods

I You can also include or forward from servlets

I request.getRequestDispatcher(String) will give you ajavax.servlet.RequestDispatcher that can perform either include orforward

I You can textually include a file in JSP

I <%@include file="path" %> simply copies JSP code from theindicated file into the caller file prior to any code generation

I While jsp:include is analogous to a method call, @include correspondsto #include in C

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 36 / 53

Page 141: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Including and forwardingI You may include a page or servlet by specifying a path

I <jsp:include page="path" />I path can be relative (even using ../, et.c.)I or absolute, starting with / which represents the root of the webapp

I you can’t include pages from other webapps in the same serverI page="/servlet/somePackage.someClass" will include a servlet

I You can terminate a page and delegate the execution to another page or servlet

I <jsp:forward page="path" />I You can also do this in java using the pageContext object

see the include() and forward() methods

I You can also include or forward from servlets

I request.getRequestDispatcher(String) will give you ajavax.servlet.RequestDispatcher that can perform either include orforward

I You can textually include a file in JSP

I <%@include file="path" %> simply copies JSP code from theindicated file into the caller file prior to any code generation

I While jsp:include is analogous to a method call, @include correspondsto #include in C

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 36 / 53

Page 142: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Including and forwardingI You may include a page or servlet by specifying a path

I <jsp:include page="path" />I path can be relative (even using ../, et.c.)I or absolute, starting with / which represents the root of the webappI you can’t include pages from other webapps in the same server

I page="/servlet/somePackage.someClass" will include a servletI You can terminate a page and delegate the execution to another page or servlet

I <jsp:forward page="path" />I You can also do this in java using the pageContext object

see the include() and forward() methods

I You can also include or forward from servlets

I request.getRequestDispatcher(String) will give you ajavax.servlet.RequestDispatcher that can perform either include orforward

I You can textually include a file in JSP

I <%@include file="path" %> simply copies JSP code from theindicated file into the caller file prior to any code generation

I While jsp:include is analogous to a method call, @include correspondsto #include in C

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 36 / 53

Page 143: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Including and forwardingI You may include a page or servlet by specifying a path

I <jsp:include page="path" />I path can be relative (even using ../, et.c.)I or absolute, starting with / which represents the root of the webappI you can’t include pages from other webapps in the same serverI page="/servlet/somePackage.someClass" will include a servlet

I You can terminate a page and delegate the execution to another page or servlet

I <jsp:forward page="path" />I You can also do this in java using the pageContext object

see the include() and forward() methods

I You can also include or forward from servlets

I request.getRequestDispatcher(String) will give you ajavax.servlet.RequestDispatcher that can perform either include orforward

I You can textually include a file in JSP

I <%@include file="path" %> simply copies JSP code from theindicated file into the caller file prior to any code generation

I While jsp:include is analogous to a method call, @include correspondsto #include in C

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 36 / 53

Page 144: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Including and forwardingI You may include a page or servlet by specifying a path

I <jsp:include page="path" />I path can be relative (even using ../, et.c.)I or absolute, starting with / which represents the root of the webappI you can’t include pages from other webapps in the same serverI page="/servlet/somePackage.someClass" will include a servlet

I You can terminate a page and delegate the execution to another page or servlet

I <jsp:forward page="path" />I You can also do this in java using the pageContext object

see the include() and forward() methodsI You can also include or forward from servlets

I request.getRequestDispatcher(String) will give you ajavax.servlet.RequestDispatcher that can perform either include orforward

I You can textually include a file in JSP

I <%@include file="path" %> simply copies JSP code from theindicated file into the caller file prior to any code generation

I While jsp:include is analogous to a method call, @include correspondsto #include in C

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 36 / 53

Page 145: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Including and forwardingI You may include a page or servlet by specifying a path

I <jsp:include page="path" />I path can be relative (even using ../, et.c.)I or absolute, starting with / which represents the root of the webappI you can’t include pages from other webapps in the same serverI page="/servlet/somePackage.someClass" will include a servlet

I You can terminate a page and delegate the execution to another page or servletI <jsp:forward page="path" />

I You can also do this in java using the pageContext objectsee the include() and forward() methods

I You can also include or forward from servlets

I request.getRequestDispatcher(String) will give you ajavax.servlet.RequestDispatcher that can perform either include orforward

I You can textually include a file in JSP

I <%@include file="path" %> simply copies JSP code from theindicated file into the caller file prior to any code generation

I While jsp:include is analogous to a method call, @include correspondsto #include in C

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 36 / 53

Page 146: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Including and forwardingI You may include a page or servlet by specifying a path

I <jsp:include page="path" />I path can be relative (even using ../, et.c.)I or absolute, starting with / which represents the root of the webappI you can’t include pages from other webapps in the same serverI page="/servlet/somePackage.someClass" will include a servlet

I You can terminate a page and delegate the execution to another page or servletI <jsp:forward page="path" />I You can also do this in java using the pageContext object

see the include() and forward() methods

I You can also include or forward from servlets

I request.getRequestDispatcher(String) will give you ajavax.servlet.RequestDispatcher that can perform either include orforward

I You can textually include a file in JSP

I <%@include file="path" %> simply copies JSP code from theindicated file into the caller file prior to any code generation

I While jsp:include is analogous to a method call, @include correspondsto #include in C

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 36 / 53

Page 147: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Including and forwardingI You may include a page or servlet by specifying a path

I <jsp:include page="path" />I path can be relative (even using ../, et.c.)I or absolute, starting with / which represents the root of the webappI you can’t include pages from other webapps in the same serverI page="/servlet/somePackage.someClass" will include a servlet

I You can terminate a page and delegate the execution to another page or servletI <jsp:forward page="path" />I You can also do this in java using the pageContext object

see the include() and forward() methodsI You can also include or forward from servlets

I request.getRequestDispatcher(String) will give you ajavax.servlet.RequestDispatcher that can perform either include orforward

I You can textually include a file in JSP

I <%@include file="path" %> simply copies JSP code from theindicated file into the caller file prior to any code generation

I While jsp:include is analogous to a method call, @include correspondsto #include in C

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 36 / 53

Page 148: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Including and forwardingI You may include a page or servlet by specifying a path

I <jsp:include page="path" />I path can be relative (even using ../, et.c.)I or absolute, starting with / which represents the root of the webappI you can’t include pages from other webapps in the same serverI page="/servlet/somePackage.someClass" will include a servlet

I You can terminate a page and delegate the execution to another page or servletI <jsp:forward page="path" />I You can also do this in java using the pageContext object

see the include() and forward() methodsI You can also include or forward from servlets

I request.getRequestDispatcher(String) will give you ajavax.servlet.RequestDispatcher that can perform either include orforward

I You can textually include a file in JSP

I <%@include file="path" %> simply copies JSP code from theindicated file into the caller file prior to any code generation

I While jsp:include is analogous to a method call, @include correspondsto #include in C

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 36 / 53

Page 149: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Including and forwardingI You may include a page or servlet by specifying a path

I <jsp:include page="path" />I path can be relative (even using ../, et.c.)I or absolute, starting with / which represents the root of the webappI you can’t include pages from other webapps in the same serverI page="/servlet/somePackage.someClass" will include a servlet

I You can terminate a page and delegate the execution to another page or servletI <jsp:forward page="path" />I You can also do this in java using the pageContext object

see the include() and forward() methodsI You can also include or forward from servlets

I request.getRequestDispatcher(String) will give you ajavax.servlet.RequestDispatcher that can perform either include orforward

I You can textually include a file in JSP

I <%@include file="path" %> simply copies JSP code from theindicated file into the caller file prior to any code generation

I While jsp:include is analogous to a method call, @include correspondsto #include in C

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 36 / 53

Page 150: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Including and forwardingI You may include a page or servlet by specifying a path

I <jsp:include page="path" />I path can be relative (even using ../, et.c.)I or absolute, starting with / which represents the root of the webappI you can’t include pages from other webapps in the same serverI page="/servlet/somePackage.someClass" will include a servlet

I You can terminate a page and delegate the execution to another page or servletI <jsp:forward page="path" />I You can also do this in java using the pageContext object

see the include() and forward() methodsI You can also include or forward from servlets

I request.getRequestDispatcher(String) will give you ajavax.servlet.RequestDispatcher that can perform either include orforward

I You can textually include a file in JSPI <%@include file="path" %> simply copies JSP code from the

indicated file into the caller file prior to any code generation

I While jsp:include is analogous to a method call, @include correspondsto #include in C

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 36 / 53

Page 151: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Including and forwardingI You may include a page or servlet by specifying a path

I <jsp:include page="path" />I path can be relative (even using ../, et.c.)I or absolute, starting with / which represents the root of the webappI you can’t include pages from other webapps in the same serverI page="/servlet/somePackage.someClass" will include a servlet

I You can terminate a page and delegate the execution to another page or servletI <jsp:forward page="path" />I You can also do this in java using the pageContext object

see the include() and forward() methodsI You can also include or forward from servlets

I request.getRequestDispatcher(String) will give you ajavax.servlet.RequestDispatcher that can perform either include orforward

I You can textually include a file in JSPI <%@include file="path" %> simply copies JSP code from the

indicated file into the caller file prior to any code generationI While jsp:include is analogous to a method call, @include corresponds

to #include in CDD1335 (Lecture 6) Basic Internet Programming Spring 2010 36 / 53

Page 152: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Page context attributes

I Page attributes are visible only within the page

I Not in included or forwarded pages whileI request attributes are visible in all included and forwarded pages

I javax.servlet.jsp.PageContext (the pageContext JSP variable) offers amechanism to manipulate variables from all scopes

I ’scope’ can bePageContext.PAGE_SCOPE (page attributes, default)PageContext.REQUEST_SCOPE (request attributes)PageContext.SESSION_SCOPE (session attributess)PageContext.APPLICATION_SCOPE (accessible to all servlets and

JSPs within the same webapp)I with methods:

setAttribute(String name, Object value, int scope)getAttribute(String name, int scope)findAttribute(String name) searches from page to app scoperemoveAttribute(String name, int scope)

I Request, session or application attributes can be used to communicate betweenthe page and the pages/servlets it includes or those that included it

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 37 / 53

Page 153: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Page context attributes

I Page attributes are visible only within the pageI Not in included or forwarded pages while

I request attributes are visible in all included and forwarded pagesI javax.servlet.jsp.PageContext (the pageContext JSP variable) offers a

mechanism to manipulate variables from all scopes

I ’scope’ can bePageContext.PAGE_SCOPE (page attributes, default)PageContext.REQUEST_SCOPE (request attributes)PageContext.SESSION_SCOPE (session attributess)PageContext.APPLICATION_SCOPE (accessible to all servlets and

JSPs within the same webapp)I with methods:

setAttribute(String name, Object value, int scope)getAttribute(String name, int scope)findAttribute(String name) searches from page to app scoperemoveAttribute(String name, int scope)

I Request, session or application attributes can be used to communicate betweenthe page and the pages/servlets it includes or those that included it

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 37 / 53

Page 154: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Page context attributes

I Page attributes are visible only within the pageI Not in included or forwarded pages whileI request attributes are visible in all included and forwarded pages

I javax.servlet.jsp.PageContext (the pageContext JSP variable) offers amechanism to manipulate variables from all scopes

I ’scope’ can bePageContext.PAGE_SCOPE (page attributes, default)PageContext.REQUEST_SCOPE (request attributes)PageContext.SESSION_SCOPE (session attributess)PageContext.APPLICATION_SCOPE (accessible to all servlets and

JSPs within the same webapp)I with methods:

setAttribute(String name, Object value, int scope)getAttribute(String name, int scope)findAttribute(String name) searches from page to app scoperemoveAttribute(String name, int scope)

I Request, session or application attributes can be used to communicate betweenthe page and the pages/servlets it includes or those that included it

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 37 / 53

Page 155: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Page context attributes

I Page attributes are visible only within the pageI Not in included or forwarded pages whileI request attributes are visible in all included and forwarded pages

I javax.servlet.jsp.PageContext (the pageContext JSP variable) offers amechanism to manipulate variables from all scopes

I ’scope’ can bePageContext.PAGE_SCOPE (page attributes, default)PageContext.REQUEST_SCOPE (request attributes)PageContext.SESSION_SCOPE (session attributess)PageContext.APPLICATION_SCOPE (accessible to all servlets and

JSPs within the same webapp)I with methods:

setAttribute(String name, Object value, int scope)getAttribute(String name, int scope)findAttribute(String name) searches from page to app scoperemoveAttribute(String name, int scope)

I Request, session or application attributes can be used to communicate betweenthe page and the pages/servlets it includes or those that included it

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 37 / 53

Page 156: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Page context attributes

I Page attributes are visible only within the pageI Not in included or forwarded pages whileI request attributes are visible in all included and forwarded pages

I javax.servlet.jsp.PageContext (the pageContext JSP variable) offers amechanism to manipulate variables from all scopes

I ’scope’ can bePageContext.PAGE_SCOPE (page attributes, default)PageContext.REQUEST_SCOPE (request attributes)PageContext.SESSION_SCOPE (session attributess)PageContext.APPLICATION_SCOPE (accessible to all servlets and

JSPs within the same webapp)

I with methods:

setAttribute(String name, Object value, int scope)getAttribute(String name, int scope)findAttribute(String name) searches from page to app scoperemoveAttribute(String name, int scope)

I Request, session or application attributes can be used to communicate betweenthe page and the pages/servlets it includes or those that included it

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 37 / 53

Page 157: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Page context attributes

I Page attributes are visible only within the pageI Not in included or forwarded pages whileI request attributes are visible in all included and forwarded pages

I javax.servlet.jsp.PageContext (the pageContext JSP variable) offers amechanism to manipulate variables from all scopes

I ’scope’ can bePageContext.PAGE_SCOPE (page attributes, default)PageContext.REQUEST_SCOPE (request attributes)PageContext.SESSION_SCOPE (session attributess)PageContext.APPLICATION_SCOPE (accessible to all servlets and

JSPs within the same webapp)I with methods:

setAttribute(String name, Object value, int scope)getAttribute(String name, int scope)findAttribute(String name) searches from page to app scoperemoveAttribute(String name, int scope)

I Request, session or application attributes can be used to communicate betweenthe page and the pages/servlets it includes or those that included it

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 37 / 53

Page 158: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Page context attributes

I Page attributes are visible only within the pageI Not in included or forwarded pages whileI request attributes are visible in all included and forwarded pages

I javax.servlet.jsp.PageContext (the pageContext JSP variable) offers amechanism to manipulate variables from all scopes

I ’scope’ can bePageContext.PAGE_SCOPE (page attributes, default)PageContext.REQUEST_SCOPE (request attributes)PageContext.SESSION_SCOPE (session attributess)PageContext.APPLICATION_SCOPE (accessible to all servlets and

JSPs within the same webapp)I with methods:

setAttribute(String name, Object value, int scope)

getAttribute(String name, int scope)findAttribute(String name) searches from page to app scoperemoveAttribute(String name, int scope)

I Request, session or application attributes can be used to communicate betweenthe page and the pages/servlets it includes or those that included it

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 37 / 53

Page 159: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Page context attributes

I Page attributes are visible only within the pageI Not in included or forwarded pages whileI request attributes are visible in all included and forwarded pages

I javax.servlet.jsp.PageContext (the pageContext JSP variable) offers amechanism to manipulate variables from all scopes

I ’scope’ can bePageContext.PAGE_SCOPE (page attributes, default)PageContext.REQUEST_SCOPE (request attributes)PageContext.SESSION_SCOPE (session attributess)PageContext.APPLICATION_SCOPE (accessible to all servlets and

JSPs within the same webapp)I with methods:

setAttribute(String name, Object value, int scope)getAttribute(String name, int scope)

findAttribute(String name) searches from page to app scoperemoveAttribute(String name, int scope)

I Request, session or application attributes can be used to communicate betweenthe page and the pages/servlets it includes or those that included it

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 37 / 53

Page 160: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Page context attributes

I Page attributes are visible only within the pageI Not in included or forwarded pages whileI request attributes are visible in all included and forwarded pages

I javax.servlet.jsp.PageContext (the pageContext JSP variable) offers amechanism to manipulate variables from all scopes

I ’scope’ can bePageContext.PAGE_SCOPE (page attributes, default)PageContext.REQUEST_SCOPE (request attributes)PageContext.SESSION_SCOPE (session attributess)PageContext.APPLICATION_SCOPE (accessible to all servlets and

JSPs within the same webapp)I with methods:

setAttribute(String name, Object value, int scope)getAttribute(String name, int scope)findAttribute(String name) searches from page to app scope

removeAttribute(String name, int scope)

I Request, session or application attributes can be used to communicate betweenthe page and the pages/servlets it includes or those that included it

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 37 / 53

Page 161: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Page context attributes

I Page attributes are visible only within the pageI Not in included or forwarded pages whileI request attributes are visible in all included and forwarded pages

I javax.servlet.jsp.PageContext (the pageContext JSP variable) offers amechanism to manipulate variables from all scopes

I ’scope’ can bePageContext.PAGE_SCOPE (page attributes, default)PageContext.REQUEST_SCOPE (request attributes)PageContext.SESSION_SCOPE (session attributess)PageContext.APPLICATION_SCOPE (accessible to all servlets and

JSPs within the same webapp)I with methods:

setAttribute(String name, Object value, int scope)getAttribute(String name, int scope)findAttribute(String name) searches from page to app scoperemoveAttribute(String name, int scope)

I Request, session or application attributes can be used to communicate betweenthe page and the pages/servlets it includes or those that included it

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 37 / 53

Page 162: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Page context attributes

I Page attributes are visible only within the pageI Not in included or forwarded pages whileI request attributes are visible in all included and forwarded pages

I javax.servlet.jsp.PageContext (the pageContext JSP variable) offers amechanism to manipulate variables from all scopes

I ’scope’ can bePageContext.PAGE_SCOPE (page attributes, default)PageContext.REQUEST_SCOPE (request attributes)PageContext.SESSION_SCOPE (session attributess)PageContext.APPLICATION_SCOPE (accessible to all servlets and

JSPs within the same webapp)I with methods:

setAttribute(String name, Object value, int scope)getAttribute(String name, int scope)findAttribute(String name) searches from page to app scoperemoveAttribute(String name, int scope)

I Request, session or application attributes can be used to communicate betweenthe page and the pages/servlets it includes or those that included it

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 37 / 53

Page 163: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Expression Languageallows for simpler page code

I You may writeHi. The surname you sent is ${param.surname} instead ofHi. The surname you sent is <%= request.getParameter("surname") %>

I Manipulate attributes and parameters easier

I ${attrName} is equal to pageContext.getAttribute("attrName")I ${param.paramName} is the same as ${param["paramName"]I ${sessionScope.attrName} sessionScope and param are actuallyjava.util.Map objects. In general:

I ${aMap.aKey} ≡ ${aMap["aKey"]} ≡ ${anArray[anIndex]I ${anObject.anItem} will call anObject.getAnItem()

I Expressions with attributes and parameters (${attr1 + 1 + attr2})

I Arithmetic operators: +, -, *, /, %, mod, divI Logical operators : and, or, not, &&, ||, !I Comparison operators :==, eq, <, lt, <=, le, >, gt, >=, ge, !=, ne

I empty: operator that tests for "" or nullI choise: expr?exprTrue:exprFalseYou sent ${empty(param.message)?"no":"a"} message

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 38 / 53

Page 164: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Expression Languageallows for simpler page code

I You may writeHi. The surname you sent is ${param.surname} instead ofHi. The surname you sent is <%= request.getParameter("surname") %>

I Manipulate attributes and parameters easier

I ${attrName} is equal to pageContext.getAttribute("attrName")I ${param.paramName} is the same as ${param["paramName"]I ${sessionScope.attrName} sessionScope and param are actuallyjava.util.Map objects. In general:

I ${aMap.aKey} ≡ ${aMap["aKey"]} ≡ ${anArray[anIndex]I ${anObject.anItem} will call anObject.getAnItem()

I Expressions with attributes and parameters (${attr1 + 1 + attr2})

I Arithmetic operators: +, -, *, /, %, mod, divI Logical operators : and, or, not, &&, ||, !I Comparison operators :==, eq, <, lt, <=, le, >, gt, >=, ge, !=, ne

I empty: operator that tests for "" or nullI choise: expr?exprTrue:exprFalseYou sent ${empty(param.message)?"no":"a"} message

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 38 / 53

Page 165: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Expression Languageallows for simpler page code

I You may writeHi. The surname you sent is ${param.surname} instead ofHi. The surname you sent is <%= request.getParameter("surname") %>

I Manipulate attributes and parameters easierI ${attrName} is equal to pageContext.getAttribute("attrName")

I ${param.paramName} is the same as ${param["paramName"]I ${sessionScope.attrName} sessionScope and param are actuallyjava.util.Map objects. In general:

I ${aMap.aKey} ≡ ${aMap["aKey"]} ≡ ${anArray[anIndex]I ${anObject.anItem} will call anObject.getAnItem()

I Expressions with attributes and parameters (${attr1 + 1 + attr2})

I Arithmetic operators: +, -, *, /, %, mod, divI Logical operators : and, or, not, &&, ||, !I Comparison operators :==, eq, <, lt, <=, le, >, gt, >=, ge, !=, ne

I empty: operator that tests for "" or nullI choise: expr?exprTrue:exprFalseYou sent ${empty(param.message)?"no":"a"} message

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 38 / 53

Page 166: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Expression Languageallows for simpler page code

I You may writeHi. The surname you sent is ${param.surname} instead ofHi. The surname you sent is <%= request.getParameter("surname") %>

I Manipulate attributes and parameters easierI ${attrName} is equal to pageContext.getAttribute("attrName")I ${param.paramName} is the same as ${param["paramName"]

I ${sessionScope.attrName} sessionScope and param are actuallyjava.util.Map objects. In general:

I ${aMap.aKey} ≡ ${aMap["aKey"]} ≡ ${anArray[anIndex]I ${anObject.anItem} will call anObject.getAnItem()

I Expressions with attributes and parameters (${attr1 + 1 + attr2})

I Arithmetic operators: +, -, *, /, %, mod, divI Logical operators : and, or, not, &&, ||, !I Comparison operators :==, eq, <, lt, <=, le, >, gt, >=, ge, !=, ne

I empty: operator that tests for "" or nullI choise: expr?exprTrue:exprFalseYou sent ${empty(param.message)?"no":"a"} message

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 38 / 53

Page 167: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Expression Languageallows for simpler page code

I You may writeHi. The surname you sent is ${param.surname} instead ofHi. The surname you sent is <%= request.getParameter("surname") %>

I Manipulate attributes and parameters easierI ${attrName} is equal to pageContext.getAttribute("attrName")I ${param.paramName} is the same as ${param["paramName"]I ${sessionScope.attrName} sessionScope and param are actuallyjava.util.Map objects. In general:

I ${aMap.aKey} ≡ ${aMap["aKey"]} ≡ ${anArray[anIndex]I ${anObject.anItem} will call anObject.getAnItem()

I Expressions with attributes and parameters (${attr1 + 1 + attr2})

I Arithmetic operators: +, -, *, /, %, mod, divI Logical operators : and, or, not, &&, ||, !I Comparison operators :==, eq, <, lt, <=, le, >, gt, >=, ge, !=, ne

I empty: operator that tests for "" or nullI choise: expr?exprTrue:exprFalseYou sent ${empty(param.message)?"no":"a"} message

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 38 / 53

Page 168: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Expression Languageallows for simpler page code

I You may writeHi. The surname you sent is ${param.surname} instead ofHi. The surname you sent is <%= request.getParameter("surname") %>

I Manipulate attributes and parameters easierI ${attrName} is equal to pageContext.getAttribute("attrName")I ${param.paramName} is the same as ${param["paramName"]I ${sessionScope.attrName} sessionScope and param are actuallyjava.util.Map objects. In general:

I ${aMap.aKey} ≡ ${aMap["aKey"]} ≡ ${anArray[anIndex]

I ${anObject.anItem} will call anObject.getAnItem()I Expressions with attributes and parameters (${attr1 + 1 + attr2})

I Arithmetic operators: +, -, *, /, %, mod, divI Logical operators : and, or, not, &&, ||, !I Comparison operators :==, eq, <, lt, <=, le, >, gt, >=, ge, !=, ne

I empty: operator that tests for "" or nullI choise: expr?exprTrue:exprFalseYou sent ${empty(param.message)?"no":"a"} message

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 38 / 53

Page 169: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Expression Languageallows for simpler page code

I You may writeHi. The surname you sent is ${param.surname} instead ofHi. The surname you sent is <%= request.getParameter("surname") %>

I Manipulate attributes and parameters easierI ${attrName} is equal to pageContext.getAttribute("attrName")I ${param.paramName} is the same as ${param["paramName"]I ${sessionScope.attrName} sessionScope and param are actuallyjava.util.Map objects. In general:

I ${aMap.aKey} ≡ ${aMap["aKey"]} ≡ ${anArray[anIndex]I ${anObject.anItem} will call anObject.getAnItem()

I Expressions with attributes and parameters (${attr1 + 1 + attr2})

I Arithmetic operators: +, -, *, /, %, mod, divI Logical operators : and, or, not, &&, ||, !I Comparison operators :==, eq, <, lt, <=, le, >, gt, >=, ge, !=, ne

I empty: operator that tests for "" or nullI choise: expr?exprTrue:exprFalseYou sent ${empty(param.message)?"no":"a"} message

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 38 / 53

Page 170: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Expression Languageallows for simpler page code

I You may writeHi. The surname you sent is ${param.surname} instead ofHi. The surname you sent is <%= request.getParameter("surname") %>

I Manipulate attributes and parameters easierI ${attrName} is equal to pageContext.getAttribute("attrName")I ${param.paramName} is the same as ${param["paramName"]I ${sessionScope.attrName} sessionScope and param are actuallyjava.util.Map objects. In general:

I ${aMap.aKey} ≡ ${aMap["aKey"]} ≡ ${anArray[anIndex]I ${anObject.anItem} will call anObject.getAnItem()

I Expressions with attributes and parameters (${attr1 + 1 + attr2})

I Arithmetic operators: +, -, *, /, %, mod, divI Logical operators : and, or, not, &&, ||, !I Comparison operators :==, eq, <, lt, <=, le, >, gt, >=, ge, !=, ne

I empty: operator that tests for "" or nullI choise: expr?exprTrue:exprFalseYou sent ${empty(param.message)?"no":"a"} message

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 38 / 53

Page 171: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Expression Languageallows for simpler page code

I You may writeHi. The surname you sent is ${param.surname} instead ofHi. The surname you sent is <%= request.getParameter("surname") %>

I Manipulate attributes and parameters easierI ${attrName} is equal to pageContext.getAttribute("attrName")I ${param.paramName} is the same as ${param["paramName"]I ${sessionScope.attrName} sessionScope and param are actuallyjava.util.Map objects. In general:

I ${aMap.aKey} ≡ ${aMap["aKey"]} ≡ ${anArray[anIndex]I ${anObject.anItem} will call anObject.getAnItem()

I Expressions with attributes and parameters (${attr1 + 1 + attr2})I Arithmetic operators: +, -, *, /, %, mod, div

I Logical operators : and, or, not, &&, ||, !I Comparison operators :==, eq, <, lt, <=, le, >, gt, >=, ge, !=, ne

I empty: operator that tests for "" or nullI choise: expr?exprTrue:exprFalseYou sent ${empty(param.message)?"no":"a"} message

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 38 / 53

Page 172: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Expression Languageallows for simpler page code

I You may writeHi. The surname you sent is ${param.surname} instead ofHi. The surname you sent is <%= request.getParameter("surname") %>

I Manipulate attributes and parameters easierI ${attrName} is equal to pageContext.getAttribute("attrName")I ${param.paramName} is the same as ${param["paramName"]I ${sessionScope.attrName} sessionScope and param are actuallyjava.util.Map objects. In general:

I ${aMap.aKey} ≡ ${aMap["aKey"]} ≡ ${anArray[anIndex]I ${anObject.anItem} will call anObject.getAnItem()

I Expressions with attributes and parameters (${attr1 + 1 + attr2})I Arithmetic operators: +, -, *, /, %, mod, divI Logical operators : and, or, not, &&, ||, !

I Comparison operators :==, eq, <, lt, <=, le, >, gt, >=, ge, !=, ne

I empty: operator that tests for "" or nullI choise: expr?exprTrue:exprFalseYou sent ${empty(param.message)?"no":"a"} message

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 38 / 53

Page 173: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Expression Languageallows for simpler page code

I You may writeHi. The surname you sent is ${param.surname} instead ofHi. The surname you sent is <%= request.getParameter("surname") %>

I Manipulate attributes and parameters easierI ${attrName} is equal to pageContext.getAttribute("attrName")I ${param.paramName} is the same as ${param["paramName"]I ${sessionScope.attrName} sessionScope and param are actuallyjava.util.Map objects. In general:

I ${aMap.aKey} ≡ ${aMap["aKey"]} ≡ ${anArray[anIndex]I ${anObject.anItem} will call anObject.getAnItem()

I Expressions with attributes and parameters (${attr1 + 1 + attr2})I Arithmetic operators: +, -, *, /, %, mod, divI Logical operators : and, or, not, &&, ||, !I Comparison operators :==, eq, <, lt, <=, le, >, gt, >=, ge, !=, ne

I empty: operator that tests for "" or nullI choise: expr?exprTrue:exprFalseYou sent ${empty(param.message)?"no":"a"} message

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 38 / 53

Page 174: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Expression Languageallows for simpler page code

I You may writeHi. The surname you sent is ${param.surname} instead ofHi. The surname you sent is <%= request.getParameter("surname") %>

I Manipulate attributes and parameters easierI ${attrName} is equal to pageContext.getAttribute("attrName")I ${param.paramName} is the same as ${param["paramName"]I ${sessionScope.attrName} sessionScope and param are actuallyjava.util.Map objects. In general:

I ${aMap.aKey} ≡ ${aMap["aKey"]} ≡ ${anArray[anIndex]I ${anObject.anItem} will call anObject.getAnItem()

I Expressions with attributes and parameters (${attr1 + 1 + attr2})I Arithmetic operators: +, -, *, /, %, mod, divI Logical operators : and, or, not, &&, ||, !I Comparison operators :==, eq, <, lt, <=, le, >, gt, >=, ge, !=, ne

I empty: operator that tests for "" or null

I choise: expr?exprTrue:exprFalseYou sent ${empty(param.message)?"no":"a"} message

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 38 / 53

Page 175: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Expression Languageallows for simpler page code

I You may writeHi. The surname you sent is ${param.surname} instead ofHi. The surname you sent is <%= request.getParameter("surname") %>

I Manipulate attributes and parameters easierI ${attrName} is equal to pageContext.getAttribute("attrName")I ${param.paramName} is the same as ${param["paramName"]I ${sessionScope.attrName} sessionScope and param are actuallyjava.util.Map objects. In general:

I ${aMap.aKey} ≡ ${aMap["aKey"]} ≡ ${anArray[anIndex]I ${anObject.anItem} will call anObject.getAnItem()

I Expressions with attributes and parameters (${attr1 + 1 + attr2})I Arithmetic operators: +, -, *, /, %, mod, divI Logical operators : and, or, not, &&, ||, !I Comparison operators :==, eq, <, lt, <=, le, >, gt, >=, ge, !=, ne

I empty: operator that tests for "" or nullI choise: expr?exprTrue:exprFalseYou sent ${empty(param.message)?"no":"a"} message

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 38 / 53

Page 176: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Implicit objects in EL

I pageContext: gives access to session, request, response

I ${pageContext.request.contextPath}Results into a call to pageContext.getRequest().getContextPath()

I Attributes: pageScope, requestScope, sessionScope, applicationScope

I ${attribute} will search all scopes, starting with page

I CGI query string parameters: param

I paramValues for multiple-value parameters: paramValues[’a’][0]

I HTTP headers: header

I ${header.host} or ${header["host"]}I headerValues for multiple-value headers:headerValues[’Accept-language’][0]

I HTTP cookies: cookie

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 39 / 53

Page 177: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Implicit objects in EL

I pageContext: gives access to session, request, responseI ${pageContext.request.contextPath}

Results into a call to pageContext.getRequest().getContextPath()

I Attributes: pageScope, requestScope, sessionScope, applicationScope

I ${attribute} will search all scopes, starting with page

I CGI query string parameters: param

I paramValues for multiple-value parameters: paramValues[’a’][0]

I HTTP headers: header

I ${header.host} or ${header["host"]}I headerValues for multiple-value headers:headerValues[’Accept-language’][0]

I HTTP cookies: cookie

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 39 / 53

Page 178: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Implicit objects in EL

I pageContext: gives access to session, request, responseI ${pageContext.request.contextPath}

Results into a call to pageContext.getRequest().getContextPath()

I Attributes: pageScope, requestScope, sessionScope, applicationScope

I ${attribute} will search all scopes, starting with pageI CGI query string parameters: param

I paramValues for multiple-value parameters: paramValues[’a’][0]

I HTTP headers: header

I ${header.host} or ${header["host"]}I headerValues for multiple-value headers:headerValues[’Accept-language’][0]

I HTTP cookies: cookie

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 39 / 53

Page 179: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Implicit objects in EL

I pageContext: gives access to session, request, responseI ${pageContext.request.contextPath}

Results into a call to pageContext.getRequest().getContextPath()

I Attributes: pageScope, requestScope, sessionScope, applicationScopeI ${attribute} will search all scopes, starting with page

I CGI query string parameters: param

I paramValues for multiple-value parameters: paramValues[’a’][0]

I HTTP headers: header

I ${header.host} or ${header["host"]}I headerValues for multiple-value headers:headerValues[’Accept-language’][0]

I HTTP cookies: cookie

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 39 / 53

Page 180: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Implicit objects in EL

I pageContext: gives access to session, request, responseI ${pageContext.request.contextPath}

Results into a call to pageContext.getRequest().getContextPath()

I Attributes: pageScope, requestScope, sessionScope, applicationScopeI ${attribute} will search all scopes, starting with page

I CGI query string parameters: param

I paramValues for multiple-value parameters: paramValues[’a’][0]I HTTP headers: header

I ${header.host} or ${header["host"]}I headerValues for multiple-value headers:headerValues[’Accept-language’][0]

I HTTP cookies: cookie

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 39 / 53

Page 181: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Implicit objects in EL

I pageContext: gives access to session, request, responseI ${pageContext.request.contextPath}

Results into a call to pageContext.getRequest().getContextPath()

I Attributes: pageScope, requestScope, sessionScope, applicationScopeI ${attribute} will search all scopes, starting with page

I CGI query string parameters: paramI paramValues for multiple-value parameters: paramValues[’a’][0]

I HTTP headers: header

I ${header.host} or ${header["host"]}I headerValues for multiple-value headers:headerValues[’Accept-language’][0]

I HTTP cookies: cookie

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 39 / 53

Page 182: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Implicit objects in EL

I pageContext: gives access to session, request, responseI ${pageContext.request.contextPath}

Results into a call to pageContext.getRequest().getContextPath()

I Attributes: pageScope, requestScope, sessionScope, applicationScopeI ${attribute} will search all scopes, starting with page

I CGI query string parameters: paramI paramValues for multiple-value parameters: paramValues[’a’][0]

I HTTP headers: header

I ${header.host} or ${header["host"]}I headerValues for multiple-value headers:headerValues[’Accept-language’][0]

I HTTP cookies: cookie

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 39 / 53

Page 183: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Implicit objects in EL

I pageContext: gives access to session, request, responseI ${pageContext.request.contextPath}

Results into a call to pageContext.getRequest().getContextPath()

I Attributes: pageScope, requestScope, sessionScope, applicationScopeI ${attribute} will search all scopes, starting with page

I CGI query string parameters: paramI paramValues for multiple-value parameters: paramValues[’a’][0]

I HTTP headers: headerI ${header.host} or ${header["host"]}

I headerValues for multiple-value headers:headerValues[’Accept-language’][0]

I HTTP cookies: cookie

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 39 / 53

Page 184: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Implicit objects in EL

I pageContext: gives access to session, request, responseI ${pageContext.request.contextPath}

Results into a call to pageContext.getRequest().getContextPath()

I Attributes: pageScope, requestScope, sessionScope, applicationScopeI ${attribute} will search all scopes, starting with page

I CGI query string parameters: paramI paramValues for multiple-value parameters: paramValues[’a’][0]

I HTTP headers: headerI ${header.host} or ${header["host"]}I headerValues for multiple-value headers:headerValues[’Accept-language’][0]

I HTTP cookies: cookie

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 39 / 53

Page 185: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Implicit objects in EL

I pageContext: gives access to session, request, responseI ${pageContext.request.contextPath}

Results into a call to pageContext.getRequest().getContextPath()

I Attributes: pageScope, requestScope, sessionScope, applicationScopeI ${attribute} will search all scopes, starting with page

I CGI query string parameters: paramI paramValues for multiple-value parameters: paramValues[’a’][0]

I HTTP headers: headerI ${header.host} or ${header["host"]}I headerValues for multiple-value headers:headerValues[’Accept-language’][0]

I HTTP cookies: cookie

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 39 / 53

Page 186: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Custom JSP tag libraries. JSTL

The @taglib directive

<%@ taglib uri="http://www.sometaglibprovider.com/name"prefix="special" %>

<html><body>...<special:makeBold>this text will become bold</special:makeBold><special:timeOfDay format="hh:MM:ss" /></body></html>

Such libraries are implemented using javax.servlet.jsp.tagext.*The most important tag library is the Java Standard Tag Library (JSTL)The normal JSP page does not normally need the whole power of Java, noneed to create classes

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 40 / 53

Page 187: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Custom JSP tag libraries. JSTL . . .

<%@ taglib uri="http://java.sun.com/jstl/core_rt"prefix="c" %>

<c:set var="count" value="34" />${count} <%-- Will print 34 --%><c:forEach items="${orders}" var="order">

<c:out value="${order.id}"/></c:forEach>

c:forEach can iterate in any java.util.Collection, Iterator,Enumeration, etc (see Lecture 2)

It can even iterate in arrays!

<c:if expr="${empty(param.x)}">

The x parameter was not specified</c:if>

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 41 / 53

Page 188: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

The JSTL/EL version of header printing

<%@page contentType="text/html" %><%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %><html><head><title>Welcome!</title></head><body>

You are connecting from ${pageContext.request.remoteHost}<br /><table border="1"><c:forEach items="${pageContext.request.headerNames}"

var="headerName"><tr><td>${headerName}</td><td>${header[headerName]}</td></tr>

</c:forEach></table><dl><%-- bonus --%><c:forEach items="${paramValues}" var="p"><dt>${p.key}</dt><dd><c:forEach items="${p.value}" var="q">${q}

</c:forEach></dd></dl>

</body></html>

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 42 / 53

Page 189: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Comments on JSTL/EL version of header printing

I paramValues is a java.util.Map so each of its items (p) will be of typejava.util.Map.Entry which contain the methods getKey() andgetValue()

I ${p.key} results into a call to p.getKey()

I ${p.value} results into a call to p.getValue() which in this case returns aString[] so we can <c:forEach > through it

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 43 / 53

Page 190: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Comments on JSTL/EL version of header printing

I paramValues is a java.util.Map so each of its items (p) will be of typejava.util.Map.Entry which contain the methods getKey() andgetValue()

I ${p.key} results into a call to p.getKey()

I ${p.value} results into a call to p.getValue() which in this case returns aString[] so we can <c:forEach > through it

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 43 / 53

Page 191: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Comments on JSTL/EL version of header printing

I paramValues is a java.util.Map so each of its items (p) will be of typejava.util.Map.Entry which contain the methods getKey() andgetValue()

I ${p.key} results into a call to p.getKey()

I ${p.value} results into a call to p.getValue() which in this case returns aString[] so we can <c:forEach > through it

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 43 / 53

Page 192: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Three-tier systems

I Three tiers, each running on one machine (or on the same)

I Presentation layer, e.g. Browser (displays user interface from HTML)I Application Layer, e.g. HTTP server with servlets and JSPI Data storage layer, e.g. a database management system (SQL)I Today, most advanced CGI systems (including servlet/JSP) work with a

database where they store the data that they display and change

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 44 / 53

Page 193: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Three-tier systems

I Three tiers, each running on one machine (or on the same)I Presentation layer, e.g. Browser (displays user interface from HTML)

I Application Layer, e.g. HTTP server with servlets and JSPI Data storage layer, e.g. a database management system (SQL)I Today, most advanced CGI systems (including servlet/JSP) work with a

database where they store the data that they display and change

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 44 / 53

Page 194: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Three-tier systems

I Three tiers, each running on one machine (or on the same)I Presentation layer, e.g. Browser (displays user interface from HTML)I Application Layer, e.g. HTTP server with servlets and JSP

I Data storage layer, e.g. a database management system (SQL)I Today, most advanced CGI systems (including servlet/JSP) work with a

database where they store the data that they display and change

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 44 / 53

Page 195: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Three-tier systems

I Three tiers, each running on one machine (or on the same)I Presentation layer, e.g. Browser (displays user interface from HTML)I Application Layer, e.g. HTTP server with servlets and JSPI Data storage layer, e.g. a database management system (SQL)

I Today, most advanced CGI systems (including servlet/JSP) work with adatabase where they store the data that they display and change

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 44 / 53

Page 196: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Three-tier systems

I Three tiers, each running on one machine (or on the same)I Presentation layer, e.g. Browser (displays user interface from HTML)I Application Layer, e.g. HTTP server with servlets and JSPI Data storage layer, e.g. a database management system (SQL)I Today, most advanced CGI systems (including servlet/JSP) work with a

database where they store the data that they display and change

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 44 / 53

Page 197: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL

I SQL (Structured Query Language) Tutorials

I http://www.w3schools.com/sql/default.aspI http://perl.about.com/od/howtousesql/

I Every SQL server has a SQL client where you can type commands

I module add psql on SolarisI psql -h nestor.nada.kth.se (password: <yourPassword> )I you end up in “your own” databaseI End all commands with ’;’

I Creating a table

I CREATE TABLE course (id integer primary key,name varchar(255), credits real)

I id can be used to uniquely identify the course (primary key)I \d course shows the structure of the tableI \d shows the names of all tables in the database

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 45 / 53

Page 198: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL

I SQL (Structured Query Language) TutorialsI http://www.w3schools.com/sql/default.asp

I http://perl.about.com/od/howtousesql/

I Every SQL server has a SQL client where you can type commands

I module add psql on SolarisI psql -h nestor.nada.kth.se (password: <yourPassword> )I you end up in “your own” databaseI End all commands with ’;’

I Creating a table

I CREATE TABLE course (id integer primary key,name varchar(255), credits real)

I id can be used to uniquely identify the course (primary key)I \d course shows the structure of the tableI \d shows the names of all tables in the database

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 45 / 53

Page 199: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL

I SQL (Structured Query Language) TutorialsI http://www.w3schools.com/sql/default.aspI http://perl.about.com/od/howtousesql/

I Every SQL server has a SQL client where you can type commands

I module add psql on SolarisI psql -h nestor.nada.kth.se (password: <yourPassword> )I you end up in “your own” databaseI End all commands with ’;’

I Creating a table

I CREATE TABLE course (id integer primary key,name varchar(255), credits real)

I id can be used to uniquely identify the course (primary key)I \d course shows the structure of the tableI \d shows the names of all tables in the database

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 45 / 53

Page 200: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL

I SQL (Structured Query Language) TutorialsI http://www.w3schools.com/sql/default.aspI http://perl.about.com/od/howtousesql/

I Every SQL server has a SQL client where you can type commands

I module add psql on SolarisI psql -h nestor.nada.kth.se (password: <yourPassword> )I you end up in “your own” databaseI End all commands with ’;’

I Creating a table

I CREATE TABLE course (id integer primary key,name varchar(255), credits real)

I id can be used to uniquely identify the course (primary key)I \d course shows the structure of the tableI \d shows the names of all tables in the database

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 45 / 53

Page 201: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL

I SQL (Structured Query Language) TutorialsI http://www.w3schools.com/sql/default.aspI http://perl.about.com/od/howtousesql/

I Every SQL server has a SQL client where you can type commandsI module add psql on Solaris

I psql -h nestor.nada.kth.se (password: <yourPassword> )I you end up in “your own” databaseI End all commands with ’;’

I Creating a table

I CREATE TABLE course (id integer primary key,name varchar(255), credits real)

I id can be used to uniquely identify the course (primary key)I \d course shows the structure of the tableI \d shows the names of all tables in the database

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 45 / 53

Page 202: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL

I SQL (Structured Query Language) TutorialsI http://www.w3schools.com/sql/default.aspI http://perl.about.com/od/howtousesql/

I Every SQL server has a SQL client where you can type commandsI module add psql on SolarisI psql -h nestor.nada.kth.se (password: <yourPassword> )

I you end up in “your own” databaseI End all commands with ’;’

I Creating a table

I CREATE TABLE course (id integer primary key,name varchar(255), credits real)

I id can be used to uniquely identify the course (primary key)I \d course shows the structure of the tableI \d shows the names of all tables in the database

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 45 / 53

Page 203: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL

I SQL (Structured Query Language) TutorialsI http://www.w3schools.com/sql/default.aspI http://perl.about.com/od/howtousesql/

I Every SQL server has a SQL client where you can type commandsI module add psql on SolarisI psql -h nestor.nada.kth.se (password: <yourPassword> )I you end up in “your own” database

I End all commands with ’;’I Creating a table

I CREATE TABLE course (id integer primary key,name varchar(255), credits real)

I id can be used to uniquely identify the course (primary key)I \d course shows the structure of the tableI \d shows the names of all tables in the database

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 45 / 53

Page 204: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL

I SQL (Structured Query Language) TutorialsI http://www.w3schools.com/sql/default.aspI http://perl.about.com/od/howtousesql/

I Every SQL server has a SQL client where you can type commandsI module add psql on SolarisI psql -h nestor.nada.kth.se (password: <yourPassword> )I you end up in “your own” databaseI End all commands with ’;’

I Creating a table

I CREATE TABLE course (id integer primary key,name varchar(255), credits real)

I id can be used to uniquely identify the course (primary key)I \d course shows the structure of the tableI \d shows the names of all tables in the database

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 45 / 53

Page 205: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL

I SQL (Structured Query Language) TutorialsI http://www.w3schools.com/sql/default.aspI http://perl.about.com/od/howtousesql/

I Every SQL server has a SQL client where you can type commandsI module add psql on SolarisI psql -h nestor.nada.kth.se (password: <yourPassword> )I you end up in “your own” databaseI End all commands with ’;’

I Creating a table

I CREATE TABLE course (id integer primary key,name varchar(255), credits real)

I id can be used to uniquely identify the course (primary key)I \d course shows the structure of the tableI \d shows the names of all tables in the database

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 45 / 53

Page 206: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL

I SQL (Structured Query Language) TutorialsI http://www.w3schools.com/sql/default.aspI http://perl.about.com/od/howtousesql/

I Every SQL server has a SQL client where you can type commandsI module add psql on SolarisI psql -h nestor.nada.kth.se (password: <yourPassword> )I you end up in “your own” databaseI End all commands with ’;’

I Creating a tableI CREATE TABLE course (id integer primary key,

name varchar(255), credits real)

I id can be used to uniquely identify the course (primary key)I \d course shows the structure of the tableI \d shows the names of all tables in the database

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 45 / 53

Page 207: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL

I SQL (Structured Query Language) TutorialsI http://www.w3schools.com/sql/default.aspI http://perl.about.com/od/howtousesql/

I Every SQL server has a SQL client where you can type commandsI module add psql on SolarisI psql -h nestor.nada.kth.se (password: <yourPassword> )I you end up in “your own” databaseI End all commands with ’;’

I Creating a tableI CREATE TABLE course (id integer primary key,

name varchar(255), credits real)I id can be used to uniquely identify the course (primary key)

I \d course shows the structure of the tableI \d shows the names of all tables in the database

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 45 / 53

Page 208: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL

I SQL (Structured Query Language) TutorialsI http://www.w3schools.com/sql/default.aspI http://perl.about.com/od/howtousesql/

I Every SQL server has a SQL client where you can type commandsI module add psql on SolarisI psql -h nestor.nada.kth.se (password: <yourPassword> )I you end up in “your own” databaseI End all commands with ’;’

I Creating a tableI CREATE TABLE course (id integer primary key,

name varchar(255), credits real)I id can be used to uniquely identify the course (primary key)I \d course shows the structure of the table

I \d shows the names of all tables in the database

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 45 / 53

Page 209: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL

I SQL (Structured Query Language) TutorialsI http://www.w3schools.com/sql/default.aspI http://perl.about.com/od/howtousesql/

I Every SQL server has a SQL client where you can type commandsI module add psql on SolarisI psql -h nestor.nada.kth.se (password: <yourPassword> )I you end up in “your own” databaseI End all commands with ’;’

I Creating a tableI CREATE TABLE course (id integer primary key,

name varchar(255), credits real)I id can be used to uniquely identify the course (primary key)I \d course shows the structure of the tableI \d shows the names of all tables in the database

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 45 / 53

Page 210: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL . . .

I Inserting records

I INSERT INTO course VALUES (5, ’DD1335’, 7.5)

I Changing fields

I UPDATE course set credits=4 WHERE id=5I UPDATE course set credits=5 WHERE name like ’DD133%’

I Removing records

I DELETE FROM course WHERE id=5I DELETE FROM course WHERE name=’DD1335’

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 46 / 53

Page 211: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL . . .

I Inserting recordsI INSERT INTO course VALUES (5, ’DD1335’, 7.5)

I Changing fields

I UPDATE course set credits=4 WHERE id=5I UPDATE course set credits=5 WHERE name like ’DD133%’

I Removing records

I DELETE FROM course WHERE id=5I DELETE FROM course WHERE name=’DD1335’

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 46 / 53

Page 212: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL . . .

I Inserting recordsI INSERT INTO course VALUES (5, ’DD1335’, 7.5)

I Changing fields

I UPDATE course set credits=4 WHERE id=5I UPDATE course set credits=5 WHERE name like ’DD133%’

I Removing records

I DELETE FROM course WHERE id=5I DELETE FROM course WHERE name=’DD1335’

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 46 / 53

Page 213: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL . . .

I Inserting recordsI INSERT INTO course VALUES (5, ’DD1335’, 7.5)

I Changing fieldsI UPDATE course set credits=4 WHERE id=5

I UPDATE course set credits=5 WHERE name like ’DD133%’

I Removing records

I DELETE FROM course WHERE id=5I DELETE FROM course WHERE name=’DD1335’

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 46 / 53

Page 214: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL . . .

I Inserting recordsI INSERT INTO course VALUES (5, ’DD1335’, 7.5)

I Changing fieldsI UPDATE course set credits=4 WHERE id=5I UPDATE course set credits=5 WHERE name like ’DD133%’

I Removing records

I DELETE FROM course WHERE id=5I DELETE FROM course WHERE name=’DD1335’

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 46 / 53

Page 215: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL . . .

I Inserting recordsI INSERT INTO course VALUES (5, ’DD1335’, 7.5)

I Changing fieldsI UPDATE course set credits=4 WHERE id=5I UPDATE course set credits=5 WHERE name like ’DD133%’

I Removing records

I DELETE FROM course WHERE id=5I DELETE FROM course WHERE name=’DD1335’

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 46 / 53

Page 216: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL . . .

I Inserting recordsI INSERT INTO course VALUES (5, ’DD1335’, 7.5)

I Changing fieldsI UPDATE course set credits=4 WHERE id=5I UPDATE course set credits=5 WHERE name like ’DD133%’

I Removing recordsI DELETE FROM course WHERE id=5

I DELETE FROM course WHERE name=’DD1335’

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 46 / 53

Page 217: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Databases: SQL . . .

I Inserting recordsI INSERT INTO course VALUES (5, ’DD1335’, 7.5)

I Changing fieldsI UPDATE course set credits=4 WHERE id=5I UPDATE course set credits=5 WHERE name like ’DD133%’

I Removing recordsI DELETE FROM course WHERE id=5I DELETE FROM course WHERE name=’DD1335’

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 46 / 53

Page 218: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Simple SQL queries

Q How many credits does course DD1335 have?

A SELECT credits FROM course WHERE name=’DD1335’

Q Which courses have names starting with ’DD1’, and what credits do they have?

A SELECT name, credits FROM course WHERE name like ’DD%’

I Make a table with students

I CREATE TABLE student(id integer, name varchar(255),startyear integer)

I A table with course attendance: a many-to-many relationship

I CREATE TABLE course_attendance (student_id integer, course_id integer,lab1 integer, lab2 integer, project integer,PRIMARY KEY (student_id, course_id)

)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 47 / 53

Page 219: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Simple SQL queries

Q How many credits does course DD1335 have?

A SELECT credits FROM course WHERE name=’DD1335’

Q Which courses have names starting with ’DD1’, and what credits do they have?

A SELECT name, credits FROM course WHERE name like ’DD%’

I Make a table with students

I CREATE TABLE student(id integer, name varchar(255),startyear integer)

I A table with course attendance: a many-to-many relationship

I CREATE TABLE course_attendance (student_id integer, course_id integer,lab1 integer, lab2 integer, project integer,PRIMARY KEY (student_id, course_id)

)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 47 / 53

Page 220: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Simple SQL queries

Q How many credits does course DD1335 have?

A SELECT credits FROM course WHERE name=’DD1335’

Q Which courses have names starting with ’DD1’, and what credits do they have?

A SELECT name, credits FROM course WHERE name like ’DD%’

I Make a table with students

I CREATE TABLE student(id integer, name varchar(255),startyear integer)

I A table with course attendance: a many-to-many relationship

I CREATE TABLE course_attendance (student_id integer, course_id integer,lab1 integer, lab2 integer, project integer,PRIMARY KEY (student_id, course_id)

)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 47 / 53

Page 221: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Simple SQL queries

Q How many credits does course DD1335 have?

A SELECT credits FROM course WHERE name=’DD1335’

Q Which courses have names starting with ’DD1’, and what credits do they have?

A SELECT name, credits FROM course WHERE name like ’DD%’

I Make a table with students

I CREATE TABLE student(id integer, name varchar(255),startyear integer)

I A table with course attendance: a many-to-many relationship

I CREATE TABLE course_attendance (student_id integer, course_id integer,lab1 integer, lab2 integer, project integer,PRIMARY KEY (student_id, course_id)

)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 47 / 53

Page 222: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Simple SQL queries

Q How many credits does course DD1335 have?

A SELECT credits FROM course WHERE name=’DD1335’

Q Which courses have names starting with ’DD1’, and what credits do they have?

A SELECT name, credits FROM course WHERE name like ’DD%’

I Make a table with students

I CREATE TABLE student(id integer, name varchar(255),startyear integer)

I A table with course attendance: a many-to-many relationship

I CREATE TABLE course_attendance (student_id integer, course_id integer,lab1 integer, lab2 integer, project integer,PRIMARY KEY (student_id, course_id)

)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 47 / 53

Page 223: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Simple SQL queries

Q How many credits does course DD1335 have?

A SELECT credits FROM course WHERE name=’DD1335’

Q Which courses have names starting with ’DD1’, and what credits do they have?

A SELECT name, credits FROM course WHERE name like ’DD%’

I Make a table with studentsI CREATE TABLE student(id integer, name varchar(255),startyear integer)

I A table with course attendance: a many-to-many relationship

I CREATE TABLE course_attendance (student_id integer, course_id integer,lab1 integer, lab2 integer, project integer,PRIMARY KEY (student_id, course_id)

)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 47 / 53

Page 224: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Simple SQL queries

Q How many credits does course DD1335 have?

A SELECT credits FROM course WHERE name=’DD1335’

Q Which courses have names starting with ’DD1’, and what credits do they have?

A SELECT name, credits FROM course WHERE name like ’DD%’

I Make a table with studentsI CREATE TABLE student(id integer, name varchar(255),startyear integer)

I A table with course attendance: a many-to-many relationship

I CREATE TABLE course_attendance (student_id integer, course_id integer,lab1 integer, lab2 integer, project integer,PRIMARY KEY (student_id, course_id)

)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 47 / 53

Page 225: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Simple SQL queries

Q How many credits does course DD1335 have?

A SELECT credits FROM course WHERE name=’DD1335’

Q Which courses have names starting with ’DD1’, and what credits do they have?

A SELECT name, credits FROM course WHERE name like ’DD%’

I Make a table with studentsI CREATE TABLE student(id integer, name varchar(255),startyear integer)

I A table with course attendance: a many-to-many relationshipI CREATE TABLE course_attendance (

student_id integer, course_id integer,lab1 integer, lab2 integer, project integer,PRIMARY KEY (student_id, course_id)

)

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 47 / 53

Page 226: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Simple SQL queries . . .

Q Which students joined the course DD1335?

A SELECT s.nameFROM course c, course_attendance ca, student sWHERE ca.student_id=s.idAND c.id=ca.course_id and c.name=’DD1335’

Q How many students joined the course DD1335?

A SELECT count(ca.student_id)FROM course c, course_attendance caWHERE c.id=ca.course_id and c.name=’DD1335’

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 48 / 53

Page 227: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Simple SQL queries . . .

Q Which students joined the course DD1335?

A SELECT s.nameFROM course c, course_attendance ca, student sWHERE ca.student_id=s.idAND c.id=ca.course_id and c.name=’DD1335’

Q How many students joined the course DD1335?

A SELECT count(ca.student_id)FROM course c, course_attendance caWHERE c.id=ca.course_id and c.name=’DD1335’

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 48 / 53

Page 228: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Simple SQL queries . . .

Q Which students joined the course DD1335?

A SELECT s.nameFROM course c, course_attendance ca, student sWHERE ca.student_id=s.idAND c.id=ca.course_id and c.name=’DD1335’

Q How many students joined the course DD1335?

A SELECT count(ca.student_id)FROM course c, course_attendance caWHERE c.id=ca.course_id and c.name=’DD1335’

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 48 / 53

Page 229: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Simple SQL queries . . .

Q Which students joined the course DD1335?

A SELECT s.nameFROM course c, course_attendance ca, student sWHERE ca.student_id=s.idAND c.id=ca.course_id and c.name=’DD1335’

Q How many students joined the course DD1335?

A SELECT count(ca.student_id)FROM course c, course_attendance caWHERE c.id=ca.course_id and c.name=’DD1335’

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 48 / 53

Page 230: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Java as SQL client: JDBC

import java.sql.*;public class JDBCCode{

public static void main(String args[]){try {Class.forName("org.postgresql.Driver" ); // load driver

} catch (ClassNotFoundException cfn){System.out.println("Problem loading driver");System.exit(1);

}try{//Establish a connection to the database, second

//argument is the name of the user and the third//argument is a password (blank)Connection con = DriverManager.getConnection("jdbc:postgresql://nestor.nada.kth.se:5432/dbname","username", "userPassword");

//Create a statement objectStatement selectStatement = con.createStatement();

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 49 / 53

Page 231: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

Java as SQL client: JDBC . . .

//Execute the SQL select statementResultSet rs =selectStatement.executeQuery ("SELECT name, startyear FROM " +"student WHERE name like ’John%’");

while(rs.next())System.out.println ("Name = "+ rs.getString(1) +

"Salary = "+ rs.getInt(2));selectStatement.close();con.close();rs.close();

} catch(Exception e) {System.out.println("Problems with access to database");e.printStackTrace();System.exit(2);

}}

}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 50 / 53

Page 232: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JDBC: changing data

try {Class.forName(driverName);

}catch (ClassNotFoundException cfn) {//Problem with driver, error message and return//to operating system with status value 1System.out.println("Problem loading driver");System.exit(1);

}try {Connection con = DriverManager.getConnection(

"jdbc:postgresql://nestor.nada.kth.se:5432/dbname","username", "userPassword");

Statement updateStatement = con.createStatement();String studentName ="...", startYear = "...";

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 51 / 53

Page 233: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JDBC: changing data . . .

int noOfRows =updateStatement.executeUpdate (

"INSERT INTO student (name, startYear)" +"VALUES(" + "’" + studentName + "’," + startYear);//Execute the SQL insert statement

} catch(SQLException sqe) {System.out.println("Problem updating database");

}

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 52 / 53

Page 234: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JDBC . . .

Sun’s JDBC tutorial

http://java.sun.com/docs/books/tutorial/jdbc/index.html

More info on the net

http://www.javaworld.com/javaworld/jw-051996/jw-05-shah.htmlhttp://www.javaworld.com/channel_content/jwjdbc-index.shtml

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 53 / 53

Page 235: €¦ · Server Side Internet Programming Dynamic web content Content generated from CGI or application servers is different from HTTP Instead of static content you may

Server Side Internet Programming

JDBC . . .

Sun’s JDBC tutorial

http://java.sun.com/docs/books/tutorial/jdbc/index.html

More info on the net

http://www.javaworld.com/javaworld/jw-051996/jw-05-shah.htmlhttp://www.javaworld.com/channel_content/jwjdbc-index.shtml

DD1335 (Lecture 6) Basic Internet Programming Spring 2010 53 / 53