Pergunta
O que é uma boa maneira de tornar os dados produzidos por um processo de Java no navegador?
Eu fiz uso extensivo de JSP e as várias estruturas associadas ( JSTL , Struts , Tapestry , etc), bem como estruturas mais abrangentes não relacionados com JSP ( GWT , OpenLaszlo ). Nenhuma das soluções já sido inteiramente satisfatória - na maioria dos casos, o quadro é muito limitado ou complexa demais para as minhas necessidades, enquanto outros exigiria extensa refatoração de código existente. Além disso, a maioria dos frameworks parecem ter problemas de desempenho.
Atualmente eu estou inclinado para a solução de expor meus dados java através de um simples servlet que retorna JSON, e depois processar os dados usando PHP ou Ruby. Isto tem a vantagem de expor instantaneamente meu serviço como um serviço web, bem como, mas eu estou querendo saber se eu estou reinventando a roda aqui.
Solução
Eu uso pessoalmente Tapestry 5 para a criação de páginas web com Java, mas concordo que às vezes pode ser um pouco exagero. Gostaria de olhar para usando JAX-RS ( java.net projeto , jsr311 ) é bastante simples de usar, suporta triagem e objetos unmarshalling de / para XML fora da caixa . É possível estendê-lo para apoiar JSON via Jettison .
Existem duas implementações que eu tentei:
- Jersey -. A implementação de referência para JAX-RS
- Resteasy - a implementação prefiro, um bom suporte para triagem e unmarshalling uma ampla gama de formatos. Também bastante estável e tem mais recursos que Jersey.
Dê uma olhada no código a seguir para obter uma sensação para o que JAX-RS pode fazer por você:
@Path("/")
class TestClass {
@GET
@Path("text")
@Produces("text/plain")
String getText() {
return "String value";
}
}
Esta pequena classe irá expor-se na raiz do servidor (@Path na classe), em seguida, expor o método getText () na URI / texto e permitir o acesso a ele através de HTTP GET. A anotação @Produces conta a estrutura JAX-RS para tentar virar o resultado do método em texto simples.
A maneira mais fácil de aprender sobre o que é possível com JAX-RS é ler o especificação .
Outras dicas
Estamos usando Stripes . Dá-lhe mais estrutura do que servlets retas, mas permite controlar seus URLs através de uma anotação @UrlBinding. Nós a usamos para fluxo de XML e JSON de volta para o navegador para ajax coisas.
Você poderia facilmente consumi-lo com outra tecnologia, se você queria ir por esse caminho, mas você pode realmente desfrutar de desenvolvimento com listras.
Confira Restlet para um bom quadro para expor o seu modelo de domínio como serviços REST (incluindo JSON e saída XML trivial) .
Para tornar o seu informações, talvez você possa usar o GWT no lado do cliente e consumir seus serviços de dados? Se GWT não flutuar seu barco, então talvez JQuery faria?
Talvez você poderia gerar os dados como XML e torná-lo usando XSLT?
Eu não tenho certeza PHP ou Ruby são a resposta se o Java não é rápido o suficiente para você!