Servlets & JSPs
- Sharad Ballepu
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
Key elements of a request stream: HTTP method (action to be performed).
HTTP Response
Key elements of a response stream: A status code (for whether the request was successful).
The page to access (a URL).
Form parameters.
Content-type (text, picture, html, etc).
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 requests.
Helper 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 Server
Web Container
Servlet
Client
Servlet Architecture Web Container
How does the Container handle a request?
Servlet response
Web Server
Thread
Http request
Web Container
request
Client
response
<Html> <Body> . </Body> </Html>
Service() doGet()
Servlet Architecture Web Container
The CONTAINER
What is the role of Web Container ?
Communication Support Lifecycle Management Multi-threading support Security JSP Support
The container can contain multiple Servlets & JSPs within it S3 S1
S2
JSP1
S4
Servlet Architecture Deployment Descriptor How does the Container know which Servlet the client has requested for? A Servlet can have 3 names Client known URL name Deployer known secret internal name Actual file name
<web-app> <servlet> <servlet-name>LoginServ</servlet-name> <servlet-class>com.Login</servlet-class> </servlet>
<servlet-mapping> <servlet-name>LoginServ</servlet-name> <url-pattern>/Logon</url-pattern> </servlet-mapping> .. .. </web-app> Web.xml
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 its for
Do you override it
init()
The container calls the init() before the servlet can service any client requests.
When a new request for that servlet comes in.
To initialize your servlet before handling any client requests.
Possibly
service()
To determine which HTTP No. Very unlikely method should be called.
doGet() or doPost()
The service() To handle the method invokes it business logic. based on the HTTP method from the request.
Always
Servlet Lifecycle Thread handling The Container runs multiple threads to process multiple requests to a single servlet.
Container
Client A Servlet
Client B
Thread A
Thread B
response
request
request
response
Request and Response GET v/s POST
The HTTP request method determines whether doGet() or doPost() runs.
GET (doGet())
The request contains only the request line and HTTP header. The form elements are passed to the server by appending at the end of the URL. The parameter data is limited (the limit depends on the container) GET is Idempotent Generally used to fetch some information from the host.
POST (doPost())
Along with request line and header it also contains HTTP body. The form elements are passed in the body of the HTTP request. Can send huge amount of data to the server. POST is not idempotent Generally used to process the sent data.
HTTP Request Parameter passing Size
Idempotency Usage
Request and Response The response
Request
Can the Servlet Serve the request?
No
Does the Servlet know Who can serve?
No
Yes Yes
Send resource
Send Redirect 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 Scope Scope is Web Container Servlet Init Parameters Specific to Servlet or JSP
Servlet code Deployment Descriptor
getServletContext()
getServletConfig()
Within the <web-app> element Within the <servlet> element 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 Types Context Request Session setAttribute(String, Object) Object getAttribute(String) Parameters Context Request Servlet Init
Method to set Return type Method to get
We cannot set Init parameters.
String getInitParameter (String)
Session Management Session Tracking How sessions work?
1 request, dark Client A new 2
ID# 42 dark
HttpSession
response, ID# 42 setAttribute(dark) 4 3 Container
ale #42
ID# 42 dark
Client A
1 request, ale, ID# 42 2 Container
HttpSession
Session Tracking Cookies
Heres your cookie with session ID inside
HttpSession session = request.getSession();
HTTP/1.1 200 OK Set-Cookie: JSESSIONID=0ABS
Client A
Content-Type: text/html Server: Apache-Coyote/1.1 <html> </html>
OK, heres the cookie with my request
HTTP Response
Container
POST / login.do HTTP/1.1 Cookie: JSESSIONID=0ABS
Accept: text/html
Client A HTTP Request Container
Session Tracking URL Rewriting
URL
HTTP/1.1 200 OK
;jsessionid=1234567
Container
Client A
Content-Type: text/html Server: Apache-Coyote/1.1 <html> <body> < a href = http:// www.sharmanj.com/Metavante;jsessionid=0AAB> click me </a> </html>
HTTP Response
GET /Metavante;jsessionid=0AAB
HTTP / 1.1 Host: www.sharmanj.com Accept: text/html
Client A
HTTP Request
Container
JSP Overview - Servlets v/s JSPs
JSPs : Java within HTML Presentation logic
Servlets : HTML within Java business logic public void doGet(request, response) { PrintWriter out = response.getWriter(); String name = request.getParameter(name); out.println(<html><body>); out.println("Hello + name); out.println(</body></html>); }
<html> <body> <% String name = request.getParameter(name); %> Hello <%= name %> </body> </html>
JSP Overview - What is a JSP
In the end, a JSP is just a Servlet.
Is translated to writes JSP MyJsp.jsp
Import javax. servlet. HttpServlet.*
Compiles to
0010 0001 1100 1001 0001 0011
Is loaded and Initialized as Servlet MyJsp_jsp Servlet
MyJsp_jsp.java MyJsp_jsp.class
JSP Elements
Scriptlets
<% int I = 10; %> <% Dog d = new Dog(); %>
= out.println(i); Expressions
<%= i %> <%= d.getName() %>
= out.println(d.getName());
Declarations
<%! int i=10; %> <%! void display() { System.out.println(Hello); } %>
Directives
Pages - <%@ page import=foo.*, bar.* %> include - <%@ include file=/foo/myJsp.jsp %> taglib - <%@ taglib uri=Tags prefix=cool %>
JSP Elements JSP to Servlet Where does the JSP code land in the Servlet?
<%@ page import=foo.* %> <html> <body> <% int i = 10; %> <%! int count = 0; %> Hello! Welcome <%! Public void display() { out.println(Hello); } %> import javax.servlet.HttpServlet.* import foo.*; public class MyJsp_jsp extends HttpServlet { int count = 0; public void display() { out.println(Hello); } public void _jspService(req, res) { int i = 0; out.println(<html>\r<body>); out.println(Hello! Welcome); } }
</body> </html>
Q&A