Redirecionamento de páginas e domínios com Jetty Rewrite Handler

O presente artigo aborda o redirecionamento de páginas e domínios com tratamento de variáveis GET e POST em servidor Jetty.

[ Hits: 18.570 ]

Por: Marcelo em 12/04/2010


Jetty - Rewrite Handler



Pela linha de comando podemos adicionar ao Jetty qualquer xml para editar suas rules. Aqui começa a brincadeira.

Operando com novas rules:

# java -jar start.jar etc/jetty.xml etc/novas_rules.xml

Agora vamos ao que interessa.

Criando/editando o jetty-rewrite.xml:

# cd $JETTY_HOME

etc/jetty-rewrite.xml:

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">

<!-- ===================================================== -->
<!-- Mixin the RewriteHandler
<!-- ===================================================== -->


<Configure id="Server" class="org.mortbay.jetty.Server">

    <!-- ================================================= -->
    <!-- Configure Rewrite Handler
    <!-- ================================================= -->
    <Get id="oldhandler" name="handler"/>

    <Set name="handler">
     <New id="Rewrite" class="org.mortbay.jetty.handler.rewrite.RewriteHandler">

      <Set name="handler"><Ref id="oldhandler"/></Set>
      <Set name="rewriteRequestURI">true</Set>
      <Set name="rewritePathInfo">false</Set>
      <Set name="originalPathAttribute">requestedPath</Set>
      <Set name="rules">
          <Array type="org.mortbay.jetty.handler.rewrite.Rule">
            <!-- Cuidando do redirecionamento e caching do favicon -->
            <Item>
              <New class="org.mortbay.jetty.handler.rewrite.HeaderPatternRule">
                <Set name="pattern">/favicon.ico</Set>
                <Set name="name">Cache-Control</Set>
                <Set name="value">Max-Age=3600,public</Set>
                <Set name="terminating">true</Set>
              </New>
            </Item>
            <!-- Adicione abaixo a regra de redirecionamento -->
            <Item>
              <New id="" class="org.mortbay.jetty.handler.rewrite.RewritePatternRule">
                <Set name="pattern">/ODOMINIO/CONTEUDO/A/SER/REDIRECIONADO</Set>
<Set name="replacement">/Redirecionador/Redirect</Set>
              </New>
            </Item>

          </Array>
        </Set>
      </New>
    </Set>

</Configure>

O que aconteceu acima?

Criamos uma instância de org.mortbay.jetty.handler.rewrite.RewritePatternRule, cujas características são:
  • pattern= "/ODOMINIO/CONTEUDO/A/SER/REDIRECIONADO"
  • replacement="/Redirecionador/Redirect"

O /Redirecionador/Redirect é o war que criamos na página anterior, o war tem nome de Redirecionador, e o servlet que desejamos tem nome de Redirect. Cuidado ao criá-lo, pois se colocar o URI de maneira errônea vai ter uma tremenda dor de cabeça.

Agora vamos rodar o Jetty pela linha de comando e adicionar nosso novo XML:

# cd $JETTY_HOME
# java -jar start.jar etc/jetty.xml etc/jetty-rewrite.xml


Quando acessarmos o Jetty pelo browser:

http://localhost:8080/ODOMINIO/CONTEUDO/A/SER/REDIRECIONADO

Veremos o redirecionamento de maneira transparente para:

http://www.paginaaserredirecionada.com/index.php

E caso coloquemos:

http://localhost:8080/ODOMINIO/CONTEUDO/A/SER/REDIRECIONADO?id=1

Veremos o redirecionamento de maneira transparente com tratamento da variável id para:

http://www.paginaaserredirecionada.com/index.php?id=23

Espero ter ajudado a comunidade.

Abraços a todos!

Qualquer dúvida entrem em contato.

Página anterior    

Páginas do artigo
   1. Jetty - simplesmente operando por linha de comando - simplificado
   2. Criação de um aplicativo web - Tratamento de variáveis POST e GET
   3. Jetty - Rewrite Handler
Outros artigos deste autor

Oracle-XE servidor com acesso ssh - Debian Lenny 5.0

VPN com PPTP + DDCLIENT em Debian 5.0 Lenny com IP dinâmico

Leitura recomendada

PDFBox - Aplicativo Java para baixar o DOU completo

Java Native Interface

GCJ – Conhecendo o compilador Java Livre

Testes unitários em Java com JUnit

Trabalhando com classes e métodos em Java (parte 2)

  
Comentários
[1] Comentário enviado por eduveks em 14/04/2010 - 14:20h

Vc tem os endereços em hardcode no servlet, basicamente um redirect feito a força bruta.

Isto não bem um rewrite, pois se vier mais dados por post ou por get simplismente irão para o espaço.

Não vejo utilidade prática, basicamente uma martelada, que podia ser feita de forma mais elegante usando o Nginx, veja como usar o Nginx com o Jetty, há um grande ganho de performance, e controle. Isto que vc fez ai no Jetty vc fazia no Nginx sem espinhas, e mantinha o Jetty por trás, fazendo proxy reverso.

Por acaso nunca usei o org.mortbay.jetty.handler.rewrite.RewritePatternRule, no replacement ele não suporta passar um parâmetro Get? Se suportar não era preciso fazer um servlet só para isto, bem se o Jetty não faz isto, o que acho muito estranho, poderia ser feito no Nginx e só terias a ganhar.

E para manter isto, caso vc precise de mias situações destas não é nada prático assim, ter que ficar editando código java e compilando e fazendo deploy... só por causa disto, que é uma situação de configuração de rewrite banal.

Mas esta valendo. Abraço.

[2] Comentário enviado por marcelo.m87 em 15/04/2010 - 08:32h

Blz cara vou dar uma estudada no que vc disse.
Mas fica a dica ae pra quem não quiser usar meu método.
Vlewzaum ae!
Abras e viva o linux!

[3] Comentário enviado por Márcio Léo em 25/01/2011 - 16:51h

Cara a dica é muito boa,tanto que o artigo obteve nota 10.É bastante prático e funcional.Me ajudou bastante.
Parabéns pelo seu artigo!

[4] Comentário enviado por Márcio Léo em 09/02/2011 - 14:50h

Tem alguma configuração que tem que fazer para o redirecionador ser enxergado?O redirecionador que eu fiz funciona localmente mais quando é colocado no servidor não redireciona os links quebrados.

[5] Comentário enviado por marcelo.m87 em 09/02/2011 - 17:24h

Cara eu usei este esquema em um site na web mesmo.
Da uma olhada se num ta com alguma coisinha errada no seu jetty ou faltando algum xml, ou um conflito com os mesmos.
Blz?
Abras!

[6] Comentário enviado por marcelo.m87 em 09/02/2011 - 17:25h

Outra coisa use links completos, não use coisas para redirecionamento como, "/" "./", use a raiz com o site que quer redirecionar.

[7] Comentário enviado por Márcio Léo em 11/02/2011 - 09:33h

Marotta tipo aquele redirecionamento que vc fez pro site de alarmes,eles querem que eu faça um pro site da mutuos...tipo na hora que você inicia o jetty ele abre o redirecionador,mas não o executa.vo posta o redirect aqui:

Redirecionador:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.mortbay.jetty.servlet.DefaultServlet;

/**
*
* @author marcelo
*/
public class Redirect extends DefaultServlet {

/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try {

int parametro = Integer.parseInt(request.getParameter("idSecao"));

if (parametro == 8 || parametro == 10) {
if (parametro == 8) {
response.sendRedirect("http://www.mutuos.com.br/mutuos/Pagina.do?idSecao=12");
} else if (parametro == 10) {
response.sendRedirect("http://www.mutuos.com.br/mutuos/Pagina.do?");
}
}


/*switch (Integer.parseInt(request.getParameter("idSecao"))) {
case 8:
response.sendRedirect("http://www.mutuos.com.br/mutuos/Pagina.do?idSecao=12");
break;


case 10:
response.sendRedirect("http://www.mutuos.com.br/mutuos/Pagina.do?");
break;

default:
response.sendRedirect("http://www.mutuos.com.br/mutuos/pagina.do?");

}*/

} catch (Exception e) {
response.sendRedirect("http://www.mutuos.com.br");
}
}

// <editor-fold defaultstate="collapsed" desc="Métodos HttpServlet. Clique no sinal de + à esquerda para editar o código.">
/**
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/**
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/**
* Returns a short description of the servlet.
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}


Xml:

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">;

<!-- =============================================================== -->
<!-- Mixin the RewriteHandler -->
<!-- =============================================================== -->


<Configure id="Server" class="org.mortbay.jetty.Server">

<!-- =========================================================== -->
<!-- Configure Rewrite Handler -->
<!-- =========================================================== -->
<Get id="oldhandler" name="handler"/>

<Set name="handler">
<New id="Rewrite" class="org.mortbay.jetty.handler.rewrite.RewriteHandler">

<Set name="handler"><Ref id="oldhandler"/></Set>
<Set name="rewriteRequestURI">true</Set>
<Set name="rewritePathInfo">false</Set>
<Set name="originalPathAttribute">requestedPath</Set>

<Set name="rules">
<Array type="org.mortbay.jetty.handler.rewrite.Rule">

<!-- return an error message if low on threads; put this at the top so it will be processed first -->
<Item>
<New id="lowThreads" class="org.mortbay.jetty.handler.rewrite.LowThreadsRuleContainer">
<!-- set the trigger for low threads ridiculously low
uncomment the block below to see it in action -->
<!--Ref id="Server">
<Get id="serverThreadPool" name="threadPool">
<Set name="minThreads">3</Set>
<Set name="maxThreads">4</Set>
<Set name="lowThreads">0</Set>
</Get>
</Ref>

<Set name="threadPool"><Ref id="serverThreadPool"/></Set-->

<Call name="addRule">
<Arg>
<New id="busyresponse" class="org.mortbay.jetty.handler.rewrite.ResponsePatternRule">
<Set name="pattern">/*</Set>
<Set name="code">500</Set>
<Set name="reason">Server busy</Set>
</New>
</Arg>
</Call>
</New>
</Item>

<!-- Add rule to protect against IE ssl bug -->
<Item>
<New class="org.mortbay.jetty.handler.rewrite.MsieSslRule"/>
</Item>

<!-- protect favicon handling -->
<Item>
<New class="org.mortbay.jetty.handler.rewrite.HeaderPatternRule">
<Set name="pattern">/favicon.ico</Set>
<Set name="name">Cache-Control</Set>
<Set name="value">Max-Age=3600,public</Set>
<Set name="terminating">true</Set>
</New>
</Item>


<!-- add a regex rule -->
<Item>
<New class="org.mortbay.jetty.handler.rewrite.RewriteRegexRule">
<Set name="regex">/mutuos/(.*)</Set>
<Set name="replacement">/Redirecionador/Redirect</Set>
</New>
</Item>

<!-- add a header pattern rule -->
<Item>
<New id="header" class="org.mortbay.jetty.handler.rewrite.HeaderPatternRule">
<Set name="pattern">*.jsp</Set>
<Set name="name">Server</Set>
<Set name="value">Server for JSP</Set>
</New>
</Item>


</Array>
</Set>
</New>
</Set>

</Configure>

Foi mal ta te encheno mais o pessoal aqui ta em cima e eu não sei mais o que fazer!!!
Forte abraço!!!
Márcio!!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts