JavaFree.org | RubyOnBr.org

Webrick dando FORWARD para rhtml

Acompanhar Webrick dando FORWARD para rhtml 29 posts, 7 participantes

Páginas: 1 2

Avatar saoj 27 posts

A dúvida é bem simples:

Quero um servlet do Webrick que por exemplo irá num banco de dados pegar um valor e depois repassar esse valor para um rhtml (erb) que irá exibi-lo dentro de um HTML. (O clássico de MVC!)

Como eu faço um forward de um servlet WEBRICK para um template ERB (.rhtml) ???

Existe algum tutorial/exemplo de como se fazer isso ???

Obrigado!

 
Avatar Rafael Mueller 53 posts

você pode utilizar o “render” se não for utilizar o padrão, se precisar de algo diferente.

Se utilizar o padrão, seu controlador foo tem uma action bar, o HTML deve está dentro de app/views/foo/bar.html.erb

 
Avatar saoj 27 posts

Valeu Rafael!

O que eu queria é o seguinte:

- webbrick servlet recebe a requisição

- faz o que tem que fazer (vai no banco por exemplo)

- faz um FORWARD para qualquer arquivo rhtml que vai exibir o html com o resultado

Algo básico como:

<html>
<h1><%= #{firstname} %></h1>
</html>
 
Avatar Rafael Mueller 53 posts

Então, é exatamente isso.

O “forward” é automático ao final da execução do método no controller. Então vai ser renderizado layout com mesmo nome do controller (isso se nenhum outro for específicado, ou se não existir layout com nome do controller, ele utiliza o application.html.erb) e dentro do layout ele vai renderizar a view específica do método, com o mesmo nome do método. (por exemplo views\user\show.html.erb quando acessar o método show do controller user)

 
Avatar saoj 27 posts

Beleza, mas se eu quiser especificar um arquivo em um outro lugar para ser processado? Como indico que quero outro arquivo?

E tem que ser .html.erb ou pode ser .rhtml ?

Valeu Rafael!

 
Avatar Rafael Mueller 53 posts

Opa, da uma olhada nesse carinha aqui http://api.rubyonrails.org/classes/ActionController/Base.html#M000443

 
Avatar saoj 27 posts

O problema é que isso aí é RAILS, não WEBRICK.

Me parece trivial termos um framework MÍNIMO em Ruby para fazer o MVC:

ruby controller → ruby servlet → ruby server pages

ruby server pages = ERB Template

A partir disso poderiam surgir N outros frameworks em Ruby, mais ou menos como aconteceu com o Java.

Mas as pessoas só conseguem ver RoR, estão embebidas por ele… Assim fica difícil… :-)

 
Avatar Rafael Mueller 53 posts

webrick é um servidor http… alguma confusão ?

Além disso, você não precisa utilizar todo o rails, pode utilizar somente o ActiveRecord (por exemplo) e escrever sua propria engine de controllers

 
Avatar saoj 27 posts

webrick é mais que um servidor web, ele é um framework para atender a requisições http.

Um servidor web soa mais como algo que apenas serve conteúdo estático.

Parece que o Rails foi o único que implementou um MVC mínimo: requisicao – servlet – template. Me parece FUNDAMENTAL que tenhamos um framework mínimo MVC em Ruby.

Por que não não olhar para o caminho percorrido pelo Java no server side e tentar oferecer o mesmo? Parece que o pessoal do Ruby está muito ocupado com o RoR.

De novo: Java tem um esquema trivial de MVC chamado servlet + JSP. A partir disso surgiram 1 milhão de frameworks. Ruby precisa de DIVERSIDADE, LIBERDADE e SUPORTE. Só num mercado livre e desrgulado as coisas boas aparecem.

 
Avatar Rafael Mueller 53 posts

Bem, pra mim um servidor http não tem esta associação com conteúdo estático, mas isso não importa.

Além do rails, outro framework conhecido é o Merb

Acho que o pessoal do Ruby não está preocupado em seguir o exemplo do Java… não sei se a maioria da comunidade considera Java exatamente um “modelo”.

IMHO Java (a linguagem) tem mais pra aprender com Ruby do que o inverso.

 
440002948_b8dc8436b4 Marcelo Júnior 811 posts

[mode metido:on]
Reparem que este tipo de discussão sempre surgem ou com programadores .net ou java, isso nunca ocorre (q eu tenha visto pelo menos) com programadores Perl, Pyhton, PHP e outras.

Seria interessante tentar enxergar outras possibilidades de se fazer as coisas. A forma como Java implementa as coisas é comprovadamente muito boa, mas não é a única.

E quanto esta questão:
bq. Por que não não olhar para o caminho percorrido pelo Java no server side e tentar oferecer o mesmo? Parece que o pessoal do Ruby está muito ocupado com o RoR.

É justamente esta a filosofia. Não termos que aprender 67 frameworks para desenvolver um aplicativo. Ou tu acha necessário usar o framework XYZ pra uma função, JKL para outra, e outro KJT para fazer a ligação entre o XYZ e o JKL?

[modo metido:off]

 
Avatar saoj 27 posts

“Acho que o pessoal do Ruby não está preocupado em seguir o exemplo do Java… não sei se a maioria da comunidade considera Java exatamente um “modelo”. IMHO Java (a linguagem) tem mais pra aprender com Ruby do que o inverso.”

Arrogância só vai prejudicar o Ruby. Ruby é uma linguagem mais legal, mais poderosa e mais flexível que o Java. SIIIIIIIIIIIIIMMMMMM !!! Qualquer criança enxerga isso…

Agora voltemos para o mundo real para perceber que Java teve um sucesso estrondoso em termos de projetos open-source, adoção de programadores e empresas, livros, frameworks, etc.

Ruby quer ser um brinquedo de uma comunidade restrita de fanáticos? (Vide smalltalk, lisp, etc.) Ou Ruby quer ganhar o mundo e o mercado?

Se for a opção um tenho certeza que estamos no caminho certo.

Se for a opção dois, então precisamos de um base para decolar. E para aplicações web isso seria um framework web MVC fundamental, assim como Servlets + JSP do Java o é. A partir desse framework surgiriam milhares de outros.

Eu estou estudando Ruby e tentarei fazer isso. Espero conseguir, pois estou começando agora com Ruby. Mas me espanta constatar que poucas pessoas sentiram falta disso. Desculpa a frustração de quem está vindo do mundo Java…

 
Avatar saoj 27 posts

Não Marcelo! Quando vc diz

“É justamente esta a filosofia. Não termos que aprender 67 frameworks para desenvolver um aplicativo. Ou tu acha necessário usar o framework XYZ pra uma função, JKL para outra, e outro KJT para fazer a ligação entre o XYZ e o JKL?”

Eu concordo em genero, numero e grau. Aprender 67 frameworks para fazer uma aplicação web é PÉSSIMO. É uma pena que 90% das pessoas que trabalham com Java não percebam isso. Alguns poucos (como eu) já perceberam isso a muito tempo.

A questão é ter liberdade de escolha e DIVERSIDADE de projetos, frameworks, etc.

Eu não vejo problema em se ter 1000 frameworks web em Java. Pelo contrário, eu escolho e que mais me agrada, o que mais atende ao meu projeto em questão e pronto.

Quando eu entro numa sorveteria, eu gosto que tenha vários sabores, quanto mais melhor. Qual é a graça de ir numa sorveteria que tem 2 sabores no cardápio?

 
440002948_b8dc8436b4 Marcelo Júnior 811 posts

Sim, temos que ter opções, e como ja foi mostrado no post acima, tem o Merb, tem também o Nitro , existem sim outros Framewokrs.

Porém, rails implementa o suficiente para vc desenvolver um aplicativo web, ele não implementa nada que contenha regra de negócio. Isto que você quer fazer não é culpa do Rails, ele não impede q você faça isso. Mas ele é extremamente flexível para que você o adapte para sua forma de trabalhar.

Pois veja, se não estou enganado, você é o primeiro a aparecer aqui na comunidade com essa dúvida, ou seja, para a maioria do pessoal não foi preciso implementar essa funcionalidade. Não caberia colocar isso no framework. Porém, como eu disse logo acima, ele é simples o suficiente para que você implemente isto que vc quer.

Dai vc vai pensar, putz, vou ter que implementar isso, se fosse no Java já estaria implementado, dai eu lhe digo, se isso é realmente necessário, com certeza já existe um plugin, ou algum tutorial ensinando a fazer isto em RoR, agora, caso vc não encontre nenhum material a respeito, não seria o correto você repensar se esta forma realmente se faz necessária?

 
440002948_b8dc8436b4 Marcelo Júnior 811 posts

A, e outro detalhe, webrick é indicado apenas para desenvolvimento, para produção, o mais indicado é o Mongrel. Quem sabe, no mongrel você encontre o que está procurando.

 
Avatar Shairon Toledo 1428 posts

Desculpa a frustração de quem está vindo do mundo Java…

Acho que vc está procurando onde está escrito o modelo de request/response, contexto, etc do ruby, é isso? “R2EE” Ruby Enterprise Edition?

Pelo contrário, eu escolho e que mais me agrada, o que mais atende ao meu projeto em questão e pronto.

Acho que pra isso temos três alternativas

  • Usar o que tem
  • Pagar pra desenvolver o seu
  • Ou desenvolver
 
440002948_b8dc8436b4 Marcelo Júnior 811 posts

Agora voltemos para o mundo real para perceber que Java teve um sucesso estrondoso em termos de projetos open-source, adoção de programadores e empresas, livros, frameworks, etc.

Marketing meu amigo, a Sun investe milhões em marketing e lavagem mental.

RoR, sem marketing, sem publicidade, soh no boca a boca, chegou onde chegou, e agora a própria Sun está de olho nessa nova forma de desenvolvimento (já ouviu falar em JRuby?). Se a progenitora do Servlet + JSP está comovida com nossa forma de desenvolver, quem somos nós para discordar?

 
Petergriffinbe7 Marcos Rubinelli 66 posts

Sérgio, o RDoc de ERB está aqui . Além disso, se você quer ver exemplos de frameworks minimalistas, veja Camping e Sinatra

 
440002948_b8dc8436b4 Marcelo Júnior 811 posts

E outra (Hoje estou inspirado)

Quando eu entro numa sorveteria, eu gosto que tenha vários sabores, quanto mais melhor. Qual é a graça de ir numa sorveteria que tem 2 sabores no cardápio?

E vc, qual vc prefere, fica estudando as dezenas de opções para o melhor framework, ou simplesmente desenvolver o sistema pro teu cliente e faturar a grana?

 
Avatar saoj 27 posts

Concordo com vcs. Eu quero simplesmente ter a possibilidade de desenvolver o meu próprio framework caseiro para um projeto próprio. Isso é bastante normal e outras pessoas também devem querer fazer isso.

Me parece esquisito desenvolver ele em cima de RAILS. Vou dar uma olhada no Mongrel (obrigado pela dica Marcelo). O que eu quero é apenas um modelo simples de controller → servlet → template.

Acredito que não estou pedindo muito para o Ruby…

 
440002948_b8dc8436b4 Marcelo Júnior 811 posts

Cara, então antes de desenvolver um outro framework, porque voce não desenvolve um plugin então. Além de estar fazendo o voce quer, soh que de uma outra forma, você certamente estará ajudando a comunidade.

E pode parecer estranho desenvolver algo para um framework, e não para uma linguagem. Mas é questão de costume, não tem perigo algum.

 
Avatar rrsilva 181 posts

Bom se o intuito é desenvolver outro framework, existe este artigo aqui no rubyonbr.org http://rubyonbr.org/articles/2007/04/14/acampamento-de-curiosos/

Neste artigo tem um exemplo simples, após dar uma lida você pode instalar o rails mesmo assim e dar uma olhada no código fonte dele… talvez tenha algo interessante ali

Quanto a comunidade Ruby não diversificar as coisas, na minha opinião acredito que seja pelo fato do Ruby pela sua natureza ser livre o bastante p/ vc colocar métodos aonde quiser, enfiar um module aonde quiser… inclusive em String, Fixnum e etc…

Então o Rails, se não te ajuda em algo… faz um plugin e pronto.

Quanto ao Java ter XYZ frameworks, eu como programador JAVA oque eu vejo é que os frameworks Java não dá tanta liberdade de escolha, por este motivo existem N frameworks, a maioria dos frameworks java são feitos p/ derrubar algum outro. Vide, mentawai, vraptor, webwork… e etc

Isso se tornou um ciclo vicioso na comunidade Java, todo mundo fala para não reinventar a roda, porém vivem criando frameworks p/ a mesma coisa.

O vilão ai é o “final class”, por não ter como modificar o framework de uma maneira facil, o mais facil é reinventar a roda =/

 
Petergriffinbe7 Marcos Rubinelli 66 posts

O modelo de ERB atual não é muito eficiente, principalmente em termos de memória. Em vez de dar um “forward” para um rhtml, o que se faz é carregar o template em memória como string, criar código ruby por trás panos no ERB.new, e dar um eval desse código no contexto de onde você quer tirar as suas variáveis. Esse eval gera uma outra string que você pode então jogar na saída.

 
Avatar Shairon Toledo 1428 posts

Uma alternativa mais simples do que o ERB é interpolação de string dentro de um bloco de string (%Q{…}). Assim

saída


não é zero
mais outras coisas dentro da string.
outra expressão, 0,1,2,3,4,5,6,7,8,9,10

Observe a equivalência dos símbolos

 <%= expr %> 
pelo
 #{ expr } 
usualmente já conhecido. O fincionamento resume se em resolver todas as expressões, põe na pinha com a posição e depois concatena com o corpo do texto. É mais rápido do que ERB, é nativo. Mas fica esquisitão :)

 
Avatar saoj 27 posts

“Em vez de dar um “forward” para um rhtml, o que se faz é carregar o template em memória como string, criar código ruby por trás panos no ERB.new, e dar um eval desse código no contexto de onde você quer tirar as suas variáveis. Esse eval gera uma outra string que você pode então jogar na saída.” (como faz citação aqui????)

Vou tentar fazer isso (primeiro estou estudando Ruby)! Seu eu conseguir fazer bem feito, com certeza eu irei publicar/liberar para a comunidade. Com certeza ninguém vai querer ficar reinventando isso toda vez que tiver que fazer uma renderização. A não ser que 1) seja muito ridículo ou 2) ele esteja usando o Rails que já deve ter isso abstraído.

Obrigado pelas dicas pessoal!

Próxima página

Páginas: 1 2