[resolvido] vraptor com sitemesh - minificando html

2 respostas
Mr_Arthur

Olá pessoal,

Estou tentando obter a string do html gerado em uma requisição com um responseWrapper.
A ordem de execução dos meus Filters está: SiteMeshFilterCustom -> VRaptorCustom.doFilter() ...

Estou criando o responseWrapper dentro de um CustomFilterSiteMesh, vou mostrar o código:

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
	
	HttpServletRequest req = (HttpServletRequest) request;
	HttpServletResponse resp = (HttpServletResponse) response;
	
	System.out.println("req.getRequestURI(): " + req.getRequestURI());
	ConpressionResponseWrapper responseWrapper = new ConpressionResponseWrapper(resp);
	
	super.doFilter(request, responseWrapper, chain);
	
	System.out.println("CONTENT:" + responseWrapper.getContent());
}
O output dos sysouts:
req.getRequestURI(): /login
req.getRequestURI(): /WEB-INF/jsp/index/loginForm.jsp
CONTENT:
<script>
	$(document).ready(function() { ... });
</script>
<div id="divFormularioLogin">
	<form action="/login" name="form" method="post">
	  <div class="field">
	    <input type="text" name="usuario.email" title="email" />
	  </div>
	  
	  <div class="field">
	    <input type="password" name="usuario.senha" title="senha" />
	  </div>
	
	  <div class="contentCenter">
	    <button class="botao" type="submit">Entrar</button>
	    <a  >Criar conta</a>
	  &lt;/div&gt;
	  
	&lt;/form&gt;
&lt;/div&gt;
CONTENT:



&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
	&lt;head&gt;
		&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
		&lt;title&gt;My App&lt;/title&gt;
		&lt;link type="text/css" href="/stylesheets/all.min.css" rel="stylesheet" /&gt;
		&lt;script type="text/javascript" src="/javascripts/all.min.js"&gt;&lt;/script&gt;		
  &lt;/head&gt;
  &lt;body&gt;
  	&lt;div id="wrapper"&gt;
  		&lt;div id="headerWrapper"&gt;
		  	&lt;div id="login_menu"&gt;
			  	
		  	&lt;/div&gt;
  		&lt;/div&gt;
		
	  	&lt;div id="content"&gt;
	  		&lt;div id="validationBox"&gt;
	  			&lt;span id="caixaDeValidacao"&gt;&lt;/span&gt;
	  			&lt;span id="caixaDeInformativos"&gt;
	  				
	  			&lt;/span&gt;
	  		&lt;/div&gt;
		    
	  	&lt;/div&gt;
  	&lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;

Repare que:
Ele passa primeiro e duas vezes do primeiro sysout.
Depois ele passa as outras duas vezes no segundo sysout.
E detalhe, um outro comportamento do sitemesh que eu não entendi.
Ele não fez o merge entre minha jsp e meu decorator em apenas uma requisição... Precisou de duas requisições, uma para chamar o jsp e outra pra chamar o decorator.

Estou querendo pegar esse conteúdo completo para minificar meus html em tempo de execução... Não preciso fazer necessáriamente assim, se alguém quiser aconselhar uma outra forma, pode ser. :)

Obrigado!

2 Respostas

Lucas_Cavalcanti

então, o que acontece é o seguinte: a requisição que chega no servidor e passa pelo seu filtro: /login, depois o vraptor faz um forward pra jsp, que bate de novo no seu filtro… como o sitemesh usa outro jsp como template, é outro forward, daí passa pelo seu filtro de novo.

o que vc pode fazer é:

  • fazer o seu filtro só passar em *.jsp, ou
  • deixar só o dispatch de REQUEST, assim o filtro não vai passar nos forwards.
Mr_Arthur

Lucas, exatamente isso.
Fiz a segunda alternativa, coloquei dispatch só pra REQUEST.

vergonha dessa ‘scwcd’ aí na assinatura, por que eu já tinha estudado isso. Faltou a prática…

Obrigado!

Criado 4 de janeiro de 2012
Ultima resposta 5 de jan. de 2012
Respostas 2
Participantes 2