Criando um diretório virtual baseado em configuração no WEB-INF

1

Dentro de um aplicativo da Web, desejo criar um "diretório virtual" que esteja no diretório WEB-INF. Na verdade, o que estou tentando realizar é o mesmo efeito que criar um link flexível no sistema de arquivos se o aplicativo foi executado explodido. Eu estou tentando realizar isso em ambos (mais importante) weblogic, bem como (em um mundo ideal) molhe.

Estou ciente das configurações do diretório virtual, no entanto, elas não atendem aos meus propósitos, pois não desejo que o conteúdo seja veiculado diretamente por meio de um URL (por isso, ele reside no WEB-INF). Eu não encontrei nada no documento de configuração para jetty ou weblogic que parece fornecer um conceito semelhante para a resolução de recursos (tentei adicionar "extraClassPath" ao jetty, mas isso não foi bem-sucedido). Como pano de fundo adicional, os aplicativos estão usando o Spring MVC e os resolvedores de visualização estão apontando para JSPs sob WEB-INF

<bean id="myResolverBean"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"
    p:viewClass="org.springframework.web.servlet.view.JstlView"
    p:prefix="/WEB-INF/foo/baz/" p:suffix=".jsp" />

Depois de analisar o código da primavera, acredito que ele não esteja fazendo nada em relação ao carregamento de recursos, é o contêiner (weblogic / jetty) que resolve os caminhos. Eu também tentei usar URIs de arquivo, mas parece que o contêiner sempre interpretará o caminho como relativo à raiz de contexto (ou seja, não há caminhos absolutos).

Então, minha pergunta é, é possível adicionar qualquer tipo de diretiva de configuração ao web.xml, configurações de servidor ou configuração de mola para realizar isso?

    
por M. Jessup 28.02.2011 / 20:56

1 resposta

1
Não é de surpreender que a resposta a esta pergunta no weblogic seja o diretório virtual. A diretiva fornece tanto (o que eu considero ser) o comportamento padrão de mapear uma URL para algum conjunto de arquivos (geralmente estáticos) a ser servido, mas também atua como um "link virtual suave" quando o caminho está sob WEB-INF e ainda fornece o comportamento desejado de dar um 404 se você fizer um pedido através do navegador para tal URL (eu acho que eu configurei algo errado na primeira vez que tentei isso). Então, o seguinte irá produzir o comportamento desejado:

<virtual-directory-mapping>
  <local-path>/absolute/path/outside/of/webapp</local-path>
  <url-pattern>/WEB-INF/foo/*</url-pattern>
</virtual-directory-mapping>

Eu também descobri uma funcionalidade semelhante no Jetty. Isso é realizado especificando vários "recursos base" na configuração. Há alguma documentação do jetty que fornece uma explicação e alguns exemplos. Uma característica (eu posso ver isso sendo útil e prejudicial, dependendo da situação) é que as estruturas são mescladas para que você possa ter caminhos que colidem e eles serão resolvidos na ordem de especificação. O exemplo acima para o jetty:

<Set name="baseResource">
  <New class="org.mortbay.resource.ResourceCollection">
    <Arg>
      <Array type="java.lang.String">
        <Item>/path/to/normal/webapp</Item>
        <Item>/absolute/path/outside/of/webapp</Item>
      </Array>
    </Arg>
  </New>
</Set> 

Uma captura para ambos é que a estrutura de diretório deve ser recriada nos diretórios externos (isto é, deve ser / absolute / path / outside / of / webapp / WEB-INF / foo) para funcionar corretamente, até onde eu posso dizer que não há como mapear um diretório para outro diretório nomeado arbitrariamente.

    
por 01.03.2011 / 21:46