Publicado el 25 de Abril del 2017
896 visualizaciones desde el 25 de Abril del 2017
140,4 KB
13 paginas
Creado hace 17a (22/04/2008)
Java Servlets
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y Computación
Universidad Complutense de Madrid
22 de abril de 2008
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Java Servlets
¿Qué es un programa?
input
Programa
output
En pascal:
program h o l a M u n d o ( input , output );
var
nombre : String ;
begin
readLn ( nombre );
writeLn ( ’ Hola ’ , nombre );
end .
1
2
3
4
5
6
7
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Java Servlets
Un servlet
input −→ HttpServletRequest.
output −→ HttpServletResponse (X)HTML, XML.
import javax . servlet .*;
import javax . servlet . http .*;
import java . io .*;
public class H o l a M u n d o extends H t t p S e r v l e t {
public final void doGet ( final H t t p S e r v l e t R e q u e s t request ,
final H t t p S e r v l e t R e s p o n s e r e s p o n s e )
throws S e r v l e t E x c e p t i o n , I O E x c e p t i o n {
S e r v l e t O u t p u t S t r e a m out = r e s p o n s e . g e t O u t p u t S t r e a m ();
String nombre = request . g e t P a r a m t e r ( " nombre " );
r e s p o n s e . s e t C o n t e n t T y p e ( " text / html ; charset = UTF -8 " );
if ( nombre == null ) {
out . println ( " <p > Hola Mundo </ p > " );
} else {
out . println ( " <p > Hola " + nombre + " </p > " );
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Java Servlets
Servidor de aplicaciones: Tomcat
Los severlet son controlados por servidor de aplicaciones.
Tomcat: http://jakarta.apache.org/tomcat/index.html
Cuando una petición llega
1 Si el objeto de la clase no ha sido creado
1 Carga la clase
2 Crea el objeto
3 Invoca el método init.
2 Llama al método service.
Si debe eliminar al servlet llama al método destroy.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Java Servlets
Interfaz javax.servlet.Servlet
void destroy()
void init(ServletConfig config)
void service(ServletRequest req, ServletResponse res)
Clase javax.servlet.http.HttpServlet
void doGet(HttpServletRequest req, HttpServletResponse resp)
void doPost(HttpServletRequest req, HttpServletResponse resp)
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Java Servlets
Servlet contador I
public class C o n t a d o r extends H t t p S e r v l e t {
private int c o n t a d o r ;
/*
*/
M e t o d o s para g u a r d a r el c o n t a d o r a n t e s de
f i n a l i z a r y l e e r l o al e m p e z a r . . . . . . . . . . . .
private s y n c h r o n i z e d int i n c r e m e n t a () {
c o n t a d o r ++;
return c o n t a d o r ;
}
public final void doGet ( final H t t p S e r v l e t R e q u e s t request ,
final H t t p S e r v l e t R e s p o n s e r e s p o n s e )
throws S e r v l e t E x c e p t i o n , I O E x c e p t i o n {
int n = i n c r e m e n t a ();
S e r v l e t O u t p u t S t r e a m out = r e s p o n s e . g e t O u t p u t S t r e a m ();
r e s p o n s e . s e t C o n t e n t T y p e ( " text / html ; charset = UTF -8 " );
out . println ( " <p > Numero de accesos : " + n + " </p > " );
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Java Servlets
Servlet contador II
private S e r v l e t C o n f i g config ;
private final static String s t r F i c h e r o = " fichero " ;
public final void init ( final S e r v l e t C o n f i g c )
throws S e r v l e t E x c e p t i o n {
config = c ;
S e r v l e t C o n t e x t ctx = config . g e t S e r v l e t C o n t e x t ();
String fichero = config . g e t I n i t P a r a m e t e r ( s t r F i c h e r o );
try {
B u f f e r e d R e a d e r f
= new B u f f e r e d R e a d e r (
new F i l e R e a d e r ( ctx . g e t R e a l P a t h ( fichero )));
c o n t a d o r = Integer . p a r s e I n t ( f . r e a d L i n e ());
f . close ();
} catch ( F i l e N o t F o u n d E x c e p t i o n e ) {
c o n t a d o r = 0;
} catch ( I O E x c e p t i o n e ) {
c o n t a d o r = 0;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Java Servlets
Servlet contador III
public final void destroy () {
S e r v l e t C o n t e x t ctx = config . g e t S e r v l e t C o n t e x t ();
String fichero = config . g e t I n i t P a r a m e t e r ( s t r F i c h e r o );
try {
F i l e W r i t e r f = new F i l e W r i t e r ( ctx . g e t R e a l P a t h ( fichero ));
f . write ( c o n t a d o r + " \ n " );
f . close ();
} catch ( I O E x c e p t i o n e ) {
throw new R u n t i m e E x c e p t i o n ( e . g e t L o c a l i z e d M e s s a g e ());
}
}
1
2
3
4
5
6
7
8
9
10
11
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Java Servlets
Aplicación Hola I
T O M C A T _ H O M E / webapps / hola
| - - c a b e c e r a . html
‘-- pie . html
| - - build . xml
| - - c o n t a d o r . txt
| - - html
|
|
| - - prj . el
| - - src
|
|
|
|
|
|
|
|
‘-- WEB - INF
| - - C o n t a d o r . java
| - - Debug . java
| - - E n v o l t o r i o H T M L . java
| - - Fecha . java
| - - H o l a M u n d o . java
| - - I n c l u y e F i c h e r o . java
| - - Login . java
‘-- Sesion . java
| - - classes
|
|
|
|
|
|
|
|
| - - lib
| - - C o n t a d o r . class
| - - Debug . class
| - - E n v o l t o r i o H T M L . class
| - - Fecha . class
| - - H o l a M u n d o . class
| - - I n c l u y e F i c h e r o . class
| - - Login . class
‘-- Sesion . class
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Java Servlets
Aplicación Hola II
‘-- web . xml
Fichero web.xml
<? xml version = " 1.0 " e n c o d i n g = " utf -8 " ? >
< web - app >
< display - name > S e r v l e t s de prueba </ display - name >
< servlet >
< servlet - name > hola </ servlet - name >
< servlet - class > H o l a M u n d o </ servlet - class >
</ servlet >
< servlet >
< servlet - name > c o n t a d o r </ servlet - name >
< servlet - class > C o n t a d o r </ servlet - class >
< init - param >
< param - name > fichero </ param - name >
< param - value > c o n t a d o r . txt </ param - value >
</ init - param >
</ servlet >
< servlet - mapping >
< servlet - name > invoker </ servlet - name >
< url - pattern >/ http /* </ url - pattern >
</ servlet - mapping >
< servlet - mapping >
< servlet - name > invoker </ servlet - name >
28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Java Servlets
Aplicación Hola III
< url - pattern >/ servlet /* </ url - pattern >
</ servlet - mapping >
</ web - app >
22
23
24
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Java Servlets
Sesiones
Memoria entre diferentes invocaciones a servlets.
H t t p S e s s i o n sesion = request . g e t S e s s i o n ();
String nombre =( String ) sesion . g e t A t t r i b u t e ( s t r N o m b r e );
Integer n u m A c c e s o s = ( Integer ) sesion . g e t A t t r i b u t e ( s t r N u m A c c e s o s );
if ( n u m A c c e s o s == null ) {
n u m A c c e s o s = new Integer (0);
}
sesion . s e t A t t r i b u t e ( strNumAccesos , new Integer ( n u m A c c e s o s . i n t V a l u e ()+1));
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
if ( b o r r o S e s i o n != null ) {
c o n t e n i d o . append ( s e s i o n B o r r a d a ( r e s p o n s e ));
sesion . r e m o v e A t t r i b u t e ( s t r N u m A c c e s o s );
sesion . r e m o v e A t t r i b u t e ( s t r N o m b r e );
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Java Servlets
Sesiones
Reescritura de URL
Cookies
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Java Servlets
Sesiones
Toda URL debe ser codificada. Funciona tanto si tiene como si no
tiene las cookies habilitadas.
private S t r i n g B u f f e r
f o r m u l a r i o C o n t i n u a ( H t t p S e r v l e t R e s p o n s e r e s p o n s e ) {
S t r i n g B u f f e r sb = new S t r i n g B u f f e r ();
sb . append ( " < form type =\" get \" action =\" " )
/* Se c o d i f i c a la URL , para que sea
i n d e p e n d i e n t e de las c o o k i e s */
<p > < button name =\" c o n t i n u a r \" type =\" submit \" > " );
sb . append ( r e s p o n s e . e n c o d e U R L ( config . g e t S e r v l e t N a m e ()));
sb . append ( " \" >\ n " );
sb . append ( "
sb . append ( " Continuar </ button > </ p >\ n " );
sb . append ( "
sb . append ( s t r B o r r a S e s i o n );
sb . append ( " \" type =\" submit \" > Borrar sesion </ button > </ p >\ n " );
sb . append ( " </ form >\ n " );
return sb ;
<p > < button name =\" " );
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Java Servlets
Atributos
Se pueden guardar atributos
public void s e t A t t r i b u t e ( String name , Object o );
public void r e m o v e A t t r i b u t e ( String name );
public Object g e t A t t r i b u t e ( String name );
public E n u m e r a t i o n g e t A t t r i b u t e N a m e s ();
1
2
3
4
ServletRequest Atributos que sólo viven en una peti
Comentarios de: Java Servlets (0)
No hay comentarios