Servlets & JSPs
- Sharad Ballepu
sharadballepu@[Link]
[Link]
Servlets & JSPs
Agenda
• Introduction
• Servlet Architecture
• Servlet lifecycle
• Request and Response
• Being a Web Container
• Session management
• Overview of JSP
• JSP Elements
• Q&A
Introduction – request-response model
• Request-response model.
HTTP
Request
request
Server
<html>
<head>
<html>
<body>
<head>
…
<body>
…
Client
response
HTTP
HTML
Introduction – what is a request and response
HTTP Request HTTP Response
Key elements of a “request” Key elements of a “response”
stream: stream:
HTTP method (action to be A status code (for whether
performed). the request was successful).
The page to access (a URL). Content-type (text, picture,
html, etc…).
Form parameters.
The content ( the actual
content).
Introduction – What is a Servlet
Where does Servlet come into the picture?
I can serve only
static HTML
pages
Web Server
Application
Not a
problem. I
can handle
dynamic
Helper requests.
Application
Web Server
machine
“The Helper Application is nothing but a SERVLET”
Servlet Architecture -Web Container
• What is a Web Container?
request
GET. GET. GET.
….. ….. …..
Web Web Servlet
Server Container
Client
Servlet Architecture – Web Container
• How does the Container handle a request?
request Servlet
Http request Web
Container
response
Thread
Web
Server
<Html>
response <Body>
……. Service()
Client </Body>
</Html>
doGet()
Servlet Architecture – Web Container
The CONTAINER
What is the role of Web Container ?
S2
• Communication Support
S1
• Lifecycle Management
JSP1
• Multi-threading support
S3
• Security
• JSP Support S4
The container can contain multiple Servlets & JSPs within it
Servlet Architecture – Deployment Descriptor
• How does the Container know which Servlet the client has
requested for? <web-app>
………
<servlet>
A Servlet can have 3 names
<servlet-name>LoginServ</servlet-name>
<servlet-class>[Link]</servlet-class>
Client known URL name </servlet>
<servlet-mapping>
Deployer known secret <servlet-name>LoginServ</servlet-name>
internal name <url-pattern>/Logon</url-pattern>
</servlet-mapping>
………..
Actual file name ………..
</web-app>
[Link]
Servlet Lifecycle
• The Servlet lifecycle is simple, there is only one main state –
“Initialized”.
Does not exist
constructor()
destroy()
init()
Initialized
Service()
Servlet Lifecycle - Hierarchy
Interface Servlet
Abstract class GenericServlet If not overridden, implements init()
method from the ‘Servlet’ interface,
Abstract class HttpServlet If not overridden, implements service()
method.
Concrete class Your Servlet We implement the HTTP methods
here.
Servlet Lifecycle – 3 big moments
When is it called What it’s for Do you override
it
init() The container To initialize your
calls the init() servlet before
before the servlet handling any Possibly
can service any client requests.
client requests.
service() When a new To determine
request for that which HTTP No. Very unlikely
servlet comes in. method should be
called.
doGet() or The service() To handle the
doPost() method invokes it business logic.
based on the HTTP Always
method from the
request.
Servlet Lifecycle – Thread handling
• The Container runs multiple threads to process multiple
requests to a single servlet.
Container
Client A Client B
Servlet
Thread Thread
A B
response request request response
Request and Response – GET v/s POST
• The HTTP request method determines whether doGet() or
doPost() runs.
GET (doGet()) POST (doPost())
The request contains only the Along with request line
HTTP Request request line and HTTP header. and header it also contains
HTTP body.
Parameter The form elements are passed The form elements are
passing to the server by appending at passed in the body of the
the end of the URL. HTTP request.
Size The parameter data is limited Can send huge amount of
(the limit depends on the data to the server.
container)
Idempotency GET is Idempotent POST is not idempotent
Usage Generally used to fetch some Generally used to process
information from the host. the sent data.
Request and Response – The response
Request
Can the Servlet No Does the Servlet know
Serve the request? Who can serve?
No
Yes
Yes
Send Redirect
Send resource
Request Dispatcher Error page
Being a Web Container – Servlet Config and Context
Servlet Context
Servlet 1 Servlet 2 Servlet 3 JSP 1
Servlet Config Servlet Config Servlet Config Servlet Config
Being a Web Container – init parameters
• What are init parameters?
• Difference between Servlet Context and Config Init parameters
Context Init Parameters Servlet Init Parameters
Scope Scope is Web Container Specific to Servlet or JSP
Servlet code getServletContext() getServletConfig()
Deployment Within the <web-app> element Within the <servlet> element
Descriptor but not within a specific for each specific servlet
<servlet> element
Being a Web Container - Attributes
• What exactly, is an attribute?
• Difference between Attributes and parameters
Attributes Parameters
Context Context
Types Request Request
Session Servlet Init
We cannot set Init
Method to set setAttribute(String, Object) parameters.
Return type Object String
getInitParameter
Method to get getAttribute(String) (String)
Session Management – Session Tracking
• How sessions work? new
1 2
request, “dark”
ID# 42
“dark”
HttpSession
Client A
response, ID# 42 setAttribute(“dark”)
4 3
Container
ID# 42
“ale” “dark”
#42
Client A 1 HttpSession
request, “ale”, ID# 42
2
Container
Session Tracking – Cookies
HttpSession session = [Link](); Here’s your
cookie with
session ID
inside…
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=0ABS
Content-Type: text/html
Client A Server: Apache-Coyote/1.1
<html>
…
</html>
Container
OK, here’s HTTP Response
the cookie
with my
request
POST / [Link] HTTP/1.1
Cookie: JSESSIONID=0ABS
Accept: text/html……
Client A
HTTP Request Container
Session Tracking – URL Rewriting
URL ;jsessionid=1234567
Container
HTTP/1.1 200 OK
Content-Type: text/html
Server: Apache-Coyote/1.1
<html>
<body>
< a href =“ http:// [Link]/Metavante;jsessionid=0AAB”>
click me </a>
Client A </html>
HTTP Response
GET /Metavante;jsessionid=0AAB
HTTP / 1.1
Host: [Link]
Accept: text/html
Client A HTTP Request Container
JSP Overview - Servlets v/s JSPs
JSPs : Java within HTML
Servlets : HTML within Java
Presentation logic
business logic
public void doGet(request, response) <html>
{ <body>
PrintWriter out = [Link](); <% String name =
String name = [Link](name); %>
[Link](name);
[Link](“<html><body>”); Hello <%= name %>
[Link]("Hello” + name);
[Link](“</body></html>”); </body>
} </html>
JSP Overview - What is a JSP
• In the end, a JSP is just a Servlet.
Is translated to Compiles to Is loaded and
Initialized as
Import javax. 0010 0001
writes servlet. 1100 1001
JSP HttpServlet.* 0001 0011 Servlet
[Link] MyJsp_jsp.java MyJsp_jsp.class MyJsp_jsp
Servlet
JSP Elements
• Scriptlets
• <% int I = 10; %>
• <% Dog d = new Dog(); %>
= [Link](i);
• Expressions
• <%= i %>
= [Link]([Link]());
• <%= [Link]() %>
• Declarations
• <%! int i=10; %>
• <%! void display() { [Link](“Hello”); } %>
• Directives
• Pages - <%@ page import=“foo.*, bar.*” %>
• include - <%@ include file=“/foo/[Link]” %>
• taglib - <%@ taglib uri=“Tags” prefix=“cool” %>
JSP Elements – JSP to Servlet
• Where does the JSP code land in the Servlet?
<%@ page import=“foo.*” %> import [Link].*
import foo.*;
<html> public class MyJsp_jsp extends
<body> HttpServlet
{
<% int i = 10; %> int count = 0;
<%! int count = 0; %> public void display()
{
Hello! Welcome [Link](“Hello”);
}
<%! Public void display() public void _jspService(req, res)
{ {
[Link](“Hello”); int i = 0;
} %> [Link](“<html>\r<body>”);
[Link](“Hello! Welcome”);
</body> }
</html> }
Q&A