Método de implementación Jetty9 de múltiples proyectos y configuración de host virtual

1. Introducción

Jetty desplegará automáticamente casi todos los paquetes de guerra, directorios y archivos xml en el directorio webapps. Si el paquete de guerra, el directorio y el archivo xml tienen el mismo nombre, el orden de implementación es archivo xml> paquete de guerra> directorio. Si hay: bank.war, directorio bancario, bank.xml en el directorio webapps, donde el directorio bancario es el directorio descomprimido de bank.war, el paquete bank.war o el directorio bancario están referenciados en bank.xml El archivo xml se implementa. Si tienen nombres diferentes pero están en el mismo proyecto, el proyecto se implementará repetidamente. Por lo tanto, los paquetes war, los directorios y los archivos xml del mismo proyecto deben tener el mismo nombre.

2. Configuración de ruta de contexto de Jetty (ruta de contexto)

  • Ruta de contexto
    predeterminada De manera predeterminada, Jetty usará el nombre del proyecto en el directorio webapps como la ruta de contexto. Si el nombre del proyecto es ROOT, la ruta de contexto es /. Si coloca bank.war (o directorio de bancos) en el directorio webapps, la ruta de contexto es / bank. Si cambia el nombre de bank.war a ROOT.war, la ruta de contexto es /. Entonces, la ruta de contexto del ULR para acceder al banco es: http: // localhost: 8888 / bank

  • Ruta de contexto personalizada
    Si el método anterior no puede cumplir los requisitos, puede configurar la ruta de contexto a través del archivo xml:

  1. El primer paso: crear un archivo xml en el directorio webapps bajo el directorio raíz del muelle, el nombre puede ser arbitrario, como jetyy-webapp.xml;
  2. Paso 2: supongamos que tenemos un proyecto bank.war en el directorio webapps. Configuremos una ruta de contexto personalizada para él y agreguemos el siguiente contenido en el archivo xml:
    jetyy-webapp.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
<Configure id="GroceryWebapp" class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="contextPath">/bank888</Set>
  <Set name="war"><Property name="jetty.webapps" default="."/>/bank.war</Set>
</Configure>

Una vez completada la configuración, la ruta de contexto para acceder al sitio del banco es: http: // localhost: 8888 / bank888

3. Configurar host virtual

El alojamiento web proporciona una forma más de acceder a la web: el alojamiento web es generalmente un nombre de dominio registrado en DNS. Varios nombres de dominio corresponden a una IP. El alojamiento virtual puede resolver la misma IP que comparte una instancia del servidor Jetty.

La configuración del host virtual tiene los siguientes métodos:

  • Utilice una copia del archivo xml configurado en la ruta de contexto en el directorio webapps, como jetty-webapp.xml anterior.
  • Para todos los contextos encontrados en el directorio webapps, cree una implementación personalizada vinculando y configurando el host virtual.
  • En el caso de las aplicaciones integradas en Jetty, la configuración y el acceso del host virtual también se pueden lograr llamando directamente a la API
  • Use WEB-INF / jetty-web.xml para configurar el host virtual ( obsoleto )

3.1 El nombre del host virtual

Jetty admite los siguientes nombres de host virtuales en este formulario:

  • www.hostname.com, un nombre de host totalmente calificado como este. Dicha configuración se puede recibir mediante el acceso desde www.hostname.com y hostname.com
  • .hostname.com, utiliza comodines para limitar el host, pero solo coincide con cualquier nombre del primer nivel, como .foo.com puede coincidir con www.foo.com y m.foo.com, pero no concuerda con www.other.foo.com.
  • 10.0.0.2, la dirección IP también se puede usar como un nombre de host virtual, lo que indica que el contexto es procesar las solicitudes recibidas desde el puerto del servidor sin el nombre de host especificado
  • @ConnectorName, el nombre de la conexión, este no es estrictamente un host virtual, solo coincide con la solicitud recibida por el conector cuyo nombre se establece mediante Connector.setName (String).
  • www.√integral.com, nombres de dominio no ASCII e IDN

3.2 Configurar host virtual

Configuramos el host virtual para el contexto / bank888:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
<Configure id="GroceryWebapp" class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="contextPath">/bank888</Set>
  <Set name="war"><Property name="jetty.webapps" default="."/>/bank.war</Set>
  <Set name="virtualHosts">
    <Array type="java.lang.String">
      <Item>www.MyVirtualDomain.com</Item>
      <Item>m.MyVirtualDomain.com</Item>
      <Item>*.OtherVirtualDomain.com</Item>
      <Item>@ConnectorName</Item>
      <Item>localhost</Item>
      <Item>127.0.0.1</Item>
    </Array>
  </Set>
</Configure>

Nota: En la práctica, @ConnectorName es más propenso a problemas, y si falla, el contexto fallará .
El método de acceso se convierte en (host virtual + puerto + ruta de contexto): http://127.0.0.1:8080/bank888
Si también necesita agregar un host virtual para otros elementos en webapps, puede continuar de la manera anterior en el directorio webapps Crea un archivo xml. Se recomienda que el archivo xml sea el mismo que el nombre de guerra o el nombre del directorio, de lo contrario, provocará una implementación repetida.

Nota: La forma de host virtual solo proporciona otras formas de acceder a la web, y no afecta el método de acceso original (el original: IP + puerto + ruta de contexto).

4. Cierre el acceso al directorio en Jetty9 (cierre el recorrido del directorio y cierre la visualización del archivo en el directorio

  • Antes de cerrar el acceso al directorio, visite http: // localhost: 8888 para
    Inserte la descripción de la imagen aquí
    mostrar toda la web en el directorio webapps. La situación anterior se produce sin configurar ningún contexto personalizado.
  • Personalice el contexto web de configuración, cierre el acceso al directorio
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
<Configure id="GroceryWebapp" class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="contextPath">/</Set>
  <Set name="war"><Property name="jetty.webapps" default="."/>/gro.war</Set>
  <Set name="virtualHosts">
    <Array type="String">
      <Item>www.MyVirtualDomain.com</Item>
      <Item>m.MyVirtualDomain.com</Item>
      <Item>*.OtherVirtualDomain.com</Item>
      <Item>localhost</Item>
      <Item>127.0.0.1</Item>
    </Array>
  </Set>
  <!--关闭目录访问-->
<Call name="setInitParameter">
	<Arg>org.eclipse.jetty.servlet.Default.dirAllowed</Arg>
	<Arg>false</Arg>
</Call>
</Configure> 

El contexto web definido anteriormente es /, y el acceso al directorio está cerrado. Si visita http: // localhost: 8888 en este momento:
Inserte la descripción de la imagen aquí

Nota: Los resultados de la práctica muestran que mientras exista un contexto web en el contexto de configuración personalizada, es básicamente imposible mostrar el directorio web en webapps. Parece que no tiene nada que ver con la siguiente configuración:

<Call name="setInitParameter">
	<Arg>org.eclipse.jetty.servlet.Default.dirAllowed</Arg>
	<Arg>false</Arg>
</Call>

Escanee el código para ver más:
Inserte la descripción de la imagen aquí

Publicado 381 artículos originales · elogiado 85 · 80,000 vistas +

Supongo que te gusta

Origin blog.csdn.net/weixin_40763897/article/details/105505113
Recomendado
Clasificación