Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes...

22
IT G ROUP Servlets O. De Pertat

Transcript of Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes...

Page 1: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

IT GROUP

Servlets O. De Pertat

Page 2: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

Servlets Overview

Generic Server Business logic APIJava Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.Packages:

javax.servlet javax.servlet.http.*.

Features:Thread–oriented instead of process management (like CGI or Fast-CGI)High level APIPerformance for parameters transmissionRuns on every operating systemSecure : no SHELL escapes, no buffer overflowsJava programming language (PHP, VB.NET, Python)

Page 3: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

Servlets Container used

Apache – Jakarta Tomcat :Conteneur de référence Officiel

http://jakarta.apache.org/tomcat/

IBM – WebSpherehttp://www.ibm.com

BEA – WebLogichttp://www.bea.com

Alliance - iPlanet (Sun & NetScape)

Oracle – IAS

Allaire – Jrun

Caucho’s Resin

Page 4: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

Javax.servlet

Page 5: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

Javax.servlet.http

Page 6: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

Servlets types

Servlet interface is the contract passed between a Servlet and its container.

GenericServlet basic implement of a Servlet. Implementation is not protocol specific.

HttpServlet HTTP protocol implementation of a Servlet.

Every class that extends of the previously described class.

Page 7: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

Servlets life cycle

Page 8: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

Servlet Initialization

Handle by the init method that we can overload:Open Database connection

Variables initializations…

getInitParameter() method allows to retrieve the declared parameters set into the web container configuration.

Into TOMCAT: <init-param>

<param-name>foo</param-name>

<param-value>bar</param-value>

</init-param>

Page 9: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

Handling requests

The WebContainer invoke the service(ServletRequest req, ServletResponse res) method.

For an HTTP Servlet the service method is overloaded and call the method that fit to the HTTP Command:

GET : protected void doGet (HttpServletRequest req, HttpServletResponse resp)POST : protected void doPost (HttpServletRequest req, HttpServletResponse resp)HEAD : protected void doPost (HttpServletRequest req, HttpServletResponse resp)PUT : protected void doPut (HttpServletRequest req, HttpServletResponse resp)....

Page 10: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

Servlet Response

ServletResponse interface implementiongetOutputStream()

getWriter()

HttpServletResponse :STATUS CODE : SC_OK, SC_NOT_FOUNDsetContentType() : "text/html", "image/gif"

setStatus() : 200, SC_OK, SC_NOT_FOUND…

addCookie() : add a cookie to the HTTP response

setDateHeader() : sets Date in HTTP response’s header

setHeader() : to set any HTTP Header

sendError() : to send an HTTP error to the client

Page 11: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

Servlet Request

HttpServletRequest. Interface implementationgetInputStream() ,getReader() : binary & text streams handlinggetScheme() : what protocol is used? (http, https)getParameterNames(), getParameterValues() : parameters handlinggetContentType() : text/html, …getRemoteAddr(), getRemoteHost()

HttpServletRequest:getHeaderNames() : HTTP header management

getMethod() : HTTP Method used HTTP: GET,POST

getRequestURI() : What URI the client asked for?

Cookies management

Session handling

Page 12: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

Hello World !public class Hello extends HttpServlet public class Hello extends HttpServlet

{{

public void doGet(HttpServletRequest req,public void doGet(HttpServletRequest req,

HttpServletResponse resp)HttpServletResponse resp)

throws ServletException, IOException throws ServletException, IOException

{{

resp.setContentType("text/html");resp.setContentType("text/html");

PrintWriter out = resp.getWriter();PrintWriter out = resp.getWriter();

String name = req.getParameter("name");String name = req.getParameter("name");

if(name==null) name="World !";if(name==null) name="World !";

out.println("<HTML>");out.println("<HTML>");

out.println("Hello " + name );out.println("Hello " + name );

out.println("</HTML>");out.println("</HTML>");

}}

}}

Page 13: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

Ways to call a Servlet

JSP (Java Server Page)

From a Document or WebBrowserhttp://machine-name:port/servlet/servlet-name

Http://localhost:8080/servlet/bookdetails?bookId=203

From an other ServletBookDBServlet database = (BookDBServlet)

this.getServletConfig().getServletContext().getServlet("bookdb");

SSI<SERVLET NAME="Date">

<PARAM NAME="TimeZone"VALUE ="Paris" >

</SERVLET>

Page 14: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

Including external elements

Including Servlet output into an other one:ServletContext sc = getServletContext();

RequestDispatcher d = sc.getRequestDispatcher(

"/AnOtherServlet");

req.setAttribute("Param", "Value");

d.include(req, resp);

Non dynamic element inclusion:URL url = sc.getResource(« /hello.html");

Out.print(url.getContent());

Page 15: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

Multi-Threaded Environment

Warning! Servlet’s Data are not thread- protected !

Two protections:Synchronized method;

Implements SingleThreadModel Interface

Page 16: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

Cookies

Data stored on the client-side by the server

Structure: Name, Value, Expiration date, domain, path

Managed by the class javax.servlet.http.Cookie

Java Class Cookie allows to read, add & remove HTTP Cookies (RFC 2109).

Allows user’s session handling above HTTP Protocol

Page 17: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

Reading / Adding Cookies

Reading Cookies : Cookie [] cookies = req.getCookies();

for (int i=0 ; i < cookies.length ; i++)

{

out.print(cookies[i].getName() +"=" );

out.println(cookies[i].getValue() );

}

Adding Cookies : userid = generationIDUtilisateur();

Cookie c = new Cookie("userid", userid);

c.setDomain(".i2sconsulting.fr");

c.setPath("/");

resp.addCookie(c);

Page 18: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

HTTP Session

Session handling: Cookies

Long URL

Opening/retrieving a sessionjavax.servlet.http.HttpSession session = req.getSession(false);// la session est récupérée ou null si elle n ’existait pas déjàjavax.servlet.http.HttpSession session = req.getSession(true);// la session est récupérée ou ouverte si elle n ’existait pas déjà

Session invalidationjavax.servlet.http.HttpSession session = req.getSession(false);session.invalidate(); // la session est invalidée (i.e. fermée)

Page 19: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

HttpSession - 1

IdentificationString sessionid= session.getId(); // Example: To1010mC8601021835741167At

Creation datelong datecreation= session.getCreationTime(); // nb de ms depuis 1/1/1970:00:00

Last access datelong datelastaccess= session.getLastAccessedTime();

ExampleHttpSession session = req.getSession(true);if(session.getLastAccessedTime() - session.getCreationTime() > 5*60*1000 ) {

session.invalidate(); }

Page 20: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

HttpSession - 2

Session handlingboolean HttpServletRequest.isRequestedSessionIdFromCookie()// is this session opened with a cookie?boolean HttpServletRequest.isRequestedSessionIdFromURL()// do we use URL rewrite method?

URL Rewrite (if isRequestedSessionIdFromURL)URL generated must be encoded in order to keep the sessionString HttpServletResponse.encodeRedirectURL(String url)String HttpServletResponse.encodeURL(String url)

Exampleres.sendRedirect(res.encodeRedirectURL("/servlet/login");

Page 21: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

Adding Objects to a Session

Used: database connection, carts…

Adding/replacing a valuevoid HttpSession.putValue(String name, Object value)

Deleting a valuevoid HttpSession.removeValue(String name)

Getting objects associated to sessionString[] HttpSession.getValueNames()Object HttpSession.getValue(String name)

ExampleHttpSession session = req.getSession(true);if(session.getLastAccessedTime() - session.getCreationTime() > 5*60*1000)

{ session.invalidate(); }

Page 22: Servlets O. De Pertat. Servlets Overview Generic Server Business logic API Java Syntax: classes extending the javax.servlet.Servlet interface or any sub-class.

WebContainer Architecture