Servlets
•
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
Development 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
Anatomy 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
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MyServlet extends HttpServlet {
public void init() {
//Overwrite
}
public void doGet ( HttpServletRequest
request,
HttpServletResponse response)
throws ServletException, IOException {
// Overwrite
}
public void doPost( HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
//Overwrite
}
}
The 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, client’s 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.
The 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…)
Example 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("<HTML>")
out.println("<H1> Mi Primer Servlet </H1>");
out.println("<BR> <H2>Fecha y hora: "+(new Date())+"<H2>");
out.println("</HTML>");
out.close();
}
}
Example 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("<HTML>")
out.println("<H1> Mi Primer Servlet </H1>");
out.println("<BR> <H2>Fecha y hora: "+(new Date())+"<H2>");
out.println("</HTML>");
out.close();
}
}
Imports necessary classes
This is for the Date class
Example 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("<HTML>")
out.println("<H1> Mi Primer Servlet </H1>");
out.println("<BR> <H2>Fecha y hora: "+(new Date())+"<H2>");
out.println("</HTML>");
out.close();
}
}
Every servlet extends HttpServlet
Overwrites doGet method
Example 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("<HTML>")
out.println("<H1> Mi Primer Servlet </H1>");
out.println("<BR> <H2>Fecha y hora: "+(new Date())+"<H2>");
out.println("</HTML>");
out.close();
}
}
Tells the browser the content
type of the answer
Gets writer to browser from response
parameter
Example 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("<HTML>")
out.println("<H1> Mi Primer Servlet </H1>");
out.println("<BR> <H2>Fecha y hora: "+(new Date())+"<H2>");
out.println("</HTML>");
out.close();
}
}
Get date and time from system
Print
data
to
browser
Close connection to browser
Running 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
A 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
import 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("<H1> A web page counter </H1>");
out.println("<HR>");
out.println("This servlet was accessed "+count+" time(s)");
out.println("<HR>");
out.println("Your computer is "+req.getRemoteHost());
out.println("<HR>");
out.close();
}
}
import 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("<H1> A web page counter </H1>");
out.println("<HR>");
out.println("This servlet was accessed "+count+" time(s)");
out.println("<HR>");
out.println("Your computer is "+req.getRemoteHost());
out.println("<HR>");
out.close();
}
}
import 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("<H1> A web page counter </H1>");
out.println("<HR>");
out.println("This servlet was accessed "+count+" time(s)");
out.println("<HR>");
out.println("Your computer is "+req.getRemoteHost());
out.println("<HR>");
out.close();
}
}
Increments counter every time doGet
is called by the web server
import 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("<H1> A web page counter </H1>");
out.println("<HR>");
out.println("This servlet was accessed "+count+" time(s)");
out.println("<HR>");
out.println("Your computer is "+req.getRemoteHost());
out.println("<HR>");
out.close();
}
}
Sine Qua Non
import 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("<H1> A web page counter </H1>");
out.println("<HR>");
out.println("This servlet was accessed "+count+" time(s)");
out.println("<HR>");
out.println("Your computer is "+req.getRemoteHost());
out.println("<HR>");
out.close();
}
}
Print
data
to
browser
What 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
public 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("<H1> A web page counter </H1>");
outBrowser.println("<HR>");
.....
.....
}
}
public 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("<H1> A web page counter </H1>");
outBrowser.println("<HR>");
.....
.....
}
}
Try to open the
file when
the servlet is
called the first time
public 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("<H1> A web page counter </H1>");
outBrowser.println("<HR>");
.....
.....
}
}
Read the line and
convert the content
to its integer
value
public 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("<H1> A web page counter </H1>");
outBrowser.println("<HR>");
.....
.....
}
}
public 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("<H1> A web page counter </H1>");
outBrowser.println("<HR>");
.....
.....
}
}
After count is incremented,
open the file to write
(overwrite),
write the new number
and close file
public 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("<H1> A web page counter </H1>");
outBrowser.println("<HR>");
.....
.....
}
}
The rest
is
the
same
Enter the password to open this PDF file:
File name:
-
File size:
-
Title:
-
Author:
-
Subject:
-
Keywords:
-
Creation Date:
-
Modification Date:
-
Creator:
-
PDF Producer:
-
PDF Version:
-
Page Count:
-
Preparing document for printing…
0%
Comments 0
Log in to post a comment