Java >> Tutorial de Java >  >> Java

Ejemplo de controlador de recursos Jetty

En este ejemplo, elaboraremos controladores de recursos en Jetty. Jetty Handlers son clases que se utilizan para manejar las solicitudes entrantes. Implementan la interfaz org.eclipse.jetty.server.Handler en su propósito específico. El Controlador de recursos es un Manejador específico implementación cuyo propósito es servir contenido estático (imágenes, páginas html u otros) a través de un Jetty Server.

En este ejemplo, comenzaremos con un ejemplo Embedded Jetty y lo configuraremos mediante programación para servir contenido estático a través de un controlador de recursos. Más adelante, configuraremos un controlador de recursos a través de archivos de configuración XML en un servidor Jetty independiente.

1. Medio Ambiente

En el ejemplo, se utilizará el siguiente entorno:

  • Java 7
  • Maven 3.x.y
  • Eclipse Luna (como IDE)
  • Jetty v9.2.11 (En el ejemplo de Embedded Jetty, recuperaremos las bibliotecas de Jetty a través de Maven)

2. Creación del proyecto Maven para el ejemplo incrustado

Crearemos el proyecto Maven en Eclipse, aplicando los siguientes pasos:

  1. Ir a Archivo -> Nuevo ->Otro -> Proyecto Maven
  2. Marque Crear un proyecto simple y presione "Siguiente".
  3. Ingrese ID de grupo como:com.javacodegeeks.snippets.enterprise
  4. Ingrese el Id. de artefacto como:jetty-resourcehandler-example
  5. Presione "Finalizar".

Después de crear el proyecto, debemos agregar la siguiente dependencia a nuestro pom.xml:

<dependency>
			<groupId>org.eclipse.jetty</groupId>
			<artifactId>jetty-server</artifactId>
			<version>9.2.11.v20150529</version>
</dependency>

3. Creación de contenido estático de muestra

En esta parte, vamos a crear contenido estático trivial que se servirá a través de nuestro Embedded Jetty Server. Primero tenemos que crear un directorio para almacenar el contenido (se denomina "Base de recursos" en la terminología de Jetty), luego vamos a colocar un archivo de texto simple en él (el contenido que se va a ser servido). Los pasos se pueden resumir de la siguiente manera:

  1. Cree un directorio llamado "jcgresources ” en la carpeta del proyecto Eclipse. Esa será nuestra base de recursos en este ejemplo.
  2. Cree un archivo de texto “jcg1.txt ” con contenido trivial en el directorio “PROJECT_BASE/jcgresources”.

Ahora estamos bien para continuar con la parte de programación.

4. Creación programática de controladores de recursos en Embedded Jetty

Después de crear el contenido estático, ahora vamos a crear un servidor Jetty incrustado mediante programación. Como en nuestros ejemplos anteriores, vamos a ejecutar Embedded Jetty dentro de nuestra clase principal para simplificar las cosas.

Primero, proporcionaremos la fuente Java de nuestra clase principal, que está decorada con líneas de comentarios. Luego, vamos a discutir las líneas de comentarios para detallar nuestro ejemplo. A continuación puede encontrar el código fuente de la clase principal:

EmbeddedJettyResourceHandlerMain.java

package com.javacodegeeks.snippets.enterprise.embeddedjetty;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.ResourceHandler;


public class EmbeddedJettyResourceHandlerMain {

	public static void main(String[] args) throws Exception {
	
		Server server = new Server(8080);
		
		//1.Creating the resource handler
		ResourceHandler resourceHandler= new ResourceHandler();
		
		//2.Setting Resource Base
		resourceHandler.setResourceBase("jcgresources");

		//3.Enabling Directory Listing
		resourceHandler.setDirectoriesListed(true);
		
		//4.Setting Context Source 
		ContextHandler contextHandler= new ContextHandler("/jcg");
	
		//5.Attaching Handlers
		contextHandler.setHandler(resourceHandler);
		server.setHandler(contextHandler);

	
		// Starting the Server
		
		server.start();
		System.out.println("Started!");
		server.join();

	}
}

Ahora vamos a ampliar las líneas comentadas:

4.1 Creación del controlador de recursos

ResourceHandler es la clase que maneja las solicitudes a los recursos estáticos. Proporciona una serie de propiedades para configurar.

4.2 Configuración de la base de recursos

Resource Base es el directorio raíz del contenido estático. Es relativo a la aplicación Java. En la sección anterior, habíamos creado la base de recursos bajo el proyecto Eclipse; por lo tanto, estamos configurando la base de recursos en relación con esta base de proyectos. También es posible establecer una ruta absoluta o una ruta relativa a la ruta de clases de Java para la base de recursos.

4.3 Habilitación del listado de directorios

Listado de directorios permite listar los contenidos en los directorios de recursos. Está deshabilitado por defecto. Cuando está habilitado, Jetty proporcionará una página HTML simple que enumera el contenido del directorio; de lo contrario, dará un error HTTP 403.

4.4 Configuración de la fuente de contexto

Esta parte es opcional. Cuando creamos y establecemos un controlador de contexto, podemos establecer una raíz de contexto "/jcg" , por lo que podremos acceder a nuestros recursos a través de http://localhost:8080/jcg. Si no se configura, http://localhost:8080 apuntaría a nuestra base de recursos.

4.5 Adjuntar controladores

Esta parte es un código de placa de caldera que conecta el controlador al servidor.

5. Ejecutando el Servidor

Cuando ejecutamos la aplicación, nuestro servidor se iniciará en el puerto 8080. Como se mencionó anteriormente, podemos acceder a los recursos a través de http://localhost:8080/jcg/. Cuando abramos esta URL, la salida será la siguiente:

Figura 1:Listado de directorios para /jcg

A través de esta página de listado, podemos acceder a los recursos disponibles.

6. Otra configuración

En las secciones anteriores, proporcionamos una configuración de muestra para el manejo de recursos. Jetty proporciona una variedad de opciones de configuración para el manejo de recursos que no se detallarán en este ejemplo. Algunos de ellos son:

  • Personalizar el estilo de la lista de directorios con un archivo CSS.
  • Configuración de una página de bienvenida.
  • Configuración de varias páginas de recursos
  • Personalizar los tipos de contenido disponibles

7. Ejemplo de embarcadero independiente

Ahora vamos a configurar Resource Handler para Standalone Jetty. La configuración es similar a Embedded, solo que en formato XML. Los pasos necesarios se pueden resumir de la siguiente manera:

  1. Abrir embarcadero.xml archivo que se encuentra en JETTY_HOME/etc .
  2. Agregue la configuración XML del controlador de recursos al elemento del controlador (que se proporciona a continuación)
  3. Guarde el archivo y ejecute Jetty.

El elemento controlador en jetty.xml parece como sigue:

	<Set name="handler">
	  <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
		<Set name="handlers">
		 <Array type="org.eclipse.jetty.server.Handler">
		  <Item>
			<New class="org.eclipse.jetty.server.handler.ContextHandler">
				  <Set name="contextPath">/jcg</Set>
				  <Set name="handler">
					  <New class="org.eclipse.jetty.server.handler.ResourceHandler">
						  <Set name="directoriesListed">true</Set>
						  <Set name="resourceBase">/Users/ibrahim/jcgexamples/jcgresources</Set>
					  </New>
				  </Set>
			</New>
		  </Item>
		   <Item>
			 <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
		   </Item>
		   <Item>
			 <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
		   </Item>
		  
		 </Array>
		</Set>
	  </New>
	</Set>

Aquí, hemos establecido la raíz de contexto como /jcg; habilitó la lista de directorios y estableció la base de recursos (pero esta vez con una ruta absoluta).

8. Conclusión

En este ejemplo, hemos configurado Resource Handler para Jetty para servir contenido estático. Hemos proporcionado la configuración de los modos Embedded e Standalone de Jetty.

Etiqueta Java