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.527 ]

Por: Marcelo em 12/04/2010


Jetty - simplesmente operando por linha de comando - simplificado



Sou estagiário de uma empresa de TI, lá entrei em contato com muitos servidores, mas a última coisa que encarei foi o servidor Jetty de aplicações Java para web.

E não é que meu patrão falou que gostaria de fazer redirecionamento do domínio antigo para o novo, sem perder o link antigo, já que este tinha um bom PageRank no Google.

Então vamos nessa:
  • Servidor Jetty utilizado = jetty-6.1.20
  • Java = sun-java6-jdk

Para iniciar o Jetty costuma-se executar um daemon, versão standalone, ou por linha de comando mesmo. Caso você possua as variáveis de ambiente do JETTY bem definidas basta:

cd $JETTY_HOME

Caso contrário vá até onde está a pasta do Jetty, em algumas versões do Debian GNU/Linux podem estar, por exemplo, em:

cd /usr/share/jetty

Logue-se como super usuário.

su

Iniciando o Jetty por linha de comando:

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

Pronto, o Jetty está operante pela linha de comando de maneira simplificada, com as configurações padrões, poderia estar sendo acessado por qualquer browser pela URL:

http://localhost:8080

    Próxima página

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

Java Native Interface

Jmeter com qualidade e performance

Linux + Rails + Ruby + Mongrel + PostgreSQL + NetBeans 6 Preview

Linux com Java 1.7 + JBoss 7

Busca corporativa com Apache Solr - Motivação e conceitos

  
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