Title: Object Oriented Programming in Java (95-707) Advanced Topics
1Lecture 10Object Oriented Programming in Java
2Todays Lecture
- Trail Servlets
- Lessonoverview,Cient Interaction, LifeCycle,...
- http//web2.java.sun.com/docs/books/tutorial/servl
ets/index.html - Additional Link
- http//developer.java.sun.com/developer/onlineTrai
ning/Servlets/Fundamentals/introduction.html
3Servlet Architecture
Web server with servlet engine
Client Browser
2 call servlet with request info
1 send http request
HTTP Servlet
5 send HTTP response
4 return information from servlet engine
3 perform logic
41 send HTTP request
- Handled by regular html tags
- examples
- simple
- http//localhost8080/servlet/snoop
- with parameters
- http//localhost8080/servlet/snoop?usernamealain
- from a form post
- ltform action/servlet/snoop methodpostgt
- ltinput type"text" name"username" value""gt
- ltinput type"text" namepassword" value""gt
- lt/formgt
52 call servlet with request info
- Handled by the web server
- transparent to the developer
63 perform logic
- Handled by a custom java class which inherits
from the Servlet class
74 return response from servlet engine
- Handled by the web server
- transparent to the developer
85 final step
- The browser renders the html page which is
returned - In this class we will only deal with HTML, but
others types could be returned by servlets - I.e. audio, images, ...
9Overall Servlet API
- base class is HttpServlet
- APIs to
- initialize servlets
- receive http requests
- retrieve information on the request
- send a response to the browser
- maintain session across multiple invocations
(remember that HTTP is session-less)
10Base Class HttpServlet
Example from HelloWorldServlet
- import java.io.
- import javax.servlet.
- import javax.servlet.http.
- public class HelloWorldServlet extends
HttpServlet -
-
11Initialization of Servlet
- Example from PhoneServlet.java
- public class PhoneServlet extends HttpServlet
- private Hashtable phones new Hashtable()
- private String dataFilePath "phonelist"
- // Public Methods
- public void init(ServletConfig conf)
- throws ServletException
- super.init(conf)
- String param getInitParameter("phonelist"
) - if (param ! null)
- dataFilePath param
-
- ...
- readFromFile()
-
12HTTP GET and POST
- Example from PhoneServlet
- public class PhoneServlet extends HttpServlet
- public void init(ServletConfig conf) throws
ServletException - ...
-
- public void doGet(HttpServletRequest req,
HttpServletResponse res) - throws ServletException, IOException
- ...
-
- public void doPost(HttpServletRequest req,
HttpServletResponse res) - throws IOException
-
- ...
-
-
- doGet is called when we have HTTP GET
- doPost is called when we have HTTP POST
13Inside doGet and doPost
- Three usual steps
- read request data such as input parameters
- set response headers
- length, type
- write the response data
14Get Request Data and Parameters
- Example from PhoneServlet
- public void doPost (HttpServletRequest req,
HttpServletResponse res)throws IOException -
- ...
- String name, number, opcode
- name req.getParameter("name")
- number req.getParameter("number")
- opcode req.getParameter("opcode")
- ...
-
ltform action/servlet/PhoneServlet
methodpostgt ltinput type"text" namename"
value""gt ltinput type"text" namenumber"
value""gt ltinput type"text" nameoncoder"
value""gt lt/formgt
15Set Response Headers
- Example from PhoneServlet
- public void doGet (HttpServletRequest req,
HttpServletResponse res) - throws ServletException, IOException
-
- res.setContentType("text/html")
- ServletOutputStream out res.getOutputStream()
- String title "Phones"
- ...
- out.println("ltHEADgtltTITLEgt Phone Servlet Output
lt/TITLEgtlt/HEADgt") - out.println("ltBODY BGCOLOR\"FFFFFF\"gt")
- out.println("lth1gtPhone Recordslt/h1gt")
- out.println("ltpgt")
- ...
- )
16Create response
- Example from PhoneServlet
- public void doGet (HttpServletRequest req,
HttpServletResponse res) - throws ServletException, IOException
-
- res.setContentType("text/html")
- ServletOutputStream out res.getOutputStream()
- String title "Phones"
- ...
- out.println("ltHEADgtltTITLEgt Phone Servlet Output
lt/TITLEgtlt/HEADgt") - out.println("ltBODY BGCOLOR\"FFFFFF\"gt")
- out.println("lth1gtPhone Recordslt/h1gt")
- out.println("ltpgt")
- ...
- )
17HTTP protocol is session-less
- HTTP protocol is session-less
- between two requests the web server does not
remember the caller - protocol is as follows
- browser connects to HTTP server
- browser makes a request for a web resource
- web server looks for the resource
- web server forwards the resource to the browser
- web server disconnects the browser
18Sessions with Servlets
- The servlet engine fills-in the gap and provides
a way to keep a session across multiple requests
to a web server - Mechanism is handled by the servlet engine on
demand by the servlets - The base class is HttpSession
19HttpSession
- Example from SessionServlet.java
- public void doGet (HttpServletRequest req,
HttpServletResponse res) - throws ServletException, IOException
-
- HttpSession session req.getSession(true)
- ...
- //Here's the meat
- Integer ival (Integer) session.getValue("sess
iontest.counter") - if (ivalnull) ival new Integer(1)
- else ival new Integer(ival.intValue() 1)
- session.putValue("sessiontest.counter", ival)
- ...
- )