Pergunta

Sim, eu sei, a antiga pergunta da melhor estrutura da web ... mas deixe -me explicar.

Estou procurando a estrutura da web baseada em servlet java que permita a interra -lança RESTful e também é adequado para criar guis da web.

O que eu quero:

  • Suporte de descanso com a negociação de conteúdo HTTP e um bom mapeamento de URL
  • Conversão de dados de parâmetros de solicitação para objeto de domínio (e idealmente a outra direção também)
  • Não há necessidade de duplicar o objeto de domínio como interface para a web (como em struts)
  • Easy EJB integração
  • A injeção de dependência deve ser realizada pelo servidor Java EE
  • Código Compreensível (eu não gosto de Spring MVCS Magic Wiring de componentes no caminho da classe)
  • Fácil de configurar (o que não está configurado na primavera magicamente é tedioso de configurar no contêiner - eu prefiro às vezes dependências diretas)
  • A roda não deve ser reinventada, por exemplo, algo como JPA e Validação do Bean deve ser usada e não reinventada pela estrutura, ou pelo menos esses padrões devem ser fáceis de usar.
  • Suporte de validação com a exibição de erros em formulários
  • Apoio à internacionalização

Os candidatos:

  • MVC da primavera é poderoso, mas estou cansado da configuração da primavera e não gosto do modelo de programação. Eu acho que é um pouco abstrato e flexível e, portanto, exige muita configuração. E não gosto da maneira como o MVC da Spring usa anotações. Mas também existem algumas falhas de design, como métodos que retornam um valor via return E através de um parâmetro de saída - realmente feio! Eu acho que não seria fácil usar o MVC da primavera com a injeção de dependência Java EE, já que o MVC da primavera depende fortemente da primavera.

  • Roo Parece ser legal, mas é apenas outra maneira de criar um aplicativo Spring MVC e faz algumas coisas estranhas com a AOP.

  • Suportes é um tanto estranho e esbanjador.

  • Listras A abordagem do ActionBean não parece muito melhor do que os suportes. Eu não gosto disso.

  • Grails Bom, mas buggy (pelo menos antes de 1,2). Reeinvents the Wheel: eu preferiria o JPA a Gorm, por exemplo.

Veja também 10 melhores estruturas da web java

Não estou procurando estruturas com estado da interface do usuário no servidor como wicket, tapeçaria ou JSF. Eu acho que essa abordagem contradiz os princípios fundamentais da web!

Então o que fazer? Escreva uma estrutura do zero? Hmm ...

Eu gostaria de ter algo como JAX-RS com suporte para GUIs clássicos do navegador. Por exemplo, a estrutura deve apoiar a validação e colocar erros de validação no formulário Redisplay. Existe algo assim? Alguma recomendação?

Foi útil?

Solução

Eu acho que sua caracterização de Grails como "Buggy" é um pouco dura. Embora você encontre bugs ao usar Grails, geralmente são as estruturas subjacentes (primavera, hiberna) ou um plug -in responsável e não em graxos.

Além disso, dado que o hibernato é uma implementação de JPA, faz realmente sentido dizer que

Eu preferiria JPA a Gorm

Enfim, se você realmente não está feliz com graals ou qualquer outra estrutura que você mencionou, o Estrutura de jogo Pode valer a pena dar uma olhada.

Outras dicas

Eu escrevi sobre o uso de Jax-rs como o unificar a estrutura da web no passado. Você pode fazer tudo o que precisa com o JAX-RS; A desvantagem principal é que todas as peças talvez não estejam tão bem documentadas em um só lugar como em coisas como MVC de primavera, listras, graals, Seam et al.

Para visualizações, é muito fácil de usar Jax-rs com Jersey e suporta UIs da Web no HTML, além de serviços RESTful no JSON/XML/O que quer que seja. Você pode reutilizar a elegante negociação de conteúdo da Jaxrs para que o conteúdo HTTP aceite cabeçalhos é usado para decidir se HTML ou XML é retornado etc (além de você pode pesar HTML no lado do servidor para evitar servir XML a alguns navegadores da Web que fornecem cabeçalhos de aceitação ímpar - estou Olhando para você Safari, que prefere XML a html!). por exemplo, adicionando @implicitproduces ("Texto/html; qs = 5") ao seu recurso Bean Weará HTML mais alto do que qualquer outra representação. Você também pode configurar o URI Postfixes (como adicionar .html ou .xml ou .json) para substituir a negociação de conteúdo; o que torna o teste as diferentes representações em um navegador muito mais simples.

Jersey suporta visões implícitas bem para que você possa renderizar visualizações em html usando qualquer motor de modelo como JSP ou Modelos de elevação como queiras; Em seguida, use os provedores Jax-Rs mais tradicionais para marechalling do tipo XML/JSON. Você pode ser explícito com visões; Ou deixe Jax-Rs encontrar seu modelo etc.

Para ver visualizações implícitas em ação, provavelmente vale a pena baixar a fonte de Jersey e olhar para as amostras, como a livraria (procure @implicitproduces, se quiser).

Em termos de coisas como validação, é fácil integrar o Validação de feijão JSR em um feijão de recursos; Assim, você pode executar a validação personalizada de um recurso ou DTO ou qualquer outra coisa. Da mesma forma, há um bom suporte de postagem em Jersey (FORME FEIR).

Eu recomendaria o uso de alguma estrutura DI/IOC para injetar os grãos de recursos com coisas de que precisam (como material de banco de dados, material de validação de feijão ou objetos de serviço ou outros enfeites). Guice funciona muito bem com Jersey se você quiser evitar a primavera; Embora a primavera com Javaconfig evite muito XML.

Para UIs complexas, você provavelmente deseja usar o JavaScript no cliente atualmente. Embora seja fácil com o JavaScript para invocar serviços RESTful (principalmente se eles usarem JSON ou JSONP) - a peça que faltava é elegantemente reutilizando serviços RESTful em Java/Jax -Rs da GWT. Até aqui Restygwt parece mais promissor. Um dia talvez a melhor estrutura de Marshalling JSON, Jackson terá ligações nativas de GWT. A idéia seria reutilizar os objetos DTO no GWT no lado do cliente e no lado do servidor Jax -rs - permanecendo completamente repousante.

Eu gostaria de mencionar o Restlet Framework, que foi a primeira estrutura de REST para Java quando foi lançada em 2005. É maduro, escalável, possui uma grande base de usuários e uma comunidade ativa.

A versão 2.0 está em fase de desenvolvimento final e fornece um conjunto de recursos amplos, incluindo:

  • Mapeamento completo de conceitos HTTP em uma API Java limpa
  • API consistente para o lado do cliente e do servidor
  • Integração com muitos techos populares (Freemarker, Velocity, Spring, Jackson, Xstream, Jaxb, Atom, Odata/WCF Data Services etc.)
  • Pode ser implantado em Java SE, dentro do contêiner Java EE/Servlet, no Google App Engine, Android e até GWT para o qual ele sabe como serializar automaticamente os grãos usando a ligação diferida (semelhante ao GWT-RPC, mas repousante)
  • Fornece muitos conectores para HTTP, SMTP, POP, JDBC, SIP, etc.
  • Pacote de segurança completo embutido, focado na segurança da web
  • Suporte ao Jax-RS como uma extensão
  • API orientada a classe previsível, fácil de estender e configurar (em Java, XML, Spring, Groovy, Scala, etc.) com suporte para anotações Java quando realmente útil
  • etc.

Dê uma olhada no projeto e tente:http://www.restlet.org/

Dar uma olhada em DropWizard também . .

Não está na sua lista, mas eu recomendaria Restasy Para construir seus serviços da web, o que é muito fácil de usar ... só precisa usar anotações nos métodos para entregar os serviços da web e também tudo o que você escreveu que você deseja.

Além disso, se você quiser uma boa integração de EJB, você pode usar o Restasy com o Estrutura de costura jboss

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top