Loading
Nota de Estudos
Study Reminders
Support
Text Version

Linha de Comando Interativo Sobre HTTP

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

Olá a todos, bem-vindos à quarta semana do seu curso sobre desenvolvimento de aplicações modernas.Vamos começar esta semana revendo algumas das coisas que fizemos antes e continuarcom o tema principal desta semana. É assim que aceitamos a entrada usando HTML.
(Consulte O Tempo De Deslizamento: 00:36)
Lembre-se de que começamos com um problema simplificado. O nosso problema era um conjunto de colegas de quarto quena verdade compartilhavam vários eventos como assistir a filmes ou ter jantares juntos. Para cada evento, um e apenas um colega de quarto pagaram por todo o gasto. No entanto, ao longo do tempo, o grupo decolegas de quarto precisou conciliar suas dívidas ou créditos. O nosso problema era criar um sistema, um aplicativo, que poderia ser usado pelos colegas de quarto.E eles poderiam determinar a quantidade de dinheiro que eles deviam pelo grupo ou eles tinham quereceber do grupo. Eventualmente, o nosso aplicativo deve estar em um computador. Mas certoagora, para simplificar o problema, vamos supor que há apenas um computador que écompartilhado pelos colegas de quarto.
(Consulte O Tempo De Deslizamento: 01:48)
É claro que a coisa mais importante que precisamos fazer é realmente trabalhar o algoritmo queserá usado por todos os colegas de quarto. O algoritmo é independente do sistema de computação. Elepoderia ser usado em qualquer lugar. A ideia do algoritmo é representar eventos por linhas e despesas individuais dedos colegas de quarto por colunas. Assim, qualquer gasto por um determinado colega de quarto para um eventoseria inserido correspondente à linha para o evento e a coluna do roommate.Dados esses dados, nós computaria o compartilhamento de cabeça para aquele evento. Por compartilhamento de cabeça é simplesmente ogasto real dividido pelo número de colegas de quarto. Esta cota por cabeça seria subtraídado dinheiro gasto por cada colega de quarto. Se o resultado da subtração for negativo, então nósinterpretamos isso como o dinheiro que é devido por aquele colega de quarto específico para o resto do grupo. Seo número for positivo, interpretamos que como o dinheiro que deve ser recebido por aquele particular deroommate dos demais no grupo.Aviso que a soma de toda a participação de cabeças por cabeça tem que ser zero. Na verdade, este é o invariante do problema. Em outras palavras, a soma será sempre igual a zero independentemente do número de colegas de quarto ouo número de eventos. Usamos essa ideia para argumentar a correção do nosso algoritmo. Precisamosdiscutir sobre a correção antes mesmo de implementá-lo em uma máquina porque as máquinas nãopossuem inteligência.
(Consulte O Tempo De Deslizamento: 04:02)
Tendo criado um algoritmo, nosso próximo passo foi realmente experimentar isso. A abordagem mais simples foidemonstrada pelo professor Sane usando simplesmente caneta e papel. Há naturalmente vantagens elimitações dessa técnica específica de resolver o problema. Mas vamos continuar com a nossa história. Um dos problemas com essa coisa em particular é que ele não é baseado em computador.(Consulte o Slide Time: 04:34)
Para torná-lo computador baseado em nós experimentamos uma solução baseada em planilha. A solução baseada em planilhapermitiu que nos focássemos no aspecto algorítmico real, semse preocupar com os detalhes de como a entrada deve ser dada ao computador que foi cuidado
da própria planilha. Nem tivemos que nos incomodar com a saída que também foi tiradacuidado com a planilha.Isso permitiu que nos focássemos nos detalhes do algoritmo. E de fato, nós resolvemos explicitamente como o invariantenos ajudou a garantir que nossos cálculos estavam corretos.(Consulte o Tempo de Slide: 05:16)
Depois, prosseguimos para a próxima parte em que lidamos explicitamente com a saída de terminal e saída do terminal. O terminal é talvez um sistema de input-output mais simples, onde a entrada é aceita como textoe a saída exibida como texto simples. Não há interface gráfica. Não obstante, a ideia deum programa de linha de comando que funciona em um terminal nos permite examinar alguns conceitos simplescomo interatividade.Quick pergunta: Se o dispositivo em que você está assistindo esta palestra é interativo?Nós vimos que non interatividade é quando todas as informações necessárias para funcionamento do computador dea chave do programa é dada antes do início do programa. E a interatividade é necessária quando as informaçõesnecessárias para o funcionamento do programa estão disponíveis após o início do programa. Nósdemonstramos a versão não interativa da linha de comando e tinha você para fazer o interativo
versão da linha de comandos via uma atribuição. O que você vê na tela é um diagrama de blocosdo aplicativo da linha de comandos.(Consulte o Slide Time: 06:33)
A versão da linha de comando interativo parece algo assim. Ainda era a versão de linha de comando, exceto que toda a sequência de comandos tinha que ser dada após o início do programa.O que se vê é uma entrada de amostra, uma sequência de comandos em que alguns poucos amigos estão registrandoem si, há algumas despesas. Há alguns relatórios e um único comando chamado ‘ end ’que informa ao nosso sistema que não há mais comandos que seguem.Dado isto, o programa interativo linha de comandos exibia saída como antes; aceitou a entrada, executou os cálculos e exibiou a saída como antes. Mudamos então essa versão de linha de comandos interativa, de modo que exibia a saída usando HTML. A linguagem básica de markupdo sistema de hipertexto (que é a web). Principalmente, ela nos permitiu fazer era tornar-seindependente do dispositivo de saída.No sentido de que, a saída produzida estava simplesmente marcando os detalhes do display, ela nãose preocupava com a forma como esses detalhes foram implementados no dispositivo de saída. Na verdade, todo o sistema de markuppoderia ser transportado sobre a rede até mesmo uma máquina remota e poderia ser exibido em um
máquina remota. Isso não foi possível em um display de texto. HTML nos permitiu ser independentes deo dispositivo de saída.Uma boa apreciação deste problema vem em quando você realmente altera a versão de linha de comandosinterativa para uma interface gráfica, como a que o Professor Sane demonstrou. Elatrouxe à tona o conceito de um modelo e uma visão. Um modelo é quando você realmente tem um cálculo deocorrendo no programa e visualização é o que é apresentado fora. Separando esses doispermite que você exiba a saída através da rede, algo que não era tão facilmente possívelantes.
Este é um bom ponto para pausar e revisar o material que foi coberto até o momento. Vamos agoracontinuar com o problema de aceitar entrada via HTML.(Consulte o Tempo de Slide: 09:25)
Observe que, a saída do modo de saída foi separada do cálculo e do dispositivo de saída,incluindo a possibilidade de que os dispositivos de saída estejam realmente em toda a rede. Gostaríamos deimaginar algo semelhante para entrada, também. Nós pensaríamos conceitualmente a entrada como vir empartir de algum tipo de cliente e nosso aplicativo de compartilhamento justo seria lá o qual chamaremos ‘ um servidor’ a partir de agora.
Eles poderiam estar na mesma máquina, mas porque eles estão conceitualmente separados, agora elespoderiam estar através da rede também. É por isso que pensamos em um sistema cliente separado e um sistema de servidorseparado. O cliente é aquele que será usado por nossos colegas de quarto. E o aplicativo fair shareserá visível para o cliente como um aplicativo no lado do cliente. Qualquer que seja o aplicativoque realmente vai acontecer no servidor.Entre o cliente e o servidor, haverá alguma comunicação, algumas informações que serãoserão transferidas. Isso é semelhante à maneira como a saída foi exibida sobre uma rede. No slide quevocê vê, temos linhas pretas que indicam o tempo no lado do cliente e no tempo no lado do servidor. Conceitualmente clientes, esse é o nosso grupo de colegas de quarto, carregamos algum tipo de página HTML,que vai coletar entrada.Recheia que a entrada vai ser uma sequência de comandos. Uma vez que os comandos sejam inseridos,nossos clientes vão enviá-lo para transferir as informações do lado do cliente para o lado do servidor. Em seguida, o servidor receberá as informações e processá-lo. Ele executará os cálculosou cálculos requeridos pelos comandos e criará uma página de resultados. Isto é idêntico ao nossoexercício anterior onde o nosso aplicativo de comando gerou saída usando HTML.Este é o que o servidor fará e que a página HTML agora será transferida de volta para o cliente.O sistema cliente agora carregará essa página e mostrará para os usuários. Do ponto de vista doscolegas de quarto eles vão ver que tinham um aplicativo que aceitado a sua entrada. Eles apresentaramos detalhes dessa entrada. Eles realmente não se preocuaram com onde o aplicativo estava. Mas os resultadosforam exibidos em seu próprio sistema.Pictorialmente, isto é o que está acontecendo. As informações que são enviadas pelo cliente para o servidorsão chamadas como dados POST. Post é um mecanismo que HTTP define para comunicar informaçõesdo cliente para o servidor. A resposta do servidor é o que quer que seja produzido pelo servidor emresposta às informações que ele recebeu, mas representado em HTML, essa resposta é enviadapara o cliente.
(Consulte O Tempo De Deslizamento: 13:19)
Isso significa que precisamos entender como os servidores web são configurados. Não precisamos entrar emdetalhes neste ponto, apenas precisamos entendê-lo conceitualmente. Um servidor web é basicamente outro programa. Em sua tela, você vê um sistema Ubuntu que instalou um servidor HTTP.Felizmente, o Ubuntu por padrão nos oferece uma configuração de trabalho e o fato de teruma configuração de trabalho bem-sucedida é mostrado pela página que ubuntu carrega quando montamos o servidor.
O screenshot é um navegador web inteiro e, portanto, a página real aparece menor. Emslides subsequentes vamos ampliar esta parte da página, de modo que ela seja claramente visível.
(Consulte O Tempo De Deslizamento: 14:26)
A configuração padrão do HTTP no ubuntu está no diretório /etc/apache2 e o arquivo échamado de apache2.conf. O servidor web exigirá um determinado diretório dentro do qual seus arquivos HTMLexistirá. Isto é chamado ‘ document root ’ do servidor web e por padrão no ubuntu ele é/var/www/html e o arquivo html padrão é index.html. Em breve examinaremos a ideiade cgi-bin.
Mas, por enquanto, notamos que o diretório padrão para interface de gateway comum CGI é/usr/lib/cgi-bin em sistemas ubuntu. É possível que configurações padrão variem emsistemas diferentes. A ideia de qual diretório particular mudará em sistemas diferentes,no entanto, a ideia de que há algum arquivo de configuração, há algum diretório onde há uma raiz de documentos padrãoe há algum diretório onde há um cgi-bin padrão Estas ideiassempre estarão lá.
(Consulte O Tempo De Deslizamento: 16:05)
Aqui está a página padrão ubuntu. Esta parte é tipicamente padrão ubuntu e esta parte do CGI demo éalgo que nós modificamos a fim de demonstrar como o CGI bin funciona. A ideia do CGIbin é executar programas. Um servidor web tipicamente interage da seguinte maneira:
• Ele recebe alguns pedidos de algum cliente,• Ele responde a essa solicitação, e• O pedido poderia retornar o arquivo index.html para o cliente.
Bem, em resposta a isso, o servidor irá pegar o arquivo de ponto html do índice e transferi-lo através da redepara o cliente solicitante. Então, uma interação do servidor é um pedido e uma resposta. Essa é uma interaçãodo servidor. O sistema HTTP permite que um servidor responda a uma quantidade de solicitaçãopares de resposta de interações. Cada uma dessas interações são, na verdade, independentes entre si.Em outras palavras, no que diz respeito ao servidor, o servidor não se lembra do que aconteceu ema interação anterior que é uma solicitação para resposta quando está lidando realmente com a interação atualde solicitação e resposta. Dizemos que o servidor é apátrida. Se o servidor web estiver apenasrespondendo por pegar arquivos e enviá-los através da rede para o cliente, então issoseria um caso muito desinteressante. Seria mais interessante se o código do servidor, processasse informaçõese depois respondasse.
Para processar informações, precisaremos executar programas que processarão as informaçõesque foram recebidas. Essa capacidade de executar programas e processar as informações recebidas é o queo sistema CGI bin permite que você faça. No diretório do CGI bin, seja qual for nestecaso específico de ubuntu, ele é / usr/lib/cgi-bin, você pode colocar programas que deseja que o servidoruse em resposta às informações que ele obtiver.Vamos ilustrar dois programas o programa show ambiente e o programa Helloworld. O programa de ambiente de show é um simples shell script que exibirá as variáveis de ambientedo servidor para o cliente. Aliás, essas variáveis de ambiente sãosempre disponíveis para qualquer programa CGI. O próximo programa é um pequeno shell script, quedemonstra como os programas Java podem ser realmente executados pelo servidor.Este seria um bom ponto porque realmente precisamos que a capacidade de executar programas Java todos os nossos programastenha sido escrita em Java. Em algum momento depois, também veremos como nosso aplicativo de fair shareserá parecido com o uso de um sistema CGI.(Consulte o Slide Time: 19:58)
Aqui está um script shell, que mostra o ambiente, é um script bash. Esperamos que esses comandossejam bastante evidentes. As duas primeiras linhas são linhas necessárias para fora de uma resposta do servidor.Recall que este script específico vai ser executado quando você clicar neste link específico. Então, o
servidor vai primeiro imprimir fora essas duas linhas que são necessárias pelo protocolo HTTP e então eleexecutará essas linhas. Observe que o que este executa é simplesmente criar uma página HTML.(Consulte o Tempo de Slide: 20:55)
Início da página HTML é por aqui, parte inicial da página de resposta.(Consulte o Tempo do slide: 21:05)
Este comando realmente obtém os dados do ambiente e os processa usando o comando awkpara criar uma tabela HTML da variável de ambiente e ela é value.(Consulte o Tempo de Slide: 21:21)
E, finalmente, há a parte rasteira da resposta HTML. Este simples script CGI constróia página web real da resposta. A webpage ao clicar sobre aquele ambiente de showCGI link, a webpage pareceria algo assim.(Consulte o Tempo de Slide: 21:41)
Na verdade, esta página web foi modificada usando folhas de estilo. É por isso que parece agradável. Háuma barra de título agradável os nomes das variáveis de ambiente estão à esquerda, os valores estão à direitae eles são apresentados de forma neatosa. Se você remover as folhas de estilo ele simplesmente seria um conjunto de saídas; Uma página HTML em bland.
(Consulte O Tempo De Deslizamento: 22:15)
Vamos em frente e veja como executar programas Java através do método CGI bin, aqui está um simples programa Java ou HelloWorld que simplesmente imprime Hello Java CGI world. No navegador, isso iráparecer um texto simples. Sendo um programa Java, nós simplesmente precisamos compilá-lo para obter o arquivo de classe correspondente dopara ser executado. Este arquivo de classe será, então, executado através de um shell script.(Consulte o Tempo de Slide: 23:01)
As etapas em detalhes seriam algo assim:• Você escreveria o seu programa HelloWorld Java como de costume.
• Você irá compilá-lo usando Javac como usual.• Isto resultará em um arquivo de classe de ponto HelloWorld novamente como de costume.Mas, agora você vai copiar este arquivo de classe no diretório do CGI do seu servidor. Em nosso exemplo, nosso diretórioCGI é slash users slash lib slash cgi-bin. Agora esse arquivo de classe está pronto para execução.Mas como executá-lo? Precisaremos de um shell script que segue.Novamente, o shell script irá primeiro porque é o script de resposta. Ele primeiro emitirá essas duas linhas.Java exigirá que a parte da classe seja configurada para que o diretório, onde estão os seus arquivos de classe, estejadisponível no caminho. Você pode então executar o arquivo de classe HelloWorld usando o seu método usualJava HelloWorld. Mas esse arquivo de classe já foi copiado no diretório do CGI bin como antes. A final deque você agora precisa fazer está em seu índice ponto HTML, crie este link.Recall que quando você pressionar este link específico, o script HelloWorld.sh que é este script é oque será executado. E este script novamente por sua vez executará o programa real HelloWorld.(Consulte o Slide Time: 24:52)
E quando você fizer isso, seu navegador mostrará a saída HelloWorld Hello Java CGI mundocomo esta. Mas, por ser um navegador, temos que ampliamos e mostramos por aqui. Este é um bom pontopara pausar e revisar o material que você aprendeu até agora.
(Consulte O Tempo De Deslizamento: 25:16)
Vamos agora ir em frente e tentar observar como o nosso aplicativo de compartilhamento justo iria olhar sobre HTTPdo lado do cliente que é para os colegas de quarto. Devemos primeiro carregar uma página HTML, que irápedir entrada. Provavelmente pareceria algo assim, quando olho para o navegador web inteiro.(Consulte o Tempo do slide: 25:50)
Deixe-nos ampliar isso e concentre-se apenas na parte em que a nossa aplicação está. Pareceria algocomo este. Diria bem-vindo. Esta é uma versão web do aplicativo de compartilhamento justo. E vailevar os colegas de quarto a entrar no comando, sequência terminada por um fim. Aqui estão alguns
seqüências de comando que nossos colegas de quarto entraram. Eles, então, pressionariam o botão de envioa fim de transferir as informações que eles colocaram em over para o servidor.(Consulte o Tempo de Slide: 26:35)
Essa parte é o que ocorre quando o usuário que é nossa assessoria de imprensa de roommate se submete. As informações queeles inseriram são organizadas como postagem de dados e enviadas para o servidor.(Consulte o Tempo de Deslizamento: 26:56)
O servidor executará o cálculo e apresentará a saída em forma HTML. O que,presumivelmente, pareceria algo assim. Mas já sabemos como fazer isso porque isto é
o que fizemos para gerar a saída usando HTML. Essa foi a nossa maneira de começar a aprender HTML comobem como a ideia de folhas de estilo em cascata. Foi o que fizemos na semana passada.(Consulte o Slide Time: 27:26)
Aqui está um shell script que você pode querer adicionar ao CGI bin. O que ele faz é, como de costume, imprimirfora as duas linhas necessárias pelo protocolo HTTP, configurando o caminho de classe para a raiz de documentos de contextoque é o user lib CGI bin e então ele processa a entrada que ele recebeu. Se o método de entradafor post, que é o que vamos utilizar e o número de bytes de entrada é maisdo que zero, então ele irá ler aqueles número de bytes nesta variável a partir da entrada padrão.Próxima a variável será impressa e processada usando o comando awk. Em seguida, ele seráprocessado usando o comando sed para remover para substituir os caracteres mais por um caractere de espaço.E então o próximo comando sed substituirá ‘ %0D%0A ’ pelo código HTML BR uma quebra. Esta saída de processoé então dada como entrada padrão para nossa versão interativa HTML share de Java share.Então, a sequência de eventos é algo assim.Nossos colegas de quarto pressionam ‘ submit ’, e postam e enviam os dados. O sistema HTTP define o formato de post. O formato parece algo assim.(Consulte o Slide Time: 29:22)
Nossos colegas de quarto tinham digitado registra espaço f 1 espaço f 2 novo espaço de gasto de linha f 2200, nova linhae assim por diante. O que o navegador faz é todo espaço é substituído por um personagem mais. Etoda nova linha é substituída por percentual zero D percentual zero A que incidentalmente são valores ASCIIpara retorno de carro e nova linha. Isso permite que o navegador envie um único fluxo de texto como dados como dados de entradapara o servidor.É por isso que, precisamos do script que levará nos particulares post dados que foram enviados poro cliente e processá-lo de tal forma que as linhas originais de comandos sejam recuperadas. Aqueles comandosque são recuperados são então dados ao nosso programa usual. Lembre-se de que nosso programa a versão HTML interativado programa levou entrada um conjunto de linhas de comandos e gerou uma saída de HTML.Então, a forma como montamos o sistema é quando os usuários pressionam, os dados dos postes chegam ao servidoronde existe o nosso real aplicativo de compartilhamento justo, qual aplicativo? Aquele que tínhamosescrito na semana passada; um aplicativo produzindo HTML. Introduzimos um shell script in-between,que converterá os dados do post na entrada que o nosso aplicativo Java requer. Isso é tudo.(Consulte o Slide Time: 31:16)
Vamos voltar para a forma como nosso aplicativo cliente-lado se parece. A página HTML que foiapresentada aos nossos colegas de quarto se parece com isso. E vimos que ele contém uma caixa de texto, uma área de textoonde os colegas de quarto digitam os comandos. Esta parte do código realmente se parece com isso. Nósusamos o formulário de elemento HTML para realmente aceitar entrada e enviá-lo para o servidor.Como fazemos isso? O formulário contém uma série de componentes diferentes. Em primeiro lugar, eledefine o método pelo qual deve comunicar as informações ao servidor. No nosso caso,vamos usar o método post por isso especificamos post over here.(Consulte o Tempo de Slide: 32:27)
Em seguida, ele diz ao servidor qual é o particular, então precisamos dizer ao servidor qual script no servidordeve ser executado quando os dados são recebidos usando post. Observe que essas informações estão disponíveisse essas informações forem especificadas na página web do cliente.(Consulte o Tempo do slide: 33:08)
Quaisquer que sejam as informações que foram coletadas pela página HTML do cliente será dado um nome‘ comandos ’, o nome que você precisa está escrito no formulário por aqui. Este é o nome porque o nosso servidor reconhecerá o comando válido.(Consulte o Tempo de Slide: 33:33)
A ação de transferir os dados do formulário, este é o dado do formulário para o servidor será executado poreste tipo de entrada. Este tipo de entrada cria um botão com o label ‘ Submit ’ nele.
(Consulte O Tempo De Deslizamento: 33:52)
Este tipo de entrada fará a ação de limpeza dos dados do formulário. Não há envio, seja qual for (os dados do formulário) está inserido é apagado e você recebe uma área em branco novamente. Observe esta parte, este nome‘ Comandos ’ é exatamente aquele que tínhamos usado por aqui. Essa linha inteira é o que o servidorvai receber. Se o servidor receber este que o nosso shell script deve primeiro utilizar o comando awk paradividimos toda esta string em duas partes antes da igual para assinar e após a igual para assinar.A segunda parte, após a igual a assinar, é aquela que precisamos processar. Seja lá o que houverapós o sinal de igual é então processado pelo comando sed que irá primeiro olhar para os caracteres maise substituí-los por espaços. E então o próximo comando sed que irá ocupar esses caracteres“ %0D%0A ” e substituí-los por novas linhas. É assim que recuperamos as linhas de comandos queprecisamos.
(Consulte O Tempo De Deslizamento: 35:21)
Isso é o que é ilustrado nesta parte dos slides. Os dados do post chegam como comandos iguais atoda essa sequência. Este script que vimos antes de processos que o awk usará o igual ouo caractere separador e imprimirá a segunda parte que for após o igual para o comando sed irásubstituir os sinais de mais por espaços. Em seguida, ele substituirá o “ %0D%0A ” pela quebra de código HTML.Isso resultará em comandos individuais em linhas individuais, algo que o nosso aplicativo fair shareespera.Como nós sabiamos que ele espera? porque nós escrevemos na semana passada. O conjunto de comandos é entãodado como entrada para o nosso aplicativo de produção HTML interativo.
(Consulte O Tempo De Deslizamento: 36:24)
E isso produz a página HTML que vemos. Vamos relembrar de volta a figura com muita clareza.Nossos colegas de quarto carregam a página inicial, entram nos comandos e pressionam botão de envio. Então o navegadorassume o que tiver sido escrito pelos comandos que foram dados peloscolegas de quarto é convertido para postar dados enviados para o servidor. O servidor recebe os processos pós dadosque para recuperar a sequência de comandos que é entendida por nosso programa Java HTML.Tendo recebido os comandos, o programa Java produz um HTML que é enviado pelo servidorde volta para o cliente como o resultado deste envio. Amigos, temos agora o nosso primeiro aplicativo web. Separamos a parte de saída de entrada da parte de processamento. A parte de processamento, o modelo pode potencialmente ser remoto. E as visualizações que são apresentadas no lado do cliente, a visualização iniciale a visualização da resposta; elas estão completamente no lado do cliente.É essa separação que nos permitiu criar aplicações web. Por que é um aplicativo web?Porque os dados reais são transferidos através da web e há um servidor que está processando issoinformações e respondendo de volta. Observe que, embora do lado do cliente, ou seja; nossos colegas de quarto,veja um aplicativo muito gráfico no lado do servidor, o processamento é quase você sempre usandolinhas de comando. Vamos parar neste ponto. Obrigado e veja você na próxima sessão.