Introduction to Java Server-Side Technologies: Servlets and JSP - PowerPoint PPT Presentation

About This Presentation
Title:

Introduction to Java Server-Side Technologies: Servlets and JSP

Description:

Servlets are Java programs that can be run dynamically from a Web Server ... content created by a servlet will lead to fetching a new content from the server ... – PowerPoint PPT presentation

Number of Views:2243
Avg rating:3.0/5.0
Slides: 88
Provided by: csHu
Category:

less

Transcript and Presenter's Notes

Title: Introduction to Java Server-Side Technologies: Servlets and JSP


1
Introduction to JavaServer-Side
TechnologiesServlets and JSP
  • Representation and Management of Data on the
    Internet, 2007
  • CS Department, HUJI

Sun tutorial to servlets
Sun JSP Tutorial
2
Introduction to Servlets
3
What is a Servlet?
  • Servlets are Java programs that can be run
    dynamically from a Web Server
  • Servlets are a server-side technology
  • A Servlet is an intermediating layer between an
    HTTP request of a client and the data stored on
    the Web server

4
A Java Servlet
Servlet
Web browser
Web server
5
An Example
  • In the following example, the local server calls
    the Servlet TimeServlet with an argument supplied
    by the user
  • This example, as well as all the examples in this
    lecture can be found at http//inferno5000/(acce
    ssible only from CS!)

6
Reload / Refresh Servlet Result
  • Trying to refresh the content created by a
    servlet will lead to fetching a new content from
    the server
  • This is not the case with static resources
  • Response headers of a static (as opposed to a
    servlet generated) resource contain
  • Etag, Last-Modified
  • While trying to refresh a resource
  • Cache-Contol max-age0 is sent and that means
    the server/proxies will try to revalidate the
    resource
  • Only in the static case the resource could be
    revalidated against some values the client holds
  • So in the static case the client sends the Etag
    value attached to the If-None-Match header, and
    the Last-Modified value is sent in
    If-Modified-Since

Clear the cache, open and then reload
/dbi/Time.htmlOpen and reload /dbi/initCompare
the headers sent and received.
7
What can Servlets do?
  • Read data sent by the user (e.g., form data)
  • Look up other information about the request in
    the HTTP request (e.g. authentication data,
    cookies, etc.)
  • Generate the result (may do this by talking to a
    database, file system, etc.)
  • Format the result as a document (e.g., convert it
    into HTML format)
  • Set the appropriate HTTP response parameters
    (e.g. cookies, content-type, etc.)
  • Send the resulting document to the user

8
Supporting Servlets
  • To run Servlets, the Web server must support them
  • Apache Tomcat
  • Also functions as a module for other Apache
    servers
  • Sun Java System Web Server and Java System
    Application Server
  • IBM's WebSphere Application Server
  • BEAs Weblogic Application Server
  • Macromedias Jrun an engine that can be added
    to Microsofts IIS, Apaches Web servers and
    more...
  • Oracle Application Server

9
Creating a Simple Servlet
Read more about the Servlet Interface
10
The Servlet Interface
  • Java provides the interface Servlet
  • Specific Servlets implement this interface
  • Whenever the Web server is asked to invoke a
    specific Servlet, it activates the method
    service() of an instance of this Servlet

11
HTTP Request Methods
  • POST - application data sent in the request body
  • GET - application data sent in the URL
  • HEAD - client sees only header of response
  • PUT - place documents directly on server
  • DELETE - opposite of PUT
  • TRACE - debugging aid
  • OPTIONS - list communication options

12
Servlet Hierarchy
Called by the servlet container to allow the
servlet to respond to any request method
service(ServletRequest,
ServletResponse)
Servlet
Generic Servlet
A generic, protocol-independent class,
implementing Servlet
HttpServlet
doGet(HttpServletRequest , HttpServletResponse) do
Post(HttpServletRequest HttpServletResponse) doPut
doTrace
YourOwnServlet
Called by the servlet container to allow the
servlet to respond to a specific request method
13
Class HttpServlet
  • Class HttpServlet handles requests and responses
    of HTTP protocol
  • The service() method of HttpServlet checks the
    request method and calls the appropriate
    HttpServlet method
  • doGet, doPost, doPut, doDelete, doTrace,
    doOptions or doHead
  • This class is abstract

That is, a class that can be sub-classed but not
instantiated. This class methods however are not
abstract
Read more about the HttpServlet Class
14
Creating a Servlet
  • Extend the class HTTPServlet
  • Implement doGet or doPost (or both also maybe
    others)
  • Both methods get
  • HttpServletRequest methods for getting form
    (query) data, HTTP request headers, etc.
  • HttpServletResponse methods for setting HTTP
    status codes, HTTP response headers, and get an
    output stream used for sending data to the client
  • Many times, we implement doPost by calling doGet,
    or vice-versa

Check the result of an empty implementationhttp/
/localhost/dbi/empty
You could also run CheckRequestServlet lthostgt
/dbi/empty ltportgt ltOTHER-METHODSgt
15
HelloWorld.java
import java.io. import javax.servlet. import
javax.servlet.http. public class
TextHelloWorld extends HttpServlet public
void doGet(HttpServletRequest req,
HttpServletResponse res) throws ServletException,
IOException PrintWriter out
res.getWriter() out.println("Hello
World") public void doPost(HttpServletReque
st req, HttpServletResponse res) throws
ServletException, IOException doGet(req,
res)
16
Returning HTML
  • By default, no content type is given with a
    response
  • In order to generate HTML
  • Tell the browser you are sending HTML, by setting
    the Content-Type header (response.setContentType()
    )
  • Modify the printed text to create a legal HTML
    page
  • You should set all headers before writing the
    document content. Can you guess why?

As you can check using LiveHttpHeaders plug-in
Download LiveHttpHeaders Extension
17
HelloWorld.java
public class HelloWorld extends HttpServlet
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException PrintWriter
out response.getWriter()
out.println("lthtmlgtltheadgtlttitlegtHello
Worldlt/titlegtlt/headgt\n") out.println("ltbodygt"
) out.println("lth2gt" new java.util.Date()
"lt/h2gt\n") out.println("lth1gtHello
Worldlt/h1gt\nlt/bodygtlt/htmlgt")
Content type wasnt set, but the browser will
understand )dont rely on this in a real product
/ the project)
18
Configuring the Server
  • More on this in when we Tomcat in depth

ltweb-appgt ltservletgt
ltservlet-namegthellolt/servlet-namegt
ltservlet-classgtHelloWorldlt/servlet-classgt
lt/servletgt ltservlet-mappinggt
ltservlet-namegthellolt/servlet-namegt
lturl-patterngt/hellolt/url-patterngt
lt/servlet-mappinggtlt/web-appgt lt/web-appgt
myApp/WEB-INF/web.xml
http//inferno5000/dbi/hello
19
Getting Information From the Request
20
An HTTP Request Example
  • GET /default.asp HTTP/1.0
  • Accept image/gif, image/x-xbitmap, image/jpeg,
    image/png, /
  • Accept-Language en
  • Connection Keep-Alive
  • Host magni.grainger.uiuc.edu
  • User-Agent Mozilla/4.04 en (WinNT I Nav)
  • CookieSITESERVERID8dac8e0455f4890da220ada8b76f
    ASPSESSIONIDGGQGGGAFJLKHAEICGAHEPPMJKMLDEM
  • Accept-Charset iso-8859-1,,utf-8

21
Getting HTTP Data
  • Values of the HTTP request can be accessed
    through the HttpServletRequest object
  • Get the value of the header hdr using
    getHeader("hdr") of the request argument
  • Get all header names getHeaderNames()
  • Methods for specific request information
    getCookies, getContentLength, getContentType,
    getMethod, getProtocol, etc.

Read more about the HttpRequest Interface
22
public class ShowRequestHeaders extends
HttpServlet public void doGet(HttpServletReques
t request,HttpServletResponse response) throws
ServletException, IOException
response.setContentType("text/html")
PrintWriter out response.getWriter() String
title "Servlet Example Showing Request
Headers" out.println(
"lthtmlgtltheadgtlttitlegt" title
"lt/titlegtlt/headgtltbodygt\n" "lth1gt"
title "lt/h1gt\n" "lth2gtRequest Method
"request.getMethod()"lt/h2gt" "lth2gtRequest
URI "request.getRequestURI()"lt/h2gt"
"lth2gtServletPath "request.getServletPath()"lt/h2
gt" "lth2gtRequest Protocol
"request.getProtocol()"lt/h2gt" "lttable
border\"1\"gt\n" "lttrgtltthgtHeader
Namelt/thgtltthgtHeader Valuelt/thgtlt/trgt")
23
Enumeration headerNames request.getHeaderNames
() while (headerNames.hasMoreElements())
String headerName (String) headerNames.nextEle
ment() out.println("lttrgtlttdgt" headerName
"lt/tdgt" "lttdgt"request.getHeader(heade
rName)"lt/tdgtlt/trgt") out.println("lt/table
gt\nlt/bodygtlt/htmlgt") public void
doPost(HttpServletRequest request,HttpServletRespo
nse response) throws ServletException,
IOException doGet(request, response)

Compare the results of the different browsers
24
User Input in HTML
  • Using HTML forms, we can pass parameters to Web
    applications
  • ltform action methodgt lt/formgt comprises a
    single form
  • action the address of the application to which
    the form data is sent
  • method the HTTP method to use when passing
    parameters to the application (e.g. get or post)

25
The ltinputgt Tag
  • Inside a form, INPUT tags define fields for data
    entry
  • Standard input types include buttons,
    checkboxes, password fields, radio buttons, text
    fields, image-buttons, text areas, hidden fields,
    etc.
  • Each one associates a single (string) value with
    a named parameter

26
GET Example
ltform method"get" action"http//www.google.com
/search"gt ltpgtltinput name"q" type"text" /gt
ltinput type"submit" /gt ltinput
type"reset" /gt lt/pgt lt/formgt
http//www.google.com/search?qservlets
27
POST Example
ltform method"post" action"http//www.google.co
m/search"gt ltpgtltinput name"q" type"text" /gt
ltinput type"submit" /gt ltinput
type"reset" /gt lt/pgt lt/formgt
Google doesnt support POST!(try to guess why)
POST /search HTTP/1.1 Host www.google.com Conte
nt-type application/x-www-form-urlencoded Content
-length 10 ltempty-linegt qservlets
28
Getting the Parameter Values
  • To get the (first) value of a parameter named x
  • req.getParameter("x")
  • where req is the service request argument
  • If there can be multiple values for the
    parameter
  • req.getParameterValues("x")
  • To get parameter names
  • req.getParameterNames()

29
lthtmlgtltheadgtlttitlegtSending Parameterslt/titlegt
ltstyle type"text/css"gt
pdisplaytable-row spandisplaytable-cell
padding0.2em lt/stylegtlt/headgtltbodygt
lth1gtPlease enter the parameterslt/h1gt
ltform actionsetcolors" method"get"gt
ltpgtBackground color ltspangtltinput
type"text" name"bgcolor"/gtlt/spangtlt/pgt
ltpgtFont color ltspangtltinput
type"text" name"fgcolor"/gt lt/spangt lt/pgt
ltpgtFont size ltspangtltinput
type"text" name"size"/gtlt/spangtlt/pgt
lth2gt ltinput type"submit"
value"Submit Parameters"/gtlt/h2gt
lt/formgt lt/bodygtlt/htmlgt
parameters.html
30
An Example (cont)
public class SetColors extends HttpServlet
public void doGet(HttpServletRequest
request,HttpServletResponse response)
throws ServletException, IOException
response.setContentType("text/html")
PrintWriter out response.getWriter() String
bg request.getParameter("bgcolor") String
fg request.getParameter("fgcolor") String
size request.getParameter("size")
SetColors.java
31
An Example (cont)
out.println("lthtmlgtltheadgtlttitlegtSet Colors
Example" "lt/titlegtlt/headgt")
out.println("ltbody style\"color" fg
"background-color" bg
"font-size" size "px\"gt")
out.println("lth1gtSet Colors Examplelt/h1gt")
out.println("ltpgtYou requested a background color
" bg "lt/pgt") out.println("ltpgtYou
requested a font color " fg "lt/pgt")
out.println("ltpgtYou requested a font size "
size "lt/pgt") out.println("lt/bodygtlt/htmlgt")

SetColors.java
32
Handling Post
  • You don't have to do anything different to read
    POST data instead of GET data. (Cool!)

ltform action"localhost/dbi/SetColors"
method"post"gt
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException doGet(request,
response)
33
Creating the Response of the Servlet
34
HTTP Response
  • The response includes
  • Status line version, status code, status message
  • Response headers
  • Empty line
  • Content

HTTP/1.1 200 OK Content-Type text/html Content-Le
ngth 89 Server Apache-Coyote/1.1 ltHTMLgtltHEADgtltT
ITLEgtHELLO WORLDlt/TITLEgtlt/HEADgt ltBODYgtltH1gtHello
World lt/H1gtlt/BODYgtlt/HTMLgt
Read more about the HttpResponse Interface
35
Setting the Response Status
  • Use the following HttpServletResponse methods to
    set the response status
  • setStatus(int sc)
  • Use when there is no error, like 201 (created)
  • No need to send 200 OK explicitly
  • sendError(sc), sendError(sc, message)
  • Use in erroneous situations, like 400 (bad
    request)
  • The server may return a formatted message
  • sendRedirect(String location)
  • As opposed to forwarding which is done within the
    server side completely, on redirect the client
    gets the Location header and a special code
    (302) and sends another request to the new
    location

http//localhost/dbi/redirect
36
Setting the Response Status
  • Class HTTPServletResponse has static integer
    variables for popular status codes
  • for example
  • SC_OK(200), SC_NOT_MODIFIED(304),
  • SC_UNAUTHORIZED(401), SC_BAD_REQUEST(400)
  • Status code 200 (OK) is the default

37
Setting Response Headers
  • Use the following HTTPServletResponse methods to
    set the response headers
  • setHeader(String hdr, String value),
    setIntHeader(String hdr, int value)
  • If a header with the same name exists, it is
    overridden.
  • addHeader(String hdr, String value),
    addIntHeader(String hdr, int value)
  • The header is added even if another header with
    the same name exists.

38
Specific Response Headers
  • Class HTTPServletResponse provides setters for
    some specific headers
  • setContentType
  • setContentLength
  • automatically set if the entire response fits
    inside the response buffer
  • setDateHeader
  • setCharacterEncoding

39
More Header Methods
  • containsHeader(String header)
  • Check existence of a header in the response
  • addCookie(Cookie)
  • sendRedirect(String url)
  • automatically sets the Location header
  • Do not write into the response after sendError or
    sendRedirect

Check the result of writing a response after
sendError/sendRedirect http//localhost/dbi/bad.ht
ml
40
The Response Content Buffer
  • The response body is buffered
  • Data is sent to the client when the buffer is
    full or the buffer is explicitly flushed
  • Once the first data chunk is sent to the client,
    the response is committed
  • You cannot set the response line nor change the
    headers. Such operations are either ignored or
    cause an exception to be thrown

Check the result of sendError/setContentType
getting commited http//localhost/dbi/bad.html
41
Buffer Related Methods
  • setBufferSize, getBufferSize
  • What are the advantages of using big buffers?
    what are the disadvantages?
  • flushBuffer
  • resetBuffer
  • Clears the unsent body content
  • reset
  • Clears any data that exists in the buffer as well
    as the status code and headers (if not yet sent)
  • isCommitted

42
Supporting HTTP Methods
43
The HEAD Method
  • The simple implementation of doHead is executing
    doGet and excluding the response body
  • In addition, the size of the body is calculated
    and added to the headers
  • You do not have to override this method
  • Why would one want to override this method?
  • The content size is not calculated in servlets as
    opposed to static html resources

Check the default implementation of doHead Run
CheckRequestServlet ltHOSTgt /dbi/init ltPORTgt GET
Run CheckRequestServlet ltHOSTgt /dbi/init ltPORTgt
HEADRun CheckRequestServlet ltHOSTgt
/dbi/Time.html ltPORTgt HEAD (shorter output yet
its length is calculated)In class
HOSTlocalhost, PORT80
44
The HEAD Method (cont)
  • The right way to implement doHead is
  • Dont implement doHead explicitly
  • Instead, check within the doGet call, what is the
    requested method (httpServletRequest.getMethod())
  • If its HEAD do the same without returning the
    content
  • This way the results of HEAD / GET requests are
    similar as they should be

45
OPTIONS and TRACE
  • doOptions returns the supported methods
  • For example, if you override doGet then the
    following header will be returned
  • Allow GET, HEAD, TRACE, OPTIONS
  • doTrace returns the request itself in the body of
    the message, for debugging purposes
  • You usually do not override these methods
  • Override doOptions if you offer some new methods

46
Unsupported Methods
  • By default, the methods doPost, doGet, doPut and
    doDelete return an error status code 405 with the
    message
  • HTTP method XXX is not supported by this URL
  • doHead calls doGet and therefore leads to the
    same result but with unsupported method GET
  • In particular, you have to override doGet and
    doPost if you want to return an appropriate
    response for these methods
  • Many applications support only one of GET/POST

47
Servlet Life Cycle
48
Servlet Life Cycle
  • When the servlet mapped URL is requested, the
    server loads the Servlet class and initializes
    one instance of it
  • Each client request is handled by the Serlvet
    instance in a separate thread
  • The server can remove the Servlet
  • The Servlet can remain loaded to handle
    additional requests

49
Servlet Life Cycle
  • When the Servlet in instantiated, its method
    init() is invoked (in our case, by Tomcat)
  • External parameters are supplied
  • Upon a request, its method service() is invoked
  • Before the Servlet removal, its method destroy()
    is invoked

50
Servlet Life Cycle
Deal with requests call the service method
Calling the init method
Destroy the Servlet call the destroy method
Servlet Instance
ServletConfig
In our case by servlet we refer to any class
extending HttpServlet
Garbage Collection
Servlet Class
51
Initializing Servlets
  • The method init has a parameter of type
    ServletConfig
  • ServletConfig has methods to get external
    initialization parameters (getInitParameter())
  • In Tomcat, these parameters are set in web.xml
  • To make initializations, override init() and not
    init(ServletConfig)
  • The former is automatically called by the latter
    after performing default initializations

If we use init(), how can we obtain a reference
to the ServletConfig ?
Read more about the ServletConfig Interface
52
A web.xml Example
  • More on this in when we Tomcat in depth

ltweb-appgt ltservletgt ltservlet-namegtInitE
xamplelt/servlet-namegt ltservlet-classgtServlet
Initlt/servlet-classgt ltinit-paramgt
ltparam-namegtloginlt/param-namegt
ltparam-valuegtsnoopylt/param-valuegt
lt/init-paramgt lt/servletgt
lt/web-appgt
53
public class ServletInit extends HttpServlet
String _login null Calendar _initTime
null public void init() throws
ServletException _login
getInitParameter("login") _initTime new
GregorianCalendar() public void
doGet(HttpServletRequest req,
HttpServletResponse res) throws ServletException,
IOException res.setContentType("text/html")
PrintWriter out res.getWriter() out.println
("lthtmlgtltheadgtlttitlegtInitializationlt/titlegtltbodygtlt
h2gt" "I am the Servlet of ltigt" _login
"lt/igtltbr/gt" "I was initialized at "
_initTime.get(Calendar.HOUR_OF_DAY) ""
_initTime.get(Calendar.MINUTE) ""
_initTime.get(Calendar.SECOND)
"lt/h2gtlt/bodygtlt/htmlgt")
Calls the method getInitParameter defined within
the ServletConfig interface implemented by
HttpServlet class
ServletInit.java
54
Loading a Servlet on Startup
  • A Servlet is usually loaded when it is first
    being called
  • You can set Tomcat to load a specific Servlet on
    startup in the Servlet declaration inside web.xml
  • More on this in when we Tomcat in depth

ltservletgt ltservlet-namegtInitExamplelt/ser
vlet-namegt ltservlet-classgtServletInitlt/s
ervlet-classgt ltload-on-startup/gt lt/servl
etgt
You can use this element to set the loading order
of those servlets which are loaded on startup
55
Destroying Servlets
  • The server may remove a loaded Servlet, Why?
  • asked to do so by an administrator (e.g. Server
    shutdown)
  • Servlet was idle for a long time
  • server needs to free resources
  • The server removes a Servlet only if all threads
    have finished or a grace period has passed
  • Before removing, calls the destroy() method
  • can perform cleanup, e.g., close database
    connections
  • Is it possible for the Servlet to end without its
    destroy being called?
  • You can do it if you kill the process explicitly

56
Thread Synchronization
  • Multiple threads are accessing the same Servlet
    object at the same time
  • Therefore, you have to deal with concurrency
  • init() and destroy() are guaranteed to be
    executed only once (before/after all service
    executions)

57
Introduction to JSP
58
Many HTML Pages are Mostly Static
  • Servlets allow us to write dynamic Web pages
  • Easy access to request, session and context data
  • Easy manipulation of the response (cookies, etc.)
  • And lots more...
  • It is very inconvenient to write and maintain
    long and mostly static HTML pages using Servlets
    (even though such pages are very common)
  • out.println("lth1gtBla Blalt/h1gt" "bla bla bla
    bla" "lots more here...")

59
Introducing JSP
  • The Idea
  • Use HTML for most of the page.
  • Write Servlet code directly in the HTML page,
    marked with special tags.
  • The server automatically translates a JSP page to
    a Servlet class and the latter is actually
    invoked
  • In Tomcat 5.5, you can find the generated Servlet
    code under CATALINA_BASE/work/
  • A JSP is no more than a very (very) convenient
    way to write servlets which output textual data.

60
Relationships
  • Servlets HTML code is printed using Java code
  • JSP Java code is embedded in HTML code
  • Not only for HTML! JSP can be used for any
    textual format. Servlets can be used for any data!

HTML
JAVA
61
Example
  • lthtmlgt
  • ltheadgt
  • lttitlegtHello Worldlt/titlegt
  • lt/headgt
  • ltbodygt
  • lth2gtlt new java.util.Date() gtlt/h2gt
  • lth1gtHello Worldlt/h1gt
  • lt/bodygt
  • lt/htmlgt

Open the generated Java code
62
Generated Servlet Hierarchy(Tomcat 5.0
Implementation)
classes
interfaces
Abstract class extended by every generated Servlet
Read more about Apache HttpJspBase Class
63
JSP Limitations and Advantages
  • JSP can only do what a Servlet can do
  • Easier to write and maintain HTML
  • Easier to separate HTML from code
  • Can be created using a "reverse engineering
    technique"
  • Create static HTML and then replace static data
    with Java code

64
JSP Life Cycle
65
JSP Life Cycle
  • The following table describes the life cycle of
    JSP generated Servlet in details

66
JSP Life Cycle
Translation compilation only after first call
Request1 Request2 Request3 Request4 Request5 Request6
JSP page translated into servlet Yes No No No Yes No
JSPs Servlet compiled Yes No No No Yes No
Servlet instantiated and loaded into server's memory Yes No Yes No Yes No
init (or equivalent) called Yes No Yes No Yes No
doGet (or equivalent) called Yes Yes Yes Yes Yes Yes
Server restarted
Page modified
Page first written
Written by Marty Hall. Core Servlets JSP book
www.coreservlets.com
67
JSP Translation
JSP file named file.jsp will be translated into
the Java file file_jsp.java
  • When the JSP file is modified, JSP is translated
    into a Servlet
  • But only after the JSPs url is requested by the
    client
  • Application needs not be reloaded when JSP file
    is modified
  • Server does not generate the Servlet class after
    startup, if the latter already exists and isnt
    too old
  • Generated Servlet acts just like any other
    Servlet
  • The generated servlet can handle GET, POST, HEAD
    requests though it does not implement doGet(),
    doPost(), doHead() explicitly
  • Its Servlet.service() method calls the newly
    implemented main method named HttpJspBase._jspServ
    ice()

68
init() and destroy()
  • init() of the generated Servlet is called every
    time the Servlet class is loaded into memory and
    instantiated
  • destroy() of the generated Servlet is called
    every time the generated Servlet is removed
  • The latter two happen even if the reason is
    modification of the JSP file

69
jspInit and jspDestroy
  • In JSP pages, like regular Servlets, we sometimes
    want to implement init and destroy
  • It is illegal to use JSP declarations to override
    init or destroy, since they are (usually) already
    implemented by the generated Servlet
  • Instead, override the methods jspInit() and
    jspDestroy()
  • The generated servlet is guaranteed to call these
    methods from init and destroy, respectively
  • The standard versions of jspInit and jspDestroy
    are empty (placeholders for you to override)

70
Thread Synchronization
  • After the Servlet is generated, one instance of
    it serves requests in different threads, just
    like any other Servlet
  • In particular, the service method (_jspService)
    may be executed by several concurrent threads
  • Thus, like Servlets, JSP programming requires
    concurrency management

71
Basic JSP Elements
A Quick Reference to JSP Elements
72
Basic Elements in a JSP file
  • HTML code lthtml-taggtcontentlt/html-taggt
  • JSP Comments lt-- comment --gt
  • Expressions lt expression gt
  • Scriptlets lt code gt
  • Declarations lt! code gt
  • Directives lt_at_ directive attribute"value" gt
  • Actions ltjspforward.../gt, ltjspinclude.../gt
  • EL Expressions expression

Covered Later...
73
JSP Expressions
  • A JSP expression is used to insert Java values
    directly into the output
  • It has the form lt expression gt , where
    expression can be a Java object, a numerical
    expression, a method call that returns a value,
    etc...
  • For example
  • lt new java.util.Date() gt
  • lt "Hello"" World" gt
  • lt (int)(100Math.random()) gt

The heading space and the following space are not
created in the result. Use if you want a
real space
74
JSP Expressions
  • Within the generated Java code
  • A JSP Expression is evaluated
  • The result is converted to a string
  • The string is inserted into the page
  • This evaluation is performed at runtime (when the
    page is requested), and thus has full access to
    information about the request, the session,
    etc...

75
Expression Translation
lth1gtA Random Numberlt/h1gt lt Math.random() gt
Default content-type
The generated servlet calls out.write() for
Strings, and out.print() for objects
76
Predefined Variables (Implicit Objects)
  • The following predefined variables can be used
  • request the HttpServletRequest
  • response the HttpServletResponse
  • session the HttpSession associated with the
    request
  • out the PrintWriter (a buffered version of type
    JspWriter) used to fill the response content
  • application The ServletContext
  • config The ServletConfig
  • These variables and more will be discussed in
    details

77
lthtmlgt ltheadgt lttitlegtJSP Expressionslt/titlegt
lt/headgt ltbodygt lth2gtJSP Expressionslt/h2gt
ltulgt ltligtCurrent time lt new
java.util.Date() gtlt/ligt ltligtYour
hostnamelt request.getRemoteHost() gtlt/ligt
ltligtYour session ID lt session.getId() gtlt/ligt
ltligtThe ltcodegttestParamlt/codegt
form parameter lt
request.getParameter("testParam") gtlt/ligt
lt/ulgt lt/bodygt lt/htmlgt
Computer-code style
78
JSP Scriplets
  • JSP scriptlets let you insert arbitrary code into
    the Servlet service method ( _jspService )
  • Scriptlets have the form lt Java Code gt
  • The code is inserted verbatim into the service
    method, according to the location of the
    scriptlet
  • Scriptlets have access to the same automatically
    defined variables as expressions

79
Scriptlet Translation
lt foo() gt lt bar() gt
public void _jspService(HttpServletRequest
request,
HttpServletResponse response) throws
ServletException, IOException ... response.set
ContentType("text/html") ... out.print(foo())
bar() ...
80
An Interesting Example
  • Scriptlets don't have to be complete code blocks

lt if (Math.random() lt 0.5) gt You ltbgtwonlt/bgt
the game! lt else gt You ltbgtlostlt/bgt the
game! lt gt
if (Math.random() lt 0.5) out.write("You
ltbgtwonlt/bgt the game!") else
out.write("You ltbgtlostlt/bgt the game!")
81
JSP Declarations
  • A JSP declaration lets you define methods or
    members that get inserted into the Servlet class
    (outside of all methods)
  • It has the following form
  • lt! Java Code gt
  • For example
  • lt! private int someField 5 gt
  • lt! private void someMethod(...) ... gt
  • JSPs are intended to contain a minimal amount of
    code so it is usually of better design to define
    methods in a separate Java class...

82
Declaration Example
  • Print the number of times the current page has
    been requested since the Servlet initialization

lt! private int accessCount 0 gt lt! private
synchronized int incAccess() return
accessCount gt lth1gtAccesses to page
since Servlet init lt incAccess() gt lt/h1gt
83
Generated Servlet
public class serviceCount_jsp extends...
implements... throws... private int
accessCount 0 private synchronized int
incAccess() return
accessCount public void
_jspService(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
... ... out.write("lth1gtAccesses to
page since Servlet init ")
out.print(incAccess()) ... ...
Java permits member initialization on
declaration, even if the location is outside any
methods scope
84
JSP Directives
  • A JSP directive affects the structure of the
    Servlet class that is generated from the JSP page
  • It usually has the following form
  • lt_at_ directive attribute1"value1" ...
    attributeN"valueN" gt
  • Three important directives page, include and
    taglib
  • include and taglib will be discussed later

85
page-Directive Attributes
  • import attribute A comma separated list of
    classes/packages to import
  • lt_at_ page import"java.util., java.io." gt
  • contentType attribute Sets the MIME-Type of the
    resulting document (default is text/html as
    already mentioned)
  • lt_at_ page contentType"text/plain" gt

Imports from the class/Jar locations as mentioned
in Tomcat class
86
page-Directive Attributes (cont)
  • What is the difference between setting the page
    contentType attribute, and writing
    ltresponse.setContentType("...")gt ?
  • In the latter case, the new servlet will call
    response.setContentType() twice
  • The first, impicit (from the JSP point of view),
    call will be with the default content type.
  • The second, explicit, call might even come after
    the buffer was flushed or after the writer was
    obtained

Check double-contenttype.jsp code using the
explicit call, generated java code (servlet)
87
page-Directive Attributes (cont)
  • session"truefalse" - use a session?
  • buffer"sizekbnone8kb"
  • Specifies the content-buffer (out) size in
    kilo-bytes
  • autoFlush"truefalse"
  • Specifies whether the buffer should be flushed
    when it fills, or throw an exception otherwise
  • isELIgnored "truefalse"
  • Specifies whether JSP expression language is used
  • EL is discussed later

.If the JSP is defined as using a session, a
session cookie will be sent to the client
The underlined value is the default
Write a Comment
User Comments (0)
About PowerShow.com