Guía Gnome de WEBrick

Yohanes Santoso

Has instalado Ruby 1.8. Quieres realizar algunos desarrollos relacionados con la Web. Has oído hablar de algo llamado WEBrick que viene como estándar en Ruby. Has buscado documentación en google. Como mucho lo que has encontrado son los artículos de Eric Hodel. Has pensado "¿Dónde está la documentación?". Te sientes animoso y piensas "Usa los fuentes, Luke". Y te das cuenta de que eres un novato en Ruby y el código fuente se parece a Yoda haciendo Yoga mientras canta "que la fuerza está contigo". Luego, has pensado que la fuerza no va estar contigo por al menos otra semana. Si estabas impaciente porque quieres empezar ahora y que la fuerza la practicarás mientras haces pruebas. Puedes gritar finalmente, "lo tengo".

Espero que encuentres este artículo adecuado para empezar y que te sirva de compañía durante tu viaje hacia WEBrick. Hay también una sección de referencia a la que acudir cuando estés perdido o inseguro o ambas cosas.


Tabla de contenidos
1. Qué es WEBrick
2. Montado de Servlets
3. Servlets estándar
3.1. FileHandler
3.1.1. Modificando los tipos MIME básicos
3.1.2. DefaultFileHandler
3.2. CGIHandler
3.3. ERBHandler
3.4. ProcHandler
4. La creación de Servlet a medida
4.1. Los métodos do_
4.2. La respuesta
4.3. Controlando el número de objetos de un servlet
4.4. Cookies
4.4.1. WEBrick y las Cookies de Eric Hodel
5. Bitácoras
5.1. Bitácora de accesos
6. Tomas
7. Autenticación HTTP
7.1. Autenticación básica
7.2. Autenticación Digest
8. Convertirse en un servidor Proxy
9. Creando Host virtuales
10. Propinas y trucos
11. Referencia para la configuración
11.1. Configuración del servidor
11.2. Configuración de los FileHandlers
11.3. Configuración de la autenticación básica
11.4. Configuración de la autenticación Digest
12. Referencia de clases y módulos
12.1. HTTPRequest
12.2. HTTPUtils::FormData
12.3. HTTPResponse
12.4. Cookie
12.5. HTTPStatus
13. Glosario
14. Nota del autor
15. Licencia

1. Qué es WEBrick

Nota

Esta documentación hace referencia a la versión de WEBrick que se distribuye con Ruby 1.8.1.

WEBrick es una librería que incluye un servidor HTTP escrita por TAKAHASHI Masayoshi, GOTOU Yuuzou junto con modificaciones proporcionadas por diferentes desarrolladores y usuarios de Ruby. Comenzó a partir de un artículo titulado "Internet programming with Ruby" en una revista en red japonesa de ingeniería "OpenDesing". Y ahora, es parte de la librería estándar de Ruby.

WEBrick se puede utilizar para crear un servidor o una aplicación HTTP. También se puede utilizar como base para construir infraestructuras para aplicaciones Web como IOWA o Tofu entre otras.

También se puede utilizar para construir servidores no HTTP, como por ejemplo el servidor de horario que se encuentra en la página de WEBrick, aunque esto sería una pena ya que se pierde el soporte al protocolo HTTP que proporciona.

En el paradigma de aplicaciones Web, WEBrick ocupa un nivel bastante bajo. Para comenzar no tiene la noción de "aplicación Web". También le es desconocido el concepto de "Sesión de usuario."

Todo lo que conoce son servlets. En cuanto a lo que le concierne, cada servlet es independiente del resto. Si tiene que haber diferentes servlets trabajando juntos para proporcionar una aplicación Web, ¿adivina quién tiene que proporcionar el pegamento?. ¡Tu! Si necesitas estas funcionalidades , te recomiendo que utilices IOWA, Tofu u otros. Otras personas se han molestado en proporcionar capas adicionales sobre WEBrick, no tienes que reinventar la rueda.


	#Una utilización simple de WEBrick
	
	require 'webrick'
	server = WEBrick::HTTPServer.new
	#
	# Aquí habría que montar los manejadores
	# más adelante se explica lo que son los manejadores
	#
	# recogemos las señales para llamar a la rutina de cierre limpiamente
	['INT','TERM'].each do |signal|
		trap( signal ){ server.shutdown }
	end

	server.start

El ejemplo anterior arrancará WEBrick con una configuración por defecto, incluyendo la que dice que debe leer del puerto 80. Ahora intentaremos modificar algunos parámetros de la configuración:

  1. Vamos a leer del puerto 8080 en vez del puerto 80 (el resto del documento utilizará el puerto 8080 como puerto de lectura por defecto dado que el puerto 80 está reservado para el servidor HTTP Apache que se ejecuta en mi máquina).

  2. Los fichero a servir se encuentran en /var/www.

Para lograr esto, hay que pasar la configuración adecuada cuando se crea un objeto de la clase HTTPServer. Dado que en el resto del documento vamos a modificar la configuración y crear objetos de la clase HTTPServer con frecuencia, facilitaremos este proceso definiendo un método que lo haga todo.

	require 'webrick'
	# importamos el espacio de nombre
	# para no tener que teclear WEBrick::
	include WEBrick	
			
	def start_webrick( config={} )
		#Siempre vamos a leer el puerto 8080
		config.update( :Port=>8080 )
		server= HTTPServer.new( config )
		yield server if block_given?
		['INT','TERM'].each do |signal|
			trap( signal ) { server.shutdown }
		end
	server.start
	end #start_webrick
			
	start_webrick( :DocumentRoot=> '/var/www' )
Resultado:

[jfglez@localhost jfglez]$ w3m -dump http://localhost:8080
Index of /

 Name                          Last modified         Size
-------------------------------------------------------------------------------

 Parent Directory              2005/02/09 21:37      -
 cgi-bin/                      2005/02/10 18:54      -
 error/                        2005/02/09 21:15      -
 html/                         2005/02/09 21:53      -
 icons/                        2005/02/09 21:15      -
 perl/                         2005/02/09 21:37      -

-------------------------------------------------------------------------------

WEBrick/1.3.1 (Ruby/1.8.1/2003-12-25)
at localhost:8080