Title: Servlets
1Servlets
- Servlets are modules that extend the
functionality of a java-enabled web-server - They normally generate HTML code and web content
dynamically. This is sent to the browser which
displays it. - For example, they send a query to a database
based on parameters sent by the browser and send
the results to the browser in html format
2Development Environments
- There are many good development environments
which help to write and test the servlets - They include an editor and a java-enabled sever
- They also include all the necessary jar files an
import statements - Some of them are Eclipse (need to download
plugins) and Netbeans (which also has full j2ee
support
3Anatomy of a Servlet
- A new servlet can be written by extending the
HttpServlet class which has the following
pre-defined methods - init()
- is called when the servlet is uploaded the
first time (this can vary depending on the
server) - doGet(HttpServletRequest req, HttpServletResponse
res) throws ServletException, IOException - is called every time the servlet is contacted by
a GET request (which is the default way) - doPost(HttpServletRequest req, HttpServletResponse
res) throws ServletException, IOException - is called when the client contacted the servlet
with a POST request
4import java.io. import javax.servlet. import
javax.servlet.http. public class MyServlet
extends HttpServlet public void init()
//Sobreescribir para que haga lo que
queramos public void doGet (
HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException
//Sobreescribir para que haga lo que queramos
public void doPost( HttpServletRequest
request,
HttpServletResponse response)
throws ServletException, IOException
//Sobreescribir para que haga lo que queramos
5The HttpServletRequest Parameter
- HttpServletRequest is the class of the first
parameter the server uses to calls doGet and
doPost. It gives access to - Information about the client, for example,
parameters passed, protocol used, clients host,
etc. - The input stream, ServletInputStream is used by
the servlet to receive data from the client when
the method POST or PUT has been used.
6The HttpServletResponse parameter
- HttpServletResponse is the class of the second
argument. - Provides methods for
- Declaring the MIME type of the answer that will
be sent to the client - Getting the output stream ServletOutputStream and
a Writer through which the servlet can send
dinamically generated html code to the browser. - Sending other information to the browser
(cookies, refreshment time, etc)
7Example 1
- import java.io.
- import javax.servlet.
- import javax.servlet.http.
- import java.util.Date
- public class SimpleServlet extends HttpServlet
- public void doGet ( HttpServletRequest request,
- HttpServletResponse
response) throws - ServletException, IOException
- // set content type
- response.setContentType("text/html")
- // open print writer to browser
- PrintWriter out response.getWriter()
- //send data
- out.println("ltHTMLgt")
- out.println("ltH1gt Mi Primer Servlet lt/H1gt")
- out.println("ltBRgt ltH2gtFecha y hora "(new
Date())"ltH2gt") - out.println("lt/HTMLgt")
8Example 1
- import java.io.
- import javax.servlet.
- import javax.servlet.http.
- import java.util.Date
- public class SimpleServlet extends HttpServlet
- public void doGet ( HttpServletRequest request,
- HttpServletResponse
response) throws - ServletException, IOException
- // set content type
- response.setContentType("text/html")
- // open print writer to browser
- PrintWriter out response.getWriter()
- //send data
- out.println("ltHTMLgt")
- out.println("ltH1gt Mi Primer Servlet lt/H1gt")
- out.println("ltBRgt ltH2gtFecha y hora "(new
Date())"ltH2gt") - out.println("lt/HTMLgt")
Imports necessary classes
This is for the Date class
9Example 1
- import java.io.
- import javax.servlet.
- import javax.servlet.http.
- import java.util.Date
- public class SimpleServlet extends HttpServlet
- public void doGet ( HttpServletRequest request,
- HttpServletResponse
response) throws - ServletException, IOException
- // set content type
- response.setContentType("text/html")
- // open print writer to browser
- PrintWriter out response.getWriter()
- //send data
- out.println("ltHTMLgt")
- out.println("ltH1gt Mi Primer Servlet lt/H1gt")
- out.println("ltBRgt ltH2gtFecha y hora "(new
Date())"ltH2gt") - out.println("lt/HTMLgt")
Every servlet extends HttpServlet
Overwrites doGet method
10Example 1
- import java.io.
- import javax.servlet.
- import javax.servlet.http.
- import java.util.Date
- public class SimpleServlet extends HttpServlet
- public void doGet ( HttpServletRequest request,
- HttpServletResponse
response) throws - ServletException, IOException
- // set content type
- response.setContentType("text/html")
- // open print writer to browser
- PrintWriter out response.getWriter()
- //send data
- out.println("ltHTMLgt")
- out.println("ltH1gt Mi Primer Servlet lt/H1gt")
- out.println("ltBRgt ltH2gtFecha y hora "(new
Date())"ltH2gt") - out.println("lt/HTMLgt")
Tells the browser the content type of the answer
Gets writer to browser from response parameter
11Example 1
- import java.io.
- import javax.servlet.
- import javax.servlet.http.
- import java.util.Date
- public class SimpleServlet extends HttpServlet
- public void doGet ( HttpServletRequest request,
- HttpServletResponse
response) throws - ServletException, IOException
- // set content type
- response.setContentType("text/html")
- // open print writer to browser
- PrintWriter out response.getWriter()
- //send data
- out.println("ltHTMLgt")
- out.println("ltH1gt Mi Primer Servlet
lt/H1gt") - out.println("ltBRgt ltH2gtFecha y hora "(new
Date())"ltH2gt") - out.println("lt/HTMLgt")
Print data to browser
Get date and time from system
Close connection to browser
12Running the first example
- Writing a servlet with Netbeans is very easy
- Also the deployment is done automatically
- Open netbeans
- Create a web project (this will create a lot of
directories for putting the different kind of
files) - Create a servlet
- Copy the code of SimpleServlet.java
- Run the file
13A second example
- Implementing a web counter
- It will count how many times an object of this
class has been creates - It will show the Address of the computer that
contacted the servlet - It will show a
14import java.io. import javax.servlet.
import javax.servlet.http. public class Count
extends HttpServlet int count 0
// a counter starts in 0 public
void doGet ( HttpServletRequest req,
HttpServletResponse res) throws
ServletException, IOException
count PrintWriter out
res.getWriter() res.setContentType("text/
html") out.println("ltH1gt A web page
counter lt/H1gt") out.println("ltHRgt")
out.println("This servlet was accessed "count"
time(s)") out.println("ltHRgt")
out.println("Your computer is "req.getRemoteHost
()) out.println("ltHRgt")
out.close()
15import java.io. import javax.servlet.
import javax.servlet.http. public class Count
extends HttpServlet int count 0
// a counter starts in 0 public
void doGet ( HttpServletRequest req,
HttpServletResponse res) throws
ServletException, IOException
count PrintWriter out
res.getWriter() res.setContentType("text/
html") out.println("ltH1gt A web page
counter lt/H1gt") out.println("ltHRgt")
out.println("This servlet was accessed "count"
time(s)") out.println("ltHRgt")
out.println("Your computer is "req.getRemoteHost
()) out.println("ltHRgt")
out.close()
16import java.io. import javax.servlet.
import javax.servlet.http. public class Count
extends HttpServlet int count 0
// a counter starts in 0 public
void doGet ( HttpServletRequest req,
HttpServletResponse res) throws
ServletException, IOException
count PrintWriter out
res.getWriter() res.setContentType("text/
html") out.println("ltH1gt A web page
counter lt/H1gt") out.println("ltHRgt")
out.println("This servlet was accessed "count"
time(s)") out.println("ltHRgt")
out.println("Your computer is "req.getRemoteHost
()) out.println("ltHRgt")
out.close()
Increments counter every time doGet is called by
the web server
17import java.io. import javax.servlet.
import javax.servlet.http. public class Count
extends HttpServlet int count 0
// a counter starts in 0 public
void doGet ( HttpServletRequest req,
HttpServletResponse res) throws
ServletException, IOException
count PrintWriter out
res.getWriter() res.setContentType("text/
html") out.println("ltH1gt A web page
counter lt/H1gt") out.println("ltHRgt")
out.println("This servlet was accessed "count"
time(s)") out.println("ltHRgt")
out.println("Your computer is "req.getRemoteHost
()) out.println("ltHRgt")
out.close()
Sine Qua Non
18import java.io. import javax.servlet.
import javax.servlet.http. public class Count
extends HttpServlet int count 0
// a counter starts in 0 public
void doGet ( HttpServletRequest req,
HttpServletResponse res) throws
ServletException, IOException
count PrintWriter out
res.getWriter() res.setContentType("text/
html") out.println("ltH1gt A web page
counter lt/H1gt") out.println("ltHRgt")
out.println("This servlet was accessed "count"
time(s)") out.println("ltHRgt")
out.println("Your computer is "req.getRemoteHost
()) out.println("ltHRgt")
out.close()
Print data to browser
19What happens if the server crashes and starts
again ?
- The counter will start from 0 again
- To remember the value of the counter in cast of
an unexpected crash, we will write the value of
the variable in a file every time it changes. - At the beginning, the servlet reads the initial
value from a file, if it exists, or creates the
file with the initial value 0
20public class Count extends HttpServlet int
count 0 // a counter for the object
public void init() try
BufferedReader in new BufferedReader(
newFileReader(count.txt))
String l in.readLine() count
Integer.parseInt(l) catch
(FileNotFoundException e) //no need to do
anything here public
void doGet ( HttpServletRequest req,
HttpServletResponse res) throws
ServletException, IOException
count PrintWriter outFile new
PrintWriter( new Filereader(count.txt))
outFile.println(count)
outFile.close() PrintWriter outBrowser
res.getWriter() res.setContentType("text/
html") outBrowser.println("ltH1gt A web
page counter lt/H1gt") outBrowser.println("
ltHRgt") ..... .....
21public class Count extends HttpServlet int
count 0 // a counter for the object
public void init() try
BufferedReader in new BufferedReader(
newFileReader(count.txt))
String l in.readLine() count
Integer.parseInt(l) catch
(FileNotFoundException e) //no need to do
anything here public
void doGet ( HttpServletRequest req,
HttpServletResponse res) throws
ServletException, IOException
count PrintWriter outFile new
PrintWriter( new Filereader(count.txt))
outFile.println(count)
outFile.close() PrintWriter outBrowser
res.getWriter() res.setContentType("text/
html") outBrowser.println("ltH1gt A web
page counter lt/H1gt") outBrowser.println("
ltHRgt") ..... .....
Try to open the file when the servlet is
called the first time
22public class Count extends HttpServlet int
count 0 // a counter for the object
public void init() try
BufferedReader in new BufferedReader(
newFileReader(count.txt))
String l in.readLine() count
Integer.parseInt(l) catch
(FileNotFoundException e) //no need to do
anything here public
void doGet ( HttpServletRequest req,
HttpServletResponse res) throws
ServletException, IOException
count PrintWriter outFile new
PrintWriter( new Filereader(count.txt))
outFile.println(count)
outFile.close() PrintWriter outBrowser
res.getWriter() res.setContentType("text/
html") outBrowser.println("ltH1gt A web
page counter lt/H1gt") outBrowser.println("
ltHRgt") ..... .....
Read the line and convert the content to its
integer value
23public class Count extends HttpServlet int
count 0 // a counter for the object
public void init() try
BufferedReader in new BufferedReader(
newFileReader(count.txt))
String l in.readLine() count
Integer.parseInt(l) catch
(FileNotFoundException e) //no need to do
anything here public
void doGet ( HttpServletRequest req,
HttpServletResponse res) throws
ServletException, IOException
count PrintWriter outFile new
PrintWriter( new Filereader(count.txt))
outFile.println(count)
outFile.close() PrintWriter outBrowser
res.getWriter() res.setContentType("text/
html") outBrowser.println("ltH1gt A web
page counter lt/H1gt") outBrowser.println("
ltHRgt") ..... .....
24public class Count extends HttpServlet int
count 0 // a counter for the object
public void init() try
BufferedReader in new BufferedReader(
newFileReader(count.txt))
String l in.readLine() count
Integer.parseInt(l) catch
(FileNotFoundException e) //no need to do
anything here public void
doGet ( HttpServletRequest req,
HttpServletResponse res) throws
ServletException, IOException
count PrintWriter outFile new
PrintWriter( new Filereader(count.txt))
outFile.println(count)
outFile.close() PrintWriter outBrowser
res.getWriter() res.setContentType("text/
html") outBrowser.println("ltH1gt A web
page counter lt/H1gt") outBrowser.println("
ltHRgt") ..... .....
After count is incremented, open the file to
write (overwrite), write the new number and
close file
25public class Count extends HttpServlet int
count 0 // a counter for the object
public void init() try
BufferedReader in new BufferedReader(
newFileReader(count.txt))
String l in.readLine() count
Integer.parseInt(l) catch
(FileNotFoundException e) //no need to do
anything here public
void doGet ( HttpServletRequest req,
HttpServletResponse res) throws
ServletException, IOException
count PrintWriter outFile new
PrintWriter( new Filereader(count.txt))
outFile.println(count)
outFile.close() PrintWriter outBrowser
res.getWriter() res.setContentType("text/
html") outBrowser.println("ltH1gt A web
page counter lt/H1gt") outBrowser.println("
ltHRgt") ..... .....
The rest is the same
26Exercise
- Escriba un servlet que genere un número aleatorio
entre 1 y 100 cada vez que es contactado y lo
muestra al cliente junto con la IP del computador
del cliente - Además muestra el número más grande generado
hasta ahora y la IP del computador para el cual
lo generó - La dirección del computador del cliente puede ser
obtenida - String s request.getRemoteHost()
- returns the IP number (like 133.8.109.158
- String s request.getRemoteAddress()
- returns the name if it can be retrieved (like
www.waseda.jp) - Un número aleatorio entre 1 y 100 se genera con
la siguiente instrucción en Java - int numero (int)(1 Math.random()100)
27(No Transcript)
28import java.io. import javax.servlet.
import javax.servlet.http. public class
NewServlet extends HttpServlet int
maxNumber 0 String maxIP ""
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws
IOException, ServletException
int aleatorio (int)(1 Math.random()100)
String ip request.getRemoteAddr() if
(aleatorio gt maxNumber) maxNumber
aleatorio maxIP ip
response.setContentType("text/html")
PrintWriter out response.getWriter()
out.println("lth1gt Bienvenido lt/h1gtltbrgt")
out.println("lth2gt Su dirección IP es " ip
"ltbrgt") out.println("Su número es
"aleatorio"ltbrgtltbrgt") out.println("El
numero mayor generado es "maxNumber)
out.println("ltbrgtFue generado para "maxIP)
out.close()
29import java.io. import javax.servlet.
import javax.servlet.http. public class
NewServlet extends HttpServlet int
maxNumber 0 String maxIP ""
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws
IOException, ServletException
int aleatorio (int)(1 Math.random()100)
String ip request.getRemoteAddr() if
(aleatorio gt maxNumber) maxNumber
aleatorio maxIP ip
response.setContentType("text/html")
PrintWriter out response.getWriter()
out.println("lth1gt Bienvenido lt/h1gtltbrgt")
out.println("lth2gt Su dirección IP es " ip
"ltbrgt") out.println("Su número es
"aleatorio"ltbrgtltbrgt") out.println("El
numero mayor generado es "maxNumber)
out.println("ltbrgtFue generado para "maxIP)
out.close()
Inicializacion variables para guardar La IP y el
valor del máximo
30import java.io. import javax.servlet.
import javax.servlet.http. public class
NewServlet extends HttpServlet int
maxNumber 0 String maxIP ""
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws
IOException, ServletException
int aleatorio (int)(1 Math.random()100)
String ip request.getRemoteAddr()
if (aleatorio gt maxNumber)
maxNumber aleatorio maxIP ip
response.setContentType("text/html")
PrintWriter out response.getWriter()
out.println("lth1gt Bienvenido lt/h1gtltbrgt")
out.println("lth2gt Su dirección IP es " ip
"ltbrgt") out.println("Su número es
"aleatorio"ltbrgtltbrgt") out.println("El
numero mayor generado es "maxNumber)
out.println("ltbrgtFue generado para "maxIP)
out.close()
Generación número aleatorio
Obtencion ip del cliente
31import java.io. import javax.servlet.
import javax.servlet.http. public class
NewServlet extends HttpServlet int
maxNumber 0 String maxIP ""
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws
IOException, ServletException
int aleatorio (int)(1 Math.random()100)
String ip request.getRemoteAddr()
if (aleatorio gt maxNumber)
maxNumber aleatorio maxIP ip
response.setContentType("text/html")
PrintWriter out response.getWriter()
out.println("lth1gt Bienvenido lt/h1gtltbrgt")
out.println("lth2gt Su dirección IP es " ip
"ltbrgt") out.println("Su número es
"aleatorio"ltbrgtltbrgt") out.println("El
numero mayor generado es "maxNumber)
out.println("ltbrgtFue generado para "maxIP)
out.close()
Actualización de los datos del máximo generado
32import java.io. import javax.servlet.
import javax.servlet.http. public class
NewServlet extends HttpServlet int
maxNumber 0 String maxIP ""
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws
IOException, ServletException
int aleatorio (int)(1 Math.random()100)
String ip request.getRemoteAddr() if
(aleatorio gt maxNumber) maxNumber
aleatorio maxIP ip
response.setContentType("text/html")
PrintWriter out response.getWriter()
out.println("lth1gt Bienvenido lt/h1gtltbrgt")
out.println("lth2gt Su dirección IP es " ip
"ltbrgt") out.println("Su número es
"aleatorio"ltbrgtltbrgt") out.println("El
numero mayor generado es "maxNumber)
out.println("ltbrgtFue generado para "maxIP)
out.close()
Enviar info al cliente