Está en la página 1de 19

I. de Telecomunicacin. Software de Comunicaciones Tema 6 Apartado 1.

Nivel de Aplicacin - 1
Tema 6: Nivel de aplicacin


Internet, Intranet y Extranet

Internet: red de mbito mundial construida sobre TCP-UDP/IP +correo +Web +...
Caractersticas:
coste bajo y calidad de servicio incontrolada
gran cobertura y poca seguridad
Intranet: red (normalmente con arquitectura internet) de mbito limitado
(corporativo)
Firewalls suelen conectar la Intranet con el exterior
Extranet: red privada que utiliza Internet pblica nicamente como red de
transporte
Pasarelas seguras envan la informacin encriptada a travs de Internet
(IPsec, )



6.1 Nivel de aplicacin

Provee servicios a los usuarios
Gran variedad de servicios
Facilidad de uso ->es lo ms importante
Fuerte tendencia hacia la integracin en Web
Integracin de Web, correo, agendas, ofimtica,...
Microsoft: Explorer, Exchange Server, Office,
Google: Chrome, Desktop, Blogger, Gmail,



W3C - WWW Consortium

WWW Consortium
Slo pueden participar empresas
Trata de anticiparse a las implementaciones
con normas que abran caminos nuevos
funcionamiento muy diferente a la IETF, que est basado en
consenso amplio e implementaciones de referencia
Normas W3C
HTTP, HTML, XML, MathML, SMIL, ....
Ms informacin en: http://www.w3.org


I. de Telecomunicacin. Software de Comunicaciones Tema 6 Apartado 1. Nivel de Aplicacin - 2
Elementos de aplicacin

Direccionamiento de aplicacin
URI - Uniform Resource Identifier
Identificador de recurso de aplicacin o servicio
Contenidos y formatos de informacin
MIME (Multipurpose Internet Mail Extentions)
SGML, HTML, XML, ....
Protocolos
Web: HTTP (HyperText Transfer Protocol)
Correo: SMTP (Simple Mail Transfer Protocol)
News: NNTP (Network News Transfer Protocol)



Identificacin de recursos

URI: Identificador de recurso uniforme
Uniformiza el acceso a mltiples servicios
Definido en: RFC 2396:
Uniform Resource Identifiers (URI): Generic Syntax
T. Berners-Lee, R. Fielding, U.C. Irvine, L. Masinter
Tipos de URI
URL: Uniform Resource Locator
Localiza un recurso unvocamente en un lugar fsico de la red
Lugar fsico: Recurso en un host de Internet
URN: Uniform Resource Name
Nombre de un recurso, independiente de posicin
Se defini en la norma, pero no se utiliza
no hay servicios debido a la falta de implementaciones


Formato de un URL

<prot>://<authority>/<path>;<par>?<query>#<frag>

prot: esquema o protocolo. Esquema de acceso a un servicio de usuario.
authority: lugar en la red +informacin de login
path: camino al recurso dentro del host
par: parmetros y modos del protocolo. Se utiliza en ftp, prospero, ..
query: solicitud de informacin. Se utiliza en CGI, formularios, ..
frag: inicialmente no formaba parte del URL, sino de la aplicacin. Se denomina:
anchor, fragment, ref o section.


I. de Telecomunicacin. Software de Comunicaciones Tema 6 Apartado 1. Nivel de Aplicacin - 3
Ejemplos de URLs

acceso a pgina web
http://www.epsig.uniovi.es/asignaturas/elprog_tel/practicas0405/practicas_g
uiadas_0405.html#EDP21
Si no se especifica fichero: busca el fichero index.html
acceso web relativo al anterior
URL anterior:
http://www.it.uniovi.es/material/telecomunicacion/softcom_teleco/Tema03_1
_socketTCP.pdf
URL relativo: Tema03_2_socketUDP.pdf
Relativo al directorio accedido en la ltima referencia
Acceso a:
http://www.it.uniovi.es/material/telecomunicacion/softcom_teleco/Te
ma03_2_socketUDP.pdf
Query (pregunta a travs de web)
http://www.bb.es/cgi-bin/busca.cgi?nombre=Paco&apellido=Perez
Incluye 2 parmetros de busca: nombre y apellido
Se utiliza con: formularios, queries, CGI, PHP, ASP,
acceso a servidor ftp
ftp://neira:miclave@www.it.uniovi.es
acceso a cuenta
telnet:// paco:suclave@coruxa.epsig.uniovi.es
acceso a fichero
file:///usr/lib/arch.txt
acceso a buzon
mailto:neira@uniovi.es
acceso a grupo de news
news:comp.lang.java.machine


Protocolos o esquemas

Cada protocolo suele dar acceso a un servicio
J ava 1.1 soporta:
file: acceso local a ficheros
ftp: transferencia remota de ficheros
gopher: acceso a repositorio gopher
http: acceso a informacin HTML y Web
mailto: envio a buzones de correo electrnico
Otros: appletresource, doc, netdoc, systemresource, verbatim
IANA:
encargada de reservar nuevos esquemas
Con el formato de URL asociado


I. de Telecomunicacin. Software de Comunicaciones Tema 6 Apartado 1. Nivel de Aplicacin - 4
Formato de <authority>

authority identifica un host
A travs de una direccin IP o de dominio
Tambin puede incluir un identificador de usuario
Incluyendo contrasea

<authority>=<user>:<password>@<host>:<port>

user: nombre de usuario (nombre de cuenta de usuario)
password: palabra de paso para entrada en la cuenta de usuario
host: direccin IP o de dominio que identifica un host en la red
port: direccin de puerto de acceso al recurso


Ejemplo: Construccin de URLs
























La clase URL

Gestiona acceso a recursos de aplicacin
Contiene
Constructores de un URL
construccin y anlisis de un URL
Selectores de campos de un URL
Para extraer partes de un URL
Acceso al recurso remoto
Se realiza al invocar openStream()
Objetos URLConnection
URL utiliza URLConnection en el acceso a recursos
Se utiliza una factora de URLConnections



import java.net.*;
public class urls {
public static void main (String args[]) {
try {
URL u1 =new URL("http://www.uniovi.es/hola.html#sec3");
URL u2 =new URL(u1, "ejemplos/cap1#seccion3");
System.out.println(u1);
System.out.println(u2);
System.out.println("Protocol: " +u2.getProtocol());
System.out.println("Host: " +u2.getHost());
System.out.println("Port: " +u2.getPort());
System.out.println("File: " +u2.getFile());
System.out.println("Anchor: " +u2.getRef());
}catch (Exception e) {System.out.println(e);}
}
}
I. de Telecomunicacin. Software de Comunicaciones Tema 6 Apartado 1. Nivel de Aplicacin - 5
Clase URL (I)




Clase URLEncoder

Codifica URLs en diferentes formatos de codificacin
A formato MIME: x-www-form-urlencoded
El mtodo decode aparece en J ava 1.2
Mtodo
public static String encode(String s, String enc)
Algoritmo de codificacin
caracteres a-z, A-Z, 0-9: no se modifican
Espacio en blanco: se transforma en +
Resto de caracteres: codificados en hexadecimal (%xy)
Encode no codifica bien: query, anchor, etc
Llevan carateres especiales (?, =, &, ..)
El mtodo public static String decode(String s, String enc) throws Exception
Realiza la decodificacin inversa
Pertenece a la clase URLDecoder


public final class URL extends Object implements Serializable {

public URL(String protocol, String host, int port, String file)
throws MalformedURLException // creacin de un URL por partes
public URL(String spec) throws MalformedURLException
// parsing de un URL
public URL(URL context, String spec)
throws MalformedURLException // spec: URL relativo a context

public int getPort()
public String getProtocol()
public String getHost()
public String getFile()
public String getRef() // seccin o referencia
protected void set (String protocol, String host, int port,
String file, String ref)
public int hashCode()
public boolean equals(Object obj) // igualdad de URLs
public boolean sameFile(URL other) // igualdad de fichero

// algunas extensiones de J ava 1.3
public String getPath() // igual que getFile()
// se introduce por compatibilidad con RFC2396
public String getQuery()
public String getUserInfo()
public String getAuthority()
........
public final Object getContent(Class[] classes) throws IOException
........
I. de Telecomunicacin. Software de Comunicaciones Tema 6 Apartado 1. Nivel de Aplicacin - 6
Ejercicio aplicacin-1

Modificar el ejemplo urls para construir un URL con query
Ejemplo:
http://www.bb.es/cgi-bin/bu.cgi?nombre=Paco&apellido=Perez+Acebo
El programa modificado debe extraer los parmetros del query e
imprimirlos por la consola



Ejemplo: webAccess

Programa de acceso a un servidor Web
Crea un objeto URL de acceso a un recurso
Abre el flujo de entrada
Lee y presenta en pantalla la informacin recibida
Interpreta los octetos como caracteres ISO Latin-1
invocacin:
>java webAccess <url>
>java webAccess http://www.it.uniovi.es


Ejemplo: acceso a travs de URL








import java.io.*; import java.net.*

public class webAccess {
public static void main (String args[]) {
String line;
URL u;

if (args.length >0) {
try {
u = new URL(args[0]);
LineNumberReader webpag =new LineNumberReader (
new InputStreamReader (
new DataInputStream(u.openStream())),"iso-8859-1"));
while ((line =webpag.readLine()) !=null) {
System.out.println(line);
}
}catch (Exception e) {System.out.println("webAccess excepcion: "+e);}
} }}
I. de Telecomunicacin. Software de Comunicaciones Tema 6 Apartado 1. Nivel de Aplicacin - 7
Clase URL (II)





















Correo electrnico

Aplicacin que permite enviar mensajes
en formato electrnico
entre dos buzones de correo
Formato de mensaje definido en RFC 822 (1982)
Slo permite texto ASCII en cabecera y cuerpo
Contenidos no-ASCII se transcodifican
hexadecimal, uuencode, base 64, ...
Diseado para uso con SMTP (Simple Mail Transfer Protocol, RFC 821)
Otros protocolos: POP3, IMAP, ...



MIME

Generalizacin del correo electrnico
Uso de mensajes como acarreadores de contenidos
Normalizar la codificacin de informacin no-ASCII
MIME (Multipurpose Internet Mail Extensions):
Permite enviar contenidos con mltiples formatos
texto, imagen, audio, vdeo, mensaje, aplicacin, ,...
Definido en RFC 1521 (extiende RFC 822)
Diseado para ser extensible
El uso de MIME se ha extendido a otros contextos de aplicacin: Web, S.O., ...








..........
public final InputStream openStream() throws IOException
// Abre la conexin http y accede al recurso
public URLConnection openConnection() throws IOExcept.
// acceso a la factora de URLConnection
public final Object getContent() throws IOException
// acceso a URLConnection y objetos MIME
public String toString()
public String toExternalForm()
public static synchronized void
setURLStreamHandlerFactory(URLStreamHandlerFactory fac)
// instalar una factora de URLConnection
}
I. de Telecomunicacin. Software de Comunicaciones Tema 6 Apartado 1. Nivel de Aplicacin - 8
Extensines MIME

MIME introduce 5 nuevos campos en un mensaje
MIME-Version: indica la versin utilizada
Ejemplo: MIME-Version: 1.0 (acorde RFC1521)
Content-Type: indica el tipo de contenido acarreado
Ejemplo: Content-Type: text/html
Content-Transfer-Encoding: codificacin utilizada
Ejemplo: Content-Transfer-Encoding: base64
Content-ID: identificador nico en la red
Ejemplo: Content-ID: <id23457689@gilito.it.uniovi.es>
Content-Description: texto descriptivo
Ejemplo: Content-Description: Pgina de prueba del servicio


Tipos de contenidos MIME

Campo Content-Type
Tiene dos partes: tipo / subtipo
Tipos:
application, audio, image, message, multipart, text, video,
extension-token
IANA coordina la definicion de nuevos tipos/subtipos
ftp://ftp.isi.edu/in-notes/iana/assignments/media-types/media-types
Ejemplos:
image/gif, image/jpeg, image/png, ...
text/plain, text/html, message/rfc822, ......
application/postcript, application/msword, ...


SGML y HTML

SGML (Standard Generalized Markup Language)
Norma ISO 8879:1986 de descripcin de documentos
HTML (HyperText Markup Language)
Subconjunto de SGML: para describir hipertexto.
Evoluciona rpidamente para facilitar creacin de servicios Web
interactivos
HTML 1. Se define por Tim Berners-Lee en el CERN (1989)
HTML 2. Adoptada en Internet (RFC1866)
HTML 4. Versin utilizada actualmente
Recomendacin W3C: REC-html40-19980424 (Abril-98)
El futuro: XML, RDF (Web Semntico), ....










I. de Telecomunicacin. Software de Comunicaciones Tema 6 Apartado 1. Nivel de Aplicacin - 9
Caractersticas HTML

Descripcin de la semntica de un documento
Describe los elementos de que consta
Ttulo, subttulo, secciones, prrafos, figuras...
No describe su formato de presentacin
Cada visor es libre de escoger el formato de presentacin
Un elemento se define
Delimitndolo entre marcas de principio y fin
<TITLE>Titulo .. </TITLE>, <H1>Cabecera nivel 1 </H1>, ...
Algunos pueden llevar parmetros
<A HREF="http://www.it.uniovi.es">Area Ing. Telematica</A>
Algunos comandos no tienen terminador
<P>indica final de prrafo



Ejemplo de pgina HTML




I. de Telecomunicacin. Software de Comunicaciones Tema 6 Apartado 1. Nivel de Aplicacin - 10
Cdigo de pgina HTML




http

Protocolo de acceso a servidores Web
Protocolo sin estado de tipo pregunta/respuesta
Acceso tpico: carga de pgina Web
Pregunta: tienes esta pgina disponible
Respuesta: devuelve pgina
HTTP (HyperText Transfer Protocol)
HTTP 1.0 (RFC 1945) muy utilizado
RFC informativo, se desarroll en el proyecto Web inicial
HTTP 1.1 (RFC 2068) empieza a ser utilizado
Evolucin de HTTP:
WebDAV (Web. Distrib. Authoring and Versioning). Extension de
HTTP.
RFCs 2518 y 3253 (http://www.webdav.org)
Propuestas del W3C
SOAP (Simple Object Access Prot, W3C). Servicio RPC
(Remote Procedure Calling), mensajes XML.
WDSL (Web Services Description Language).
UDDI (Universal Description, Discovery & Integration).
(http://www.uddi.com)
J 2EE (J ava 2 Enterprise Ed., SUN) y CLI (Common Language
Infrastructure, Microsoft)



<HTML><HEAD><TITLE>Ejemplo pgina HTML </TITLE></HEAD><BODY>

<H1>Ejemplo de Cabecera HTML </H1>

El texto subrayado referencia un tutorial de J ava:
<A HREF="http://java.sun.com/tuto/index.html">Tutorial</A><br>
A continuacin aparece una lista no numerada y despus una tabla:

<UL>
<LI>elemento <FONT COLOR=red>rojo</FONT></LI>
<LI>elemento <B>en negrita</B></LI>
<LI>elemento <SUB>con subndice</SUB></LI>
</UL>

<TABLE BORDER>
<TR><TD>Primera celda <br>de la tabla</TD>
<TD><IMG SRC=iconos.gif"></TD></TR>
<TR><TD>Celda 21</TD><TD>Celda 22</TD></TR>
</TABLE>

</BODY></HTML>
I. de Telecomunicacin. Software de Comunicaciones Tema 6 Apartado 1. Nivel de Aplicacin - 11
Caracteristicas de http

Protocolo sin estado de tipo pregunta/respuesta
Comandos (HTTP 1.0)
GET: Pedir un fichero al servidor
HEAD: Pedir la cabecera de un fichero al servidor
POST: Enviar un formulario al servidor
PUT: Cargar un fichero en el servidor
Respuestas (HTTP 1.0)
200 OK // Operacin realizada satisfactoriamente
201 Created // Fichero de datos creado en POST
400 Bad request // Comando enviado incorrecto
....
Servidor: introduce estado en fichero (cookies)
Utiliza servicio TCP (1 conexin por acceso)
Servidor utiliza puerto 80 por defecto



Protocolo HTTP: ejemplo

1) Cliente establece conexin TCP con servidor normalmente en puerto 80
2) Cliente envia pregunta (comando HTTP)












3) Servidor envia respuesta














4) Cierre de la conexin TCP
Por cualquiera de los dos extremos


GET /index.html HTTP/1.0
Accept: text/html
Accept: text/plain
Accept: image/gif
Accept: image/jpeg
User-Agent: Netscape-Navigator/4.03

// linea en blanco indica final de pregunta
HTTP/1.0 200 OK
Server: NCSA/1.2.3
MIME-version: 1.0
Content-type: text/html
Content-length: 608 // tamao HTML en bytes

<html>
<Head>
....... // fichero html
</body>
</html>
I. de Telecomunicacin. Software de Comunicaciones Tema 6 Apartado 1. Nivel de Aplicacin - 12
Ejercicio aplicacin-2

Crear un servidor que escuche en el puerto 2000 de TCP, interprete los bytes que
llegan por la conexin como ASCII y muestre el contenido en la pantalla
Conectar algunos visores html (Navigator, Explorer, ...) con ese servidor y
analizar los comandos que llegan.



Formulario: Presentacin























I. de Telecomunicacin. Software de Comunicaciones Tema 6 Apartado 1. Nivel de Aplicacin - 13
Formulario: cdigo HTML




Formularios y Queries

Permiten interaccin entre el cliente y servidor
Cliente:
Rellena los campos del formulario
Pulsa un botn submit para enviar peticin al servidor
Peticin: Get con query o Post
Ejemplo: Get con query
GET /cgi-bin/xxx.cgi?nombre=pepe&clave=t0h1%0D%0A HTTP/1.0
En formato MIME: x-www-form-urlencoded
Servidor
Recibe peticin, la procesa y devuelve respuesta
proceso habitual: bsqueda en base de datos
respuesta: pgina HTML con los datos solicitados
Algunos interfaces para consultas: CGI, PHP, ASP, ....


<HTML><HEAD><TITLE>Formulario </TITLE></HEAD><BODY>

<FORM ACTION="http://localhost:22000/cgi-bin/cgi" METHOD=get>

nombre: <INPUT TYPE=text NAME=nombre SIZE=10 MAXLENGTH=10>
clave: <INPUT TYPE=password NAME=clave><br><br>

Elija un color:<br>
<INPUT TYPE=radio NAME=color VALUE=red>rojo
<INPUT TYPE=radio NAME=color VALUE=blue CHECKED>azul
<INPUT TYPE=radio NAME=color VALUE=green>verde <br><br>

Escriba su mensaje aqu:<br>
<TEXTAREA NAME=msg ROWS=2 COLS=40>
Deje su mensaje
</TEXTAREA><br><br>

<INPUT TYPE=reset VALUE="Limpiar campos"><br>
<INPUT TYPE=submit VALUE="Enviar formulario">

</FORM></BODY></HTML>
I. de Telecomunicacin. Software de Comunicaciones Tema 6 Apartado 1. Nivel de Aplicacin - 14
Servidor de formularios

nombre: formserver
El siguiente ejemplo muestra un pseudo-servidor http
Comportamiento
Espera recibir conexiones TCP
Cuando llega una conexin
espera un comando de HTTP
Una vez recibido el comando
devuelve una pgina HTML fija


Pseudo-servidor de formularios


import java.io.*; import java.net.*;

public class formserver {
public static void main (String args[]) {
String l;
try {
ServerSocket serv =new ServerSocket(22000);
System.out.println(formserver created at port 22000.");
while (true) {
Socket c =serv.accept();
LineNumberReader i =new LineNumberReader(
new InputStreamReader(c.getInputStream()));
PrintWriter o=new PrintWriter(c.getOutputStream(), true);
while (true) {
System.out.println(l = i.readLine());
if (l.equals(" " )) break; //deteccin de final de comando
}
o.println(" HTTP/1.0 200 OK" ); // respuesta
o.println(" Server: SFCOM/1.0" );
o.println(" MIME-version: 1.0" );
o.println(" Content-type: text/html" );
o.println(" Content-length: 96" );
o.println(" " );
o.println(" <HTML> <BODY>" ); // pgina devuelta
o.println(" <H1> Servidor Sfcom </H1>" );
o.println(" muchas gracias por su transaccin" );
o.println(" </BODY> </HTML> " );
c.close();
}
}catch (IOException e) {System.err.println(e); }
}
}
I. de Telecomunicacin. Software de Comunicaciones Tema 6 Apartado 1. Nivel de Aplicacin - 15
Formulario: Respuesta




Ejercicio aplicacin-3

Modificar el ejemplo formserver para que conteste aadiendo el nombre dado
por el formulario HTML al texto
Sugerencia de mensaje de respuesta
Muchas gracias por su transaccin Sr. <valor del campo nombre>



Servidor de ficheros HTML e imgenes

nombre: jhttpimag
El siguiente ejemplo muestra un servidor http que devuelve ficheros HTML e
imgenes gif y jpeg

Comportamiento
Se invoca con
java jhttpimag directorio_base puerto fichero
slo permite acceder a ficheros contenidos en el directorio base
si no se especifica el puerto, toma 80 por defecto
si no se especifica el fichero, toma index.html por defecto
Espera recibir conexiones TCP
Cuando llega una conexin
arranca una hebra para atender peticiones
Una vez recibida la peticin
comprueba que es una peticin GET de http
identifica el tipo de fichero solicitado: texto o imagen
comprueba que el fichero est en el directorio especificado como
parmetro
devuelve el fichero

I. de Telecomunicacin. Software de Comunicaciones Tema 6 Apartado 1. Nivel de Aplicacin - 16
Servidor de imgenes: jhttpimag


import java.net.*; import java.io.*; import java.util.*;
public class jhttpimag {
private File baseDirectory;
private String indexFileName="index.html";
private ServerSocket server;

public jhttpimag(File baseDirectory, int port, String indexFileName)
throws IOException {
if (!baseDirectory.isDirectory()) {
throw new IOException(baseDirectory +" no es un directorio");
}
this.baseDirectory=baseDirectory;
this.indexFileName =indexFileName;
this.server =new ServerSocket(port);
System.out.println("jhttpimag server acepta conexiones en puerto "+
server.getLocalPort());
System.out.println("Directorio base: " +baseDirectory);
while (true) {
try {
Socket request = server.accept();
Thread t = new Thread(
new requesthttpimag (baseDirectory, indexFileName, request));
t.start();
}catch (IOException ex) {}
} // while
} // constructor jhttpimag

public static void main(String[] args) {
File baseDir; String nomfich="index.html"; int port;
try {
baseDir =new File(args[0]);
}catch (ArrayIndexOutOfBoundsException ex) {
System.out.println("Usage: java jhttpimag directorio_base port indexfile");
return;
}
try {
port =Integer.parseInt(args[1]);
if (port <0 || port >65535) port =80;
}catch (Exception ex) {port =80;}
if (args.length==3)
nomfich=args[2];
try {
jhttpimag webserver = new jhttpimag(baseDir,port,nomfich);
}catch (IOException ex) {
System.out.println("jhttpimag server could not start because: ");
System.out.println(ex);
} } }
I. de Telecomunicacin. Software de Comunicaciones Tema 6 Apartado 1. Nivel de Aplicacin - 17
Servidor de imgenes: procesa peticiones GET

import java.net.*; import java.io.*; import java.util.*;

public class requesthttpimag implements Runnable {
private File baseDirectory;
private String indexFileName="index.html";
private Socket connection;

public requesthttpimag(File baseDirectory,
String indexFileName,
Socket request) {
if (baseDirectory.isFile()) {
throw new IllegalArgumentException(
"baseDirectory debe ser un directorio, no un fichero");
}
this.baseDirectory =baseDirectory;
try {
this.baseDirectory =baseDirectory.getCanonicalFile();
}catch (IOException ex) {}
if (indexFileName !=null) this.indexFileName=indexFileName;
this.connection=request;
}

public void run() {
String root =baseDirectory.getPath(); // for security checks

while (true) {
try {
String filename;
String contentType;
OutputStream raw=new BufferedOutputStream(
connection.getOutputStream());
Writer out=new OutputStreamWriter(raw);
Reader in=new InputStreamReader(
new BufferedInputStream(connection.getInputStream()),"ASCII");
StringBuffer requestLine=new StringBuffer();
int c;
while (true) {
c =in.read();
if (c =='\r' || c =='\n') break;
requestLine.append((char) c);
}

I. de Telecomunicacin. Software de Comunicaciones Tema 6 Apartado 1. Nivel de Aplicacin - 18

Servidor de imgenes: enva fichero

String get =requestLine.toString();
System.out.println(get); // log the request
StringTokenizer st =new StringTokenizer(get);
String method =st.nextToken();
String version ="";
if (method.equals("GET")) {
filename =st.nextToken();
if (filename.endsWith("/")) filename+=indexFileName;
contentType =guessContentTypeFromName(filename);
File theFile =new File(baseDirectory,
filename.substring(1,filename.length()));
if (theFile.canRead() // Don't let clients outside the document root
&& theFile.getCanonicalPath().startsWith(root)) {
DataInputStream fis =new DataInputStream(
new BufferedInputStream(
new FileInputStream(theFile)));
byte[] theData =new byte[(int) theFile.length()];
fis.readFully(theData);
fis.close();
out.write("HTTP/1.0 200 OK\r\n"); // send a MIME header
Date now =new Date();
out.write("Date: " +now +"\r\n");
out.write("Server: jhttpimag/1.0\r\n");
out.write("Content-length: "+theData.length +"\r\n");
out.write("Content-type: "+contentType +"\r\n\r\n");
out.flush();
raw.write(theData);
raw.flush();
} else { // can't find the file
//out.write("HTTP/1.0 404 File Not Found\r\n"); // send a MIME header
out.write("HTTP/1.0 200 OK\r\n");
Date now =new Date();
out.write("Date: " +now +"\r\n");
out.write("Server: jhttpimag/1.0\r\n");
out.write("Content-type: text/html\r\n\r\n");
out.write("<HTML>\r\n");
out.write("<HEAD><TITLE>File Not Found</TITLE>\r\n");
out.write("</HEAD>\r\n");
out.write("<BODY>");
out.write("<H1>HTTP Error 404: File Not Found</H1>\r\n");
out.write("</BODY></HTML>\r\n ");
out.flush();
}
}
else { // method does not equal "GET"

I. de Telecomunicacin. Software de Comunicaciones Tema 6 Apartado 1. Nivel de Aplicacin - 19
Servidor de imgenes: identifica tipo de fichero

else { // method does not equal "GET"
out.write("HTTP/1.0 501 Not Implemented\r\n");
Date now =new Date();
out.write("Date: " +now +"\r\n");
out.write("Server: jhttpimag 1.0\r\n");
out.write("Content-type: text/html\r\n\r\n");
out.write("<HTML>\r\n");
out.write("<HEAD><TITLE>Not Implemented</TITLE>\r\n");
out.write("</HEAD>\r\n");
out.write("<BODY>");
out.write("<H1>HTTP Error 501: Not Implemented</H1>\r\n");
out.write("</BODY></HTML>\r\n");
out.flush();
}
}catch (IOException ex) {}
finally {
try {
connection.close(); break; // sale del while
}catch (IOException ex) {}
}
}// end while
}// end run

public static String guessContentTypeFromName(String name) {
if (name.endsWith(".html") || name.endsWith(".htm")) {
return "text/html";
}else if (name.endsWith(".txt") || name.endsWith(".java")) {
return "text/plain";
}else if (name.endsWith(".gif")) {
return "image/gif";
}else if (name.endsWith(".jpg") || name.endsWith(".jpeg")) {
return "image/jpeg";
}else return "text/plain";
}
}// end requesthttpimag

También podría gustarte