Upload
carmelo
View
240
Download
0
Embed Size (px)
Citation preview
8/9/2019 Fundamentos de Java Servlets
1/43
Fundamentos de Java Servlets
8/9/2019 Fundamentos de Java Servlets
2/43
para entender las JSP (javaServer Pages) es
preciso comprender la estructura que les sirve
de base
los servlets de Java
8/9/2019 Fundamentos de Java Servlets
3/43
los servlets son clases java que amplian la
funcionalidad de un servidor Web mediante la
generacin dinmica de pginas Web.
un entorno de ejecucin denominado motor
de servlets administra la carga y descarga del
servlet y trabaja con el servidor Web para
dirigir peticiones a los servlets y enviar la
respuesta a los clientes
8/9/2019 Fundamentos de Java Servlets
4/43
aparecen en 1997
se han convertido en el entorno dominante de
la programacin Java en servidor y en unportal de uso generalizado para los servidores
de aplicaciones.
8/9/2019 Fundamentos de Java Servlets
5/43
Ventajas
Rendimiento.
CGI (common GateWay Interface): las tecnologias
anteriores como la Interfaz de pasarela comn
inician un proceso por cada peticin que les llega.
los servlets se cargan cuando los solicitamos por
primera vez y permanecen en memoria.
motor servlets carga un solo ejemplar o instancia de la clase
Servlet y le lanza peticiones empleando un conjunto desubprocesos disponibles (threads o hilos)
mejor del rendimiento es importante.
8/9/2019 Fundamentos de Java Servlets
6/43
Simplicidad los applets de Java del cleinte se ejecutan en una
mquina virtual proporcionada por el navegador Web.
genera problemas de compatibilidad que incrementanla complejidad y limitan la funcionalidad de losapplets.
los servlets simplifican pq se ejecutan en una mquinavirtual del entorno del servidor controlado y solonecesitan el HTTP bsico para comunicarse con susclientes.
NO es preciso que el cliente tenga un softwareespecial, ni en caso de navegadores antiguos
8/9/2019 Fundamentos de Java Servlets
7/43
Sesiones HTTP
aunque los servidores HTTP NO tienen capacidad
para recordar detalles de una peticin previa del
mismo cliente, la interfaz API Servlet ofrece una
clase HttpSession que permite superar esta
limitacin
API: Application Programming Interface : Interfaz
de programacin de aplicaciones
8/9/2019 Fundamentos de Java Servlets
8/43
Acceso a la tecnologa Java
al ser aplicaciones Java, los servlets tienen acceso
a todas las caractersticas Java
uso de subprocesos
acceso a redes
conectividad a bases de datos
8/9/2019 Fundamentos de Java Servlets
9/43
las pginas JSP, que se convierten
automticamente en servlets, heredan todas
estas ventajas.
8/9/2019 Fundamentos de Java Servlets
10/43
Ciclo de vida del servlet
como sus equivalentes applets del cliente, los
servlets ofrecen mtodos a los que recurrimos
cuando ocurren eventos especficos en un
contexto ms amplio.
la programacin en este entorno obliga a
escribir mtodos predefinidos (retrollamada
callback) a los que vamos llamando segn el
programa que los gestiona los requiere
8/9/2019 Fundamentos de Java Servlets
11/43
un applet ofrece mtodos como init
start
paint
stop
destroy
a los que el entorno de ejecucin del applet llama como
respuesta a las acciones realizadas por el usuario. la clase base java.applet.Applet ofrece implementacionespredeterminadas para estos mtodos
solo sobreescribimos aquellos que ocurren durante los eventoscon los que estamos trabajando
8/9/2019 Fundamentos de Java Servlets
12/43
por ejemplo, debemos escribir un mtodo init
si tenemos que crear componentes GUI
(Graphical User Interface)
8/9/2019 Fundamentos de Java Servlets
13/43
de forma similar, los servlets operan en el
contexto de un modelo de peticin y
respuesta administrado por el motor de
servlets
el motor de servlets se encarga de:
8/9/2019 Fundamentos de Java Servlets
14/43
cargar un servlet cuando lo solicitamos por
primera vez
llamar al mtodo init del servlet manejar todas las peticiones que reciba
llamando al mtodo del servlet service
llamar al metodo destroy de cada servlet alterminar la ejecucin
8/9/2019 Fundamentos de Java Servlets
15/43
igual que con los applets, hay clases base
estndar
javax.servlet.GenericServlet
javax.servlet.HttpServlet
que implementan los mtodos de retrollamada del
servlet.
la programacin de servlets consiste en subclasificaruna de estas clases y sobreescribir el mtodo necesario
para llevar a cabo la tarea.
8/9/2019 Fundamentos de Java Servlets
16/43
init
cuando el motor de servlets recibe la peticin
de un servlet, comprueba si el servlet ya est
cargado
si no, el motor de servlets emplea un
clargador de clases para conseguir la clase
servlet concreta requerida en este caso y
despus invoca a su constructor para obtenerun ejemplar del servlet.
8/9/2019 Fundamentos de Java Servlets
17/43
una vez cargado el servlet, pero antes de que
preste servicio a las peticiones, el motor de
servlets llama a un mtodo de inicializacin
con la firma
public void init (ServletConfig config) throws
ServletException{
}
8/9/2019 Fundamentos de Java Servlets
18/43
solo se llama a este mtodo una vez, justo antesde uqe el servlet se ponga en funcionamiento.
el objeto ServletConfig da acceso al contexto del
servlet y a cualquier parmetro de inicializacincodificado para el servlet.
el objeto config se guarda como una variable deinstancia
esto lo hace el mtodo init de GenericServlet
por eso es importante llamar a super.init(config)desde el mtodo init() de cualquier subclase
8/9/2019 Fundamentos de Java Servlets
19/43
dentro del mtodo init, el servlet puederealizar cualquier tarea de arranque que seanecesaria
establecimiento de conexiones a base de datos si hay algun error que inhabilite al sevlet para manejarpeticiones, se debe lanzar una UnavailableException.
es una subclase de ServletException que puede incluiropcionalmente el nmero de segundos durante los que seespera que el servlet no est disponible
si no se especifica, se supone que el servlet no est disponiblenunca
evita que las peticiones se dirijan al servlet
8/9/2019 Fundamentos de Java Servlets
20/43
service
tras init con xito
servlet preparado para aceptar peticiones
de manera predeterminada solo se crea unejemplar del servlet y el motor de servlets
lanza cada peticin al ejemplo en un
subproceso diferente
8/9/2019 Fundamentos de Java Servlets
21/43
el mtodo del servlet al que llamamos tiene la
firma
public void service(ServletRequest request,
ServletResponse response) throws
ServletException, IOException);
8/9/2019 Fundamentos de Java Servlets
22/43
el motor de servlets construye el objeto
ServletRequest que acta como envoltorio
(wrapper) de la informacin sobre el cliente y
la peticin.
la proteccn incluye la identidad del sistema
remoto, los parmetros de la peticin y
cualquier flujo de entrada relacionado con lapeticin.
8/9/2019 Fundamentos de Java Servlets
23/43
el objeto ServletResponse ofrece medios para
que el servlet comunique sus resultados al
solcitante original.
da mtodos para abrir un flujo de salida y para
especificar el tipo y la longitud del contenido.
8/9/2019 Fundamentos de Java Servlets
24/43
aunque el mtodo service() es importante, se usapoco.
la razn es que la mayora de los servlets estn
diseados lpara operar en el entorno HTTP hay un paquete especializado javax.servlet.http
la mayor parte de los servlets NO extiendendirectamente javax.servlet.GenericServlet sino de susubclase javax.servlet.http.HttpServlet
esta subclase da mtodos especficos para cada peticinHTTP
doGet maneja peticiones Get
doPost maneja las posty as
8/9/2019 Fundamentos de Java Servlets
25/43
las firmas de estos mtodos emplean
versiones especficas HTTP de los objetos de
peticin y respuesta
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws
SerlvetException, IOException;
8/9/2019 Fundamentos de Java Servlets
26/43
el mtodo service(Request, Response) de
HttpServlet transforma los objetos de peticin
y respuesta en sus equivalentes especificos
HTTP
despus llama a service(HttpServletRequest,
HttpServletResponse) que eximina y peticin y
llama a doGet doPost u otro mtodoapropiado
8/9/2019 Fundamentos de Java Servlets
27/43
un servlet HTTP normal incluye la
sobreescritura de uno o ms de estos
mtodos subsidiarios, NO la sobreescritura de
service()
8/9/2019 Fundamentos de Java Servlets
28/43
destroy
la especificacin servlet permite a un motorde servlets descargar un servlet en cualqueirmomento.
esto se puede hacer para conservar losrecursos del sistema o como preparacin parael cierre del motor de servlets.
el motor de servlets notifica a cada servletcargado que esto es a punto de ocurrirllamando al mtodo destroy
8/9/2019 Fundamentos de Java Servlets
29/43
al sobreescribir destroy liberamos cualquier
recurso asignado durante init
al llamar a destroy NO se descarga el servlet.
esto solo puede hacer le motor de servlets
8/9/2019 Fundamentos de Java Servlets
30/43
8/9/2019 Fundamentos de Java Servlets
31/43
Solucin
package eltuyo;
importjava.io.*;importjava.text.*;importjava.util.*;importjavax.servlet.*;importjavax.servlet.htt p.*;
publicclass K2MServlet extends HttpServlet{
private static final DecimalFormat FMT= new DecimalFormat("#0.00");
private static final String PAGE_TOP=
+ ""+ ""+ "Fuel Efficiency Conversion Chart"+ ""+ ""+ ""+ "Fuel Efficiency Conversion Chart"+ ""+ ""+ "Kilometers per Liter"+ "Miles per Gallon"+ ""
;
private static final String PAGE_BOTTOM =
+""
+ ""+ ""+ ""
;
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException{
response.setContentType("text/html");PrintWriter out = response.getWriter();
out.println (PAGE_TOP );
for (double kmpl = 5 ; k mpl
8/9/2019 Fundamentos de Java Servlets
32/43
importjava.io.*;importjava.text.*;importjava.util.*;importjavax.servlet.*;
importjavax.servlet.http.*;
Estas instrucciones identifican ante el compilador quevamos a utilizar las clases de los paquetes de servletsgenricos y especficos HTTP
las instrucciones import no son estrictamentenecesiarias, pero as hacemos referencia a las clasesms fcilmente
8/9/2019 Fundamentos de Java Servlets
33/43
public class K2MServlet extends HttpServlet
se necesita al menos un servlet para implementar
la interfaz javax.servlet.Servlet para simplificar la escritura del servlet, la API
Servlet nos da una implmentacin bsica de estainterfaz llamada GenericServlet.
tb nos da una subclase especfica para HTTPHttpServlet uqe es la clase base de uso msfrecuente para los servlets.
8/9/2019 Fundamentos de Java Servlets
34/43
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException
nuestro servlet NO presenta requisitos especiales paralas acciones de arranque y terminacin, as que solosobreescribimos el mtodo doGet.
invocamos a este mtodo desde el mtodo service()de la superclase HttpServlet si el mtodo de lapeticin es GET
8/9/2019 Fundamentos de Java Servlets
35/43
response.setContentType("text/html");
antes de escribir los resultados al cliente,
necesitamos especificar las cabeceras HTTP que
queremos enviar.
en nuestro caso, la nica es Content-Type a la que
asignamos text-html
8/9/2019 Fundamentos de Java Servlets
36/43
PrintWriter out = response.getWriter();
la creacin de una pgina Web consiste en escribir
instrucciones HTML a un flujo de salida asociado a lapeticin HTTP.
este flujo de salida se puede obtener del objeto response,empleando su mtodo getOutputStream() o su mtodogetWriter()
depende si vamos a escribir datos binarios o caracteres.
el servlet debe escoger uno de estos dos mtodos no puede invocar ambos
si escribirmos HTML ordinario usamos getWriter para obtener un escritode caracteres
8/9/2019 Fundamentos de Java Servlets
37/43
ahora a imprimir nuestra tabla HTML.
hemos codificado la cabecera y los pies de
pgina en las variables de cadena estticasPAGE_TOP Y PAGE_BOTTOM
imprimimos la tabla mediante un bucle que
afecta al intervalo de conversin
8/9/2019 Fundamentos de Java Servlets
38/43
out.println(PAGE_TOP);
el bucle for
out.println(PAGE_BOTTOM);
8/9/2019 Fundamentos de Java Servlets
39/43
for (double kmpl = 5 ; k mpl
8/9/2019 Fundamentos de Java Servlets
40/43
para ejecutar el servlet, primero debemos
compilarlo.
podemos usar CLASSPATH.
8/9/2019 Fundamentos de Java Servlets
41/43
despus, en funcin del motor de servlets,
podramos necesitar describir el servlet en
descriptor de despliegue de la aplicacin Web
/WEB-INF/web.xml
para un servlet sencillo, la descrpcin solo es una
etiqueta con su etiqueta hija
y elementos
8/9/2019 Fundamentos de Java Servlets
42/43
para modificar el fichero web.xml necesitamos
reiniciar el motor de servlets antes de que los
cambios tengas efecto.
8/9/2019 Fundamentos de Java Servlets
43/43
en Eclipse debemos guardar en
D:\Archivos de programa\Apache SoftwareFoundation\Tomcat
6.0\webapps\examples\WEB-INF\classes