Como identificar a URL que está sendo chamada?

12 respostas
C

Caros amigos.

Estou montando um site que atenderá a três endereços diferentes como no exemplo abaixo:

www.site1.com.br
www.site2.com.br
www.site3.com.br

A minha dúvida é como identificar na controller do VRaptor qual é o site que está sendo acessado para que eu possa indicar qual é o comportamento para aquele site.
alguém têm alguma luz ai?

desde já valeu!

12 Respostas

S

você pode fazer um verificação na String da url passada. Se ela contiver o valor desejado você manda para o local desejado.

C

surfzera:
você pode fazer um verificação na String da url passada. Se ela contiver o valor desejado você manda para o local desejado.

Legal, mas qual é o código fonte para isso? Esta String deve ter um nome padrão… Como eu capturo ela na controller? O VRaptor têm algum objeto que me forneça esta string?

S

exemplo:

String url = “www.google.com.br

if (url.contains(google)) {

return /pagina1.jsp;

}else{

return /pagina2.jsp;

}

acho que é isso;

S

para ser sincero nunca trabalhei com o vRaptor acho que como em qualquer programa você pode criar um metodo para isso não pode ?

S

encontrei isso aqui no google ve se ajuda!!

http://vraptor.caelum.com.br/vraptor2-forum/posts/list/761.page;jsessionid=i2by7fy3dva8

C

surfzera:
exemplo:

String url = “www.google.com.br

if (url.contains(google)) {

return /pagina1.jsp;

}else{

return /pagina2.jsp;

}

acho que é isso;

Desculpe, mas não é isso que eu estou perguntando. Vou tentar ser mais claro. Estou fazendo um site para três ou mais empresas diferentes. A mecânica geral do site (obtenção e manutenção dos dados) é genérica, ou seja, têm o mesmo motor. Mas quando o usuário digitar no browser www.site1.com.br este motor deve retornar para o usuário um designe de site (as informações pertinentes a este site), quando o usuário digitar no browser www.site2.com.br este motor deve retornar outro designe (com as informações pertinentes à ele). Mas para isso acontecer eu tenho que ter uma forma de identificar qual foi a url que o usuário digitou no browser e assim adaptar o funcionamento do mesmo. Entendeu agora? O que eu preciso saber é justamente isso: como identificar na controller do VRaptor qual foi a URL que o usuário acessou.

L

É possível injetar o HttpServletRequest via construtor da Controller e recuperar a URL (getRequestUrl()) e identificar qual a empresa.

L

getRequestURL não vai funcionar, pq ele só retorna o que vem depois do nome do servidor…

tem um request.getRemoteHost(), getRemoteAddr() que te retorna o host… possivelmente tenha algum Header tb…

se você tiver um servidor Httpd na frente da sua aplicação, vc pode configurá-lo pra apontar para contextos diferentes da
sua aplicação, ou pra setar headers a mais que te ajudam a identificar de onde veio…

C

lucascs:
getRequestURL não vai funcionar, pq ele só retorna o que vem depois do nome do servidor…

tem um request.getRemoteHost(), getRemoteAddr() que te retorna o host… possivelmente tenha algum Header tb…

se você tiver um servidor Httpd na frente da sua aplicação, vc pode configurá-lo pra apontar para contextos diferentes da
sua aplicação, ou pra setar headers a mais que te ajudam a identificar de onde veio…

Vou tentar com getRemoteHost()/Addr() e vou também verificar como trabalhar com headers para contextos diferentes. As vezes é complicado ser genérico. Este esforço todo é porque identifiquei funcionalidades que são comuns à vários sites e o que muda é o designe para cada um. Obrigado pela força. Tendo uma solução viável eu posto aqui. Grato por Hora.

C

Galera depois das dicas que vocês deram achei algo que resolveu completamente o meu problema. o trecho de codigo abaixo ilustra como fazer

Esta é a minha controller:

@Resource
public class MainController {

    private Result result;
    private SessionModel usuarioInfo;
    private HttpServletRequest request;

    public MainController(Result result,SessionModel usuarioInfo,HttpServletRequest request){
        this.result=result;
        this.usuarioInfo=usuarioInfo;
        this.request = request;
    }

    /**
     * Reinderiza Página Principal
     */
    @Get
    @Path("/")
    public void index(String motivo,String help){
        result.include("host", this.request.getRequestURL());
    }
}

Notem que na linha 06 eu crio uma instância privada de HttpServletRequest. Recebo ela através do construtor e guardo (linhas 08 e 11) . E depois é só utilizar o método getRequestURL(). Os metodos getRemote… fazem referência a quem chamou a url (REMOTE). Há também o getRequestURI que retorna apenas a parte do endereço após o host.

Valeu pelas dicas. Assim fica mais fácil encontrar. Principalmente para quem não têm referências.

G

Não. requestURI retorna apenas o que vem depois do host, no caso context + arquivo.

requestURL retorna o protocolo, nome do host, porta (se não 80) + o URI.

cbragato, você pode usar request.getHeader(“host”) ou então fazer um substring entre request.getRequestURI e request.getRequestURL.

L

@garcia
esqueci que tem getRequestURI e getRequestURL e eles são diferentes… falei besteira :stuck_out_tongue:

Criado 25 de novembro de 2009
Ultima resposta 25 de nov. de 2009
Respostas 12
Participantes 5