Como posso reescrever/redirecionar URLs no Glassfish V3?

Como posso reescrever/redirecionar URLs no Glassfish V3?

Gostaria de simplificar os URLs para acessar um aplicativo Glassfish V3, removendo extensões de arquivo e encurtando os URLs.

Já defini meu aplicativo como padrão, para que não haja necessidade de incluir a raiz de contexto na URL.

Gostaria de:
* Remover extensões de arquivo
* Encurtar o URL para arquivos localizados nas profundezas da estrutura de pastas

Eu gostaria de fazer isso usando a correspondência de padrões em vez de por arquivo (o site é pequeno no momento, mas mudará com frequência e crescerá).

Alguns exemplos do que eu gostaria de fazer:
* foo.com/bar.html -> foo.com/bar
* foo.com/folder1/folder2/bar2.html -> foo.com/bar2

Qualquer ajuda seria muito apreciada. Obrigado.

Saúde,

Jin

Responder1

Tirado dehttp://www.sun.com/bigadmin/sundocs/articles/urlrdn.jspparece que é isso que você está procurando.

Redirecionamento de URL dentro de um domínio

Você pode usar o elemento url-prefix da propriedade redirect_ para encaminhar um URL para outro URL no mesmo domínio.

O procedimento a seguir mostra como permitir que os visitantes de um site digitemhttp://www.mywebsite.com/myproduct1e ser redirecionado ou encaminhado parahttp://www.mywebsite.com/mywarname/products/myproduct1.jsp.

  1. Faça login no Admin Console do Sun Java System Application Server ou GlassFish.
  2. No Admin Console, expanda o nó Configurações.
  3. Expanda o nó server-config.

    Ignore esta etapa se você estiver executando um domínio de desenvolvedor (um domínio que não possui capacidade de cluster).

  4. Expanda Serviço HTTP.

  5. Expanda Servidores Virtuais.
  6. Clique em servidor.
  7. Na página Editar Servidor Virtual, clique no botão Adicionar Propriedade.
  8. Na coluna Nome, digite redirect_1.
  9. Se você estiver usando o Application Server 9.0, digite from=/<context-root>/myproduct1 url-prefix=/mywarname/mypages/products/myproduct1.jspna coluna Valor.

    Observação- O valor <context-root>fornecido aqui precisa corresponder ao valor da raiz de contexto especificada no arquivo web.xml ou application.xml.

    Se você estiver usando o Application Server 9.1, digite from=/myproduct1 url-prefix=/mywarname/mypages/products/myproduct1.jspna coluna Valor.

Responder2

Neste caso você deve escrever uma implementação javax.servlet.Filter que reconheça os URLs encurtados e encaminhe as solicitações para o destino real.

/**
 *
 * @author vrg
 */
@WebFilter(filterName = "SimplifiedUrlRequestDispatcher", urlPatterns = {"/*"})
public class ShortenedUrlRequestDispatcher implements javax.servlet.Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //reading configuration from filterConfig
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain)
            throws IOException, ServletException {

        HttpServletRequest httpRequest = (HttpServletRequest) request;
        String shortURI = httpRequest.getRequestURI();
        String realURI = getRealURI(shortURI);
        if (realURI == null) {
            //in this case the filter should be transparent
            chain.doFilter(request, response);
        } else {
            //forwarding request to the real URI:
            RequestDispatcher rd = request.getRequestDispatcher(realURI);
            rd.forward(request, response);
        }
    }
    /**
     * Calculates the real URI from the given URI if this is a shortened one,
     * otherwise returns null.
     * @param shortURI
     * @return 
     */
    private String getRealURI(String shortURI) {
        //TODO implement your own logic using regexp, or anything you like
        return null;
    }

    @Override
    public void destroy() {
    }

}

Responder3

privет! Excelente introdução, mas mais uma coisa - RequestDispatcher rd = request.getRequestDispatcher(realURI);opera com caminho de servlet, obtendo o URI com nome do aplicativo, dará erro. então - req.getServletPath()fornece um caminho certo sem contexto e o despachante funciona como deveria.

informação relacionada