Pergunta

Fundo: temos um sistema que foi escrito em um CMS mais antigos baseados em volta Java durante os 2002-2003 dias. Queremos seguir em frente com o nosso novo material, usando tomcat, listras, e sitemesh. Temos de navegação, layouts, "pods", JS, CSS, etc, que temos tido fora do velho CMS e em alguns dos nossos novos aplicativos por isso temos aparência consistente.

Agora precisamos de algum tipo de solução para se livrar de toda a duplicação de código acontecendo. Nossos aplicativos estão em execução no mesmo VM no momento, mas isso pode mudar. Precisamos de uma maneira para todas as nossas instâncias de Tomcat para acessar alguns elementos comuns (e esses elementos pode / não pode precisar fazer algumas coisas do lado do servidor).

O melhor que eu vim acima com até agora está fazendo um decorador sitemesh bastante normal, que usa C:. Importação para obter o que ele precisa, e plugs-lo direito em Esta solução tem alguma sobrecarga de rede que poderia atolar-lo e introduzir um ponto de falha. Nós olhamos <% @ include file = "/ something.jsp" %> tão bem, mas que parece ser único contexto relativo. Nós poderíamos usar c: importação e apontá-lo para localhost, o que parece ser a melhor solução até agora.

Existem outros templates / frameworks decoração lá fora (Tiles?) Que poderia tornar isso mais simples? O que estamos perdendo?

Foi útil?

Solução

Eu não estou completamente certo o que você está tentando fazer aqui. Minha interpretação é esta: Você tem um número de recursos que você deseja reutilizar em um número de aplicativos. Você não quer ter esses arquivos duplicados em todas as aplicações, uma vez que tornaria difícil manter a consistência entre os aplicativos.

Se esta é a sua pergunta, gostaria de sugerir que você mantenha seus recursos comuns em arquivos JAR. Isto dá-lhe várias vantagens:

  1. Seus recursos são locais - sem sobrecarga da rede
  2. Você tem controle sobre atualizações para os recursos.

Um exemplo de nr 2: você manter seus layouts de páginas comuns na página-layouts-1.x.jar. Você continua a fazer versões menores dos layouts de páginas que não afetam os aplicativos que a utilizam - são drop-in substituições. Um dia, você decide redesenhar seus aplicativos completamente e solte page-layouts-2.0.jar. Isso requer algumas regravações para os aplicativos que a utilizam. Agora, se os aplicativos agrupa os layouts de páginas, ao invés de mantê-los em um carregador de classe compartilhado no servidor, a migração para o layout 2.0 não é uma questão de tudo ou nada. Você pode migrar um aplicativo de cada vez para usar o layout de 2,0, enquanto os outros ainda usam o layout 1.x.

Estamos fazendo isso com muito sucesso, usando JSF e Facelets.

Você pode querer ter um olhar para Weblets . Eu não tenho idéia se SiteMesh ou Tiles tem qualquer apoio directo para servir-se recursos do caminho de classe, mas eu suponho que você pode ajustá-los para fazer isso.

Hope isso ajuda

Outras dicas

Temos usado Sitemesh há anos e eu tenho sentimentos mistos sobre isso.

I muito prefere escrever arquivos JSP Standard Tag (.tag ou .tagx) ao uso de applydecorator. Eu acho que a tag applydecorator efetivamente obsoleto com o advento dos arquivos de marca, mas muitos usuários SiteMesh não percebeu.

Quase todo o nosso uso Sitemesh era desse tipo. Teríamos alguns modelos de páginas comuns, que as nossas páginas JSP remete para explicitamente como um layout. "Use o layout padrão, aqui está o menu de navegação e aqui está o corpo da página." arquivos de marca são uma cópia exata desta funcionalidade, mas eles são padronizados, apoiado por qualquer ferramenta de web J2EE, e built-in para o recipiente em vez de outra dependência.

Para realmente decorar uma página, onde a página JSP em si não faz referência a todos para Sitemesh, eu acho que faz sentido em um alto nível, mas eu ainda não gosto disso toda a página é analisado novamente.

Este segundo problema não é culpa de Sitemesh realmente; dada a API Servlet que tem que trabalhar, eu não sei o que mais poderia fazer. Mas faz-me pergunto se uma alternativa baseada em DOM para o Servlet API baseada em fluxo poderia ser valioso. Em outras palavras, ao invés de ter servlets escrever sua saída para um fluxo, o que se acrescentou nós a uma árvore? Isso impor saída bem formado, e torná-lo mais barato para fazer transformações estruturais como Sitemesh faz, ou a saída de codificação para diferentes formatos como XHTML, HTML ou JSON on the fly.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top