Descobrindo Coisas com o Java [editado!]

[color=red]Obrigado a todos que responderam a pergunta original, “como descobrir coisas com JavaScript”, porém resolvi ampliar a discussão e perguntar como “descobrir coisas” com Java mesmo.[/color]

Gostaria de saber como é possível, em Java,

. “Descobrir coisas” como o Browser do usuário, seu Sistema Operacional, IP, país etc?
. Se existem códigos/frameworks/bibliotecas “prontas” que fazem isso? Ou se é preciso fazer tudo “na unha”?
. Como persistir dos “dados descobertos” em BD?

Em tempo: eu não quero um “produto”, um “google analytics” da vida; quero é aprender a capturar esses dados por conta própria.

[color=blue]Imagino que isso dá para ser feito via JSP - mal comparando - mais ou menos como é feito via PHP, porém confesso não saber como…[/color]

Em Javascript existe o objeto navigator, muito útil para informações do tipo

http://www.w3schools.com/jsref/obj_navigator.asp

Se voce tiver algum navegador netscape-* com plugin java, pode fazer

var ip = java.net.InetAddress.getLocalHost().getHostAddress();

senao

var ip = '<!--#echo var="REMOTE_ADDR"-->'; //nem sempre dá certo

Para persistir esses dados são n-formas também, se levar em conta que precisa passar pro servidor, pode fazer por Ajax ou formas na ação da pagina mesmo.

Dá uma olhada no link abaixo, tem alguns exemplos como detectar o navegador etc.


http://www.w3schools.com/js/js_examples.asp
http://www.w3schools.com/js/tryit.asp?filename=tryjs_browserdetails

Existem frameworks que faz isso.
[/code]
http://jquery.com/

[code]

Com servlet também tem como você pegar esses valores que estão no header

Bom Mano, aqui vai um exemplo em js pra pegar dados do cliente:

<script>
document.write("<b>Navegador:</b>",navigator.appName);
document.write("<br>Versão:",navigator.appVersion.substring(0,4));
document.write("<br>Resolução: ",screen.width,"px por ",screen.height+"px");
document.write("<br>Cores: ",window.screen.colorDepth," bits");
document.write("<br>CodName: ",navigator.appCodeName);
document.write("<br>Plataforma: ",navigator.platform);
document.write("<br>Páginas Visitadas: ",history.length);
document.write("<br>Java habilitado: ",navigator.javaEnabled());
</script>

flw brother…

para salvar isto em banco de Dados, envia isto por JSON para o servidor e guarda os dados, lembrando que deve ao invés de mostrar na tela guardar em uma variável ou montar o JSON de uma vez.

ok?

Mas vc tmbém pode pegar esses dados no servidor, isso não seria melhor?

bom o xjr deu eum exemplo bem legal existe isso pre prontos mas afinal um json
seria melhor

Agora, para visualizar os métodos do navigator para utilizar, faça um foreach e visualize:

for(a in navigator){
	alert(a);
}

visualize também os outros como o window ou o screen, ok?

for(a in window){
	alert(a);
}

Aproveitando este topico de javascript, alguem sabe como faço para enviar o Foco para determinado item de um listbox, e como fazer um auto complete? estou usando o Visual Jsf, se alguem pudesse me dar uma luz agradeceria muito.

simples, para colocar foco num listbox, você deve inserir a propriedade selected, para que fique assim:


<select name="drop" id="Select" size="4" multiple="multiple">

    <option value="1" selected='selected'>item 1</option>

    <option value="2">item 2</option>

    <option value="3" selected='selected'>item 3</option>

    <option value="4">item 4</option>

    <option value="0">All</option>

</select>

use jquery e o comando a seguir dentro de algum evento de sua escolha:

$('#Select').attr('selected','selected');

Agora, para autocomplete, você deve fazer o seguinte::

crie uma div com posição absoluta abaixo do input text, ao digitar, você pegará o onmouseout, ou out em jquery e enviará um json ou post para o servidor, o resultado você populará a div que por sua vez voce colocará uma tag tipo ul li e pegará o seu conteúdo quando clicado, e ainda, pegue as setas com seu código na tabela ASCII e permita que o usuário possa direcionar pelo teclado qual ele queira usar, ok?

Bom, muito simples mesmo, caso tenha dúvida, só perguntar, flw

Descobrir, à partir do IP, em que país o usuário está me parece ser mais fácil que descobrir, por exemplo, em que estado brasileiro ele está… alguma ideia quanto a isto?

Bom meu caro, isso é meio complicado porque vc deverá saber a qual DNS o ip do seu cliente está acessando, e para isso, vc deverá ter uma base de dados com as faixas de IPs que os DNS estão responsáveis, e assim fazer o cálculo para verificar entre qual faixa o cliente está situado, isto se consegue através dos servidores mundiais responsáveis pela distribuição, e aliás, você deverá estar sempre atualizado em relação à isso.
Bom, o caso é, conseguir os endereços dos servidores DNS e suas respectivas faixas.

xJunior muito obrigado pela resposta vou testar e posto aqui se caso surgir alguma duvida.

Vc teria um exemplo de auto complete para eu ter uma ideia melhor de como colocar essa div em um formulario jsp?

muito obrigado!

Não é legal você alterar o tópico como fez. Os posts ficaram todos sem sentido e não vão ter utilidade para quem procurar.

De qualquer forma, esses dados que você quer estão no cabeçalho da requisição HTTP. Dê uma olhada no protocolo.
Ex: browser, versão, SO estão no user-agent, referer (URL de onde o usuário veio) etc. Tudo isso é o browser que me manda, então obviamente não é confiável.

No java: request.getHeader(“user-agent”).
EL: ${header[“user-agent”]}

edit: vai retornar a string que você vê aqui: http://whatsmyuseragent.com/
edit2: pro IP tem o método getRemoteAddr() do request. Tudo da requisição fica nesse objeto.

teria um exemplo de autocomplete me visual jsf?

[quote=Schuenemann]Não é legal você alterar o tópico como fez. Os posts ficaram todos sem sentido e não vão ter utilidade para quem procurar.

De qualquer forma, esses dados que você quer estão no cabeçalho da requisição HTTP. Dê uma olhada no protocolo.
Ex: browser, versão, SO estão no user-agent, referer (URL de onde o usuário veio) etc. Tudo isso é o browser que me manda, então obviamente não é confiável.

No java: request.getHeader(“user-agent”).
EL: ${header[“user-agent”]}

edit: vai retornar a string que você vê aqui: http://whatsmyuseragent.com/
edit2: pro IP tem o método getRemoteAddr() do request. Tudo da requisição fica nesse objeto.[/quote]

Concordo plenamente com nosso amigo aí em cima, se for o caso, cria um novo tópico e manda um post pra gente ir lá e comentar…
:shock:

eu só me dei conta da ‘cagada’ que fiz agora… apesar de os colegas terem ‘ignorado’ isso e terem destilado seu conhecimento assim mesmo… desculpe-me pelo ocorrido… :roll: