
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.
- Faça login no Admin Console do Sun Java System Application Server ou GlassFish.
- No Admin Console, expanda o nó Configurações.
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).
Expanda Serviço HTTP.
- Expanda Servidores Virtuais.
- Clique em servidor.
- Na página Editar Servidor Virtual, clique no botão Adicionar Propriedade.
- Na coluna Nome, digite
redirect_1
. Se você estiver usando o Application Server 9.0, digite
from=/<context-root>/myproduct1 url-prefix=/mywarname/mypages/products/myproduct1.jsp
na 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.jsp
na 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.