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.
Parte 3: 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:
O que aconteceu acima?
Criamos uma instância de org.mortbay.jetty.handler.rewrite.RewritePatternRule, cujas características são:
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.
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>
<!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.
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.