08.02.2015 Views

Programação Funcional e Concorrente com Scheme

Programação Funcional e Concorrente com Scheme

Programação Funcional e Concorrente com Scheme

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

notas de aula -<br />

Jerônimo C. Pellegrini<br />

#f)<br />

(( not (= ( string-prefix-length " HTTP "<br />

( caddr lista ))<br />

4))<br />

( print " Not a real HTTP request ")<br />

#f)<br />

( else<br />

( print " Serving " ( cadr lista ))<br />

#t ))))<br />

Quando o usuário tentar acessar URLs <strong>com</strong>o http://exemplo.<strong>com</strong>/, o browser enviará<br />

a requisição “GET /”. O procedimento trata-caminho transforma a string "/" em<br />

"/index.html" Outras regras de reescrita poderiam ser incluídas aqui.<br />

( define trata-caminho<br />

( lambda ( str )<br />

(if ( string = str "/")<br />

"/ index . html "<br />

str )))<br />

O procedimento send-ok-headers envia o cabeçalho da resposta quando o servidor<br />

tiver encontrado o arquivo HTML a ser transferido:<br />

( define send-headers<br />

( lambda ( out )<br />

( display " HTTP /1.0 200 OK\n" out )<br />

( display " Content-Type : text / html \n" out )))<br />

O procedimento copia-arq recebe um nome de arquivo e uma porta de saída, verifica<br />

se o arquivo existe, e envia a resposta adequada pela porta de saída.<br />

Versão Preliminar<br />

( define copia-arq<br />

( lambda ( name out )<br />

( let (( arquivo ( string-append * base * name )))<br />

(if ( file-exists arquivo )<br />

( let (( porta-arq ( open-input-file arquivo )))<br />

( send-headers out )<br />

( newline out )<br />

( copia porta-arq out )<br />

( close-input-port porta-arq ))<br />

264<br />

[ 27 de outubro de 2010 at 15:47 ]

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!