Empacotar biblioteca contendo páginas JSP padrão

3 respostas
S

Oi Pessoal!

Uma questão… preciso empacotar um componente de segurança que será importado por toda e qualquer aplicação Java a ser desenvolvida aqui. Este componente deverá contemplar, além dos Filters que verificarão a autenticação, as páginas de Login e o menu padrão da aplicação (aqui, nenhuma aplicação tem menu, o administrador cadastra os links para as páginas “top” da aplicação em uma tabela e este menu padrão lê a tabela e monta o menu).
No caso do Filter, se eu colocar dentro de um JAR e distribuir, o cara só precisará configurar no Web.xml dele a referencia a esse filter. Eu queria fazer algo semelhante com as páginas. Hoje, ele tem que pegar o fonte do JSP e adicionar diretamente ao WEB-INF da aplicação dele, junto com as páginas específicas da aplicação. Tem algum jeito de eu, por exemplo, mandar os JSP dentro de um JAR, ou WAR, de maneira que o cara simplesmente referencie estes JSP no WELCOME-FILE-LIST (Web.xml) dele e nao consiga nem ver o código-fonte?

Obrigado desde já!
Thiago

3 Respostas

T

No Tomcat você precisa fazer o seguinte:

  • Localizar os .class gerados pela compilação dos .jsps; (são classes que tipicamente ficam no pacote org.apache.jsp.WEB_002dINF.jsp);
  • Modificar web.xml de modo que as referências a essas páginas JSP em particular sejam feitas para os .class gerados. Essas referências devem ser feitas como se essas classes referenciassem servlets.

Isso dá um bocadinho de trabalho.

S

Valeu pela resposta!

Realmente parece meio trabalhoso. Acho até que ficaria melhor se conseguíssemos transformar os caras em servlets ao invés de JSP né… o problema é que numa das telas vamos usar JSF, e aí nao tem como fugir dessa solução… De qualquer jeito já foi de grande ajuda.

Abraços!
Thiago

mmilanez

souzatg:
Valeu pela resposta!

Realmente parece meio trabalhoso. Acho até que ficaria melhor se conseguíssemos transformar os caras em servlets ao invés de JSP né… o problema é que numa das telas vamos usar JSF, e aí nao tem como fugir dessa solução… De qualquer jeito já foi de grande ajuda.

Abraços!
Thiago

Você pode fazer isto sim, basta utilizar o script ANT abaixo que todos os seus JSPs são compilados, tranformando-se em servlets. O script abaixo inclusive altera o seu arquivo web.xml automaticamente. Quanto ao trabalho de adicionar parametros para cada página, isto continuará.

Não esqueça de identificar as variáveis ANT necessárias abaixo…

Falows!

<target name="geracao_jsp_java">
	<echo>Geracao dos arquivos .java a partir dos arquivos .jsp</echo>

	    <taskdef classname="org.apache.jasper.JspC" name="jasper2" >
	      <classpath id="jspc.classpath">
	        <pathelement location="${java.home}/lib/tools.jar"/>
	        <fileset dir="${tomcat.home}/bin">
	          <include name="*.jar"/>
	        </fileset>
	        <fileset dir="${tomcat.home}/lib">
	          <include name="*.jar"/>
	        </fileset>
	        <fileset dir="${appFolder}/WEB-INF/lib">
	          <include name="*.jar"/>
	        </fileset>
	      	<dirset dir="${appFolder}/WEB-INF/classes" />
	      </classpath>
	    </taskdef>

	    <jasper2
	             validateXml="false"
	             uriroot="${appFolder}"
		    	 webXmlFragment="${appFolder}/WEB-INF/generated_web.xml"
	             outputDir="${appFolder}/WEB-INF/src"
	    />

    	<!--
    		abaixo o merge dos arquivos web.xml. note que deve haver a frase
	    	[INSERT FRAGMENT HERE] entre comentarios no seu arquivo web.xml original, logo apos
	    	a ultima declaracao de servlet-class (antes do primeiro servlet-mapping) para isso funcionar
    	 -->
	   	<loadfile property="webXmlFragment" srcFile="${appFolder}/WEB-INF/generated_web.xml"/>
	  	<replace file="${appFolder}/WEB-INF/web.xml" token="&lt;!-- [INSERT FRAGMENT HERE] --&gt;" value="${webXmlFragment}"/>
	  	<delete file="${appFolder}/WEB-INF/generated_web.xml" />

    </target>
Criado 20 de fevereiro de 2008
Ultima resposta 21 de fev. de 2008
Respostas 3
Participantes 3