200 likes | 309 Views
Generic Connection Framework. Prof. André Assad Andre.Assad@gmail.com. Comunicação de Dados. Meios de comunicação (dispositivos móveis) Infravermelho Rádio TDMA CDMA GSM: GPRS, EDGE, 3G Bluetooth NFC Portas seriais. Comunicação de Dados.
E N D
Generic Connection Framework Prof. André Assad Andre.Assad@gmail.com
Comunicação de Dados • Meios de comunicação (dispositivos móveis) • Infravermelho • Rádio • TDMA • CDMA • GSM: GPRS, EDGE, 3G • Bluetooth • NFC • Portas seriais
Comunicação de Dados • Protocolos de comunicação (dispositivos móveis) • RS-232 • HTTP • Socket • SMS
Introdução ao GCF • Java.io + java.net: só eles são maiores que os recursos disponíveis de muitos dispositivos móveis • GCF (Generic Connection Framework) • A idéia era não implementar um conjunto de classes completamente novo • Devia-se fornecer um sub-conjunto do J2SE
Conexão Genérica • O termo “Genérico” significa algo que atende ou serve para vários fins (obviamente ) • Connector • Classe para criação de qualquer tipo de conexão • Connector.open(“protocolo:endereço;parâmetros”); • Tipos de conexões • HTTP • Serial • Socket • HTTPS • Ir • Datagrama • SSL • File
Abrindo uma Conexão • Exemplos de abertura de conexão: • Connector.open(“http://uol.com.br”); • Connector.open(“socket://200.217.158.56”); • Connector.open(“file://teste.txt”); • Connector.open(“comm:1;baudrate=9600”);
GCF • GCF é flexível graças ao modo como os protocolos são resolvidos em tempo de execução • A classe Connector procura a classe apropriada que implementa o protocolo solicitado • Essas classes específicas dos protocolos implementam uma interface chamada Connection • Embora a API suporte vários, o único protocolo de comunicação exigido é o HTTP.
GCF - hierarquia CommConnection ContentConnection DatagramaConnection HttpConnection HttpsConnection InputConnection Connector Connection OutputConnection SecureConnection SocketConnection StreamConnection UDPConnection ServerSocketConnection
GCF - API • publicstatic final intREAD • publicstatic final intWRITE • publicstatic final intREAD_WRITE • publicstaticConnectionopen(Stringname) throwsIOException • publicstaticConnectionopen(Stringname, intmode) throwsIOException • publicstaticInputStreamopenInputStream(Stringname) throwsIOException • publicstaticDataInputStreamopenDataInputStream(Stringname) throwsIOException • publicstaticDataOutputStreamopenDataOutputStream(Stringname) throwsIOException • publicstaticOutputStreamopenOutputStream(Stringname) throwsIOException
Protocolo HTTP • É o único protocolo, com certeza, implementado no J2ME • Classe HttpConnection • Através desse protocolo, pode-se comunicar com um servidor web • Portabilidade garantida • Conhecido como protocolo de pedidos e respostas
Protocolo HTTP Cliente HTTP Servidor Web Pedido Resposta
Comandos HTTP • Comandos (de solicitação) • GET : dados enviados como parte da URL • POST : dados enviados em fluxo separado • HEADER • PUT • DELETE • Composição de uma solicitação HTTP: • Método do pedido • Cabeçalho • Corpo
Requisição HTTP • Forma de indicar o método de solicitação do pedido HttpConnection http = null; http = (HttpConnection) Connector.open(url); http.setRequestMethod(HttpConnection.GET);
Cabeçalhos HTTP • Configurarandoos campos do cabeçalho HttpConnection http = null; http = (HttpConnection) Connector.open(url); http.setRequestMethod(HttpConnection.GET);
Cabeçalho HTTP • Lendo o cabeçalho HTTP • publicString getHeaderField(int n) • public String getHeaderField(String name) • public String getHeaderFieldKey(int n) • publiclonggetDate() • publiclonggetExpiration()
Status HTTP • Indica o resultado do pedido do cliente • Para httpConnection existem mais de 35 códigos de resposta existentes: • 1xx – Informação • 2xx – Sucesso • 3xx – Redirecionamento • 4xx – Erros de cliente • 5xx – Erros de servidor • Métodos java utilizados • http.getResponseMessage(); • http.getResponseCode();
Exemplo - StreamConnection void getViaStreamConnection(String url) throws IOException { StreamConnection c = null; InputStream s = null; try { c = (StreamConnection)Connector.open(url); s = c.openInputStream(); intch; while ((ch = s.read()) != -1) { ... } } finally { if (s != null) s.close(); if (c != null) c.close(); } }
Exercício HTTP • Usando HTTPConnection, desenvolva um MIDLet que deverá fazer um GET na seguinte URL: • http://auth.mview.com.br:8081/mview/auth/LoginForm.do?logon_action=&username=test&password=test • Esta URL retorna SUCCESS para login bem sucedido e ERROR para login mau sucedido • Em caso de login bem sucedido o midlet deverá encaminhar a aplicação para a tela de entrada