¿Qué framework utilizar?

bornex

Hola a todos, vengo a preguntar a alguien que tenga mas experiencia que yo sobre todo en Java.

Me dispongo a realizar un servlet con Java, HTML y CSS.

¿Porqué uso Java?

Porqué es lo que mejor se y "creo" que la aplicación web lo requiere. Se trata de una especie de plataforma de retos, se podría decir que tiene algo que ver con un LMS pero bastante más específico. Básicamente la idea es que al usuario se le ofrecen una serie de retos y éste puede elegir alguno, apuntarse y realizar ciertos retos que al final certificaran al usuario de que los realizó.

Claramente el patrón de diseño que me voy a basar será MVC, y quería preguntaros que framework utilizar. ¿Vaadin? ¿Spring?

He pensado en usar Freemarker ya que quiero separar Java de HTML. ¿Cual es la mejor opción?

JuAn4k4

Si quieres usar freemarker ya no puedes usar vaadin (creo), vaadin es como gwt, similar a desarrollar una app de escritorio, tienes la parte de visualización con widgets que configuras en el servidor (con codigo java) y que se preocupan de la presentación.

Yo te diría que usaras Spring que es sencillo.

Y para front, freemarker está muy bien, a mi personalmente no me gustan estas librerías de front (vaadin, gwt, faces, etc..)

No vas a hacer "1 servlet con java", sino una aplicación web.

Con spring ya no tienes servlets al uso, tienes "controladores" (@Controller) que tiran de servicios (@Service) que a su vez tiran de repositorios a datos (@Repository)

En el @Controller, te tienes que aprender que son:
@RequestMapping, @RequestParam, @RequestHeader, @PathVariable, @ResponseBody

por ej (te pongo todos los parametros como ejemplo, aunque en realidad no hace falta que pongas todos, ni de esta forma)

@Controller
@RequestMapping("/admin/{idAccount}/user")
public class UserController {

@Autowired
private UserService userService;

  @RequestMapping(value = "/create", requestMethod = RequestMethod.POST) // o PUT...
  public "String" create(HttpServletRequest request, HttpServletResponse response, Locale locale, @PathVariable("idAccount") Integer idAccount, @Valid CreateUserRequest createUserRequest, Errors errors) {

   // blah blah...
   if (!errors.hasErrors()) {

   CreateUserResponse response =  userService.create(createUserRequest);
   // tralarih
  
   }
    
// tralarah } }

CreateUserRequest es un POJO donde puedes usar la validación Hibernate Validator o algún otro, que Spring te rellena con los parametros que envies.

por ej:

enviando el parametro "username" te lo rellenaría en el objeto.

public class CreateUserRequest {

@NotEmpty
@Size(min = 3, max = 255)
@Email
private String username;


// getters & setters
}


}

Si no necesitabas ayuda pues nada, era solo porque cuando yo empecé con Spring andaba un poco perdido.

1 respuesta
bornex

#2 Spring para el back y freemarker para el front entonces ¿no?

1 respuesta
JuAn4k4

#3 Para el back te van a hacer falta más cosas (base de datos y tal) Le puedes echar un ojo a Spring data, y si usas alguna relacional Hibernate.

Y para el front, también te haría falta algun framework para el CSS, otro para el JS.

En js tienes millones de historias, a mi cada vez me dan mas miedo la cantidad de cosas que hay, si vas a ir a por moviles andate con ojo lo que metes que solo conseguirás que vaya lento .

Aquí hay una presentación que al menos, presenta muchas alternativas (no te pierdas que el mundo es muy grande en java):

http://es.slideshare.net/mraible/comparing-jvm-web-frameworks-february-2014

1 respuesta
zoeshadow

Puedes aprovechar Spring Boot que te configura los distintos módulos de Spring desde 0 para no tener que configurarlos todos tu ( convención sobre configuración ).

Decir que Freemarker es el "front" me parece un poco arriesgado, no es más que un templating engine. Por lo que tengo visto últimamente se usa mucho Thymeleaf, personalmente no me termina de convencer ninguno.

Por último, si quieres echale un vistazo a NinjaFramework, es bastante más newbie friendly que Spring, aunque cuenta con bastante menos documentación.

2 respuestas
bornex

#4 #5 Madre mia, y yo pensaba que sabía Java...

El caso es que jamás he usado un framework para hacer una aplicación tocha y de este nivel. Uso Java porque es el lenguaje que más se aunque viendo todo lo que me ponéis me queda muuuucho por leer y practicar para poder ponerme a andar con el proyecto.

Una pregunta, ¿Spring como lo uso? porque veo que hay mil variantes, Spring Web, Sprin Boot...

Estoy mirando como instalar Spring y usarlo en Eclipse a ver si soy capaz de montarlo todo, ya tengo el Tomcat por lo menos xD

Tengo claro que voy a usar bases de datos y un controlador, que éste último no se cual usar y si realmente me hace falta. He mirado y aconsejan Struts de Apache.

Os doy las gracias por todo chicos :)

2 respuestas
zoeshadow

#6 Precisamente te había recomendado Spring Boot por eso, para gente que no conoce Spring es mucho más sencillo, ya que no tienes que tomar casi decisiones al principio. Tu vas añadiendo lo que necesitas al pom.xml ( si no conoces Maven deberías empezar por ahí )

En esta url puedes ver lo que necesitas para hacer un hola mundo con Spring Boot ( en realidad estás usando Spring MVC, con unas opciones por defecto que ellos han considerado buenas ).

Los distintos modulos de Spring se utilizan para distintas cosas, algunos de ellos:

  • Spring Core es una dependencia del resto de módulos, principalmente te ofrece inyección de dependencias. ( busca en google si no conoces el termino )
  • Spring MVC es la base de la parte web, en resumen lo que hace es "mappear" url's a acciones de un controlador. ( Cuando un usuario llega a la url /holamundo, se me llama a un metodo del controlador Main llamado holamundo ), Spring se encarga de pasarme por parametro los distintos datos de la petición.
  • Spring JPA y Spring Data : Estos dos modulos se encargan del acceso a datos ( Bases de datos relacionales y NOSQL ), JPA es un estandar en el mundo Java, y Spring JPA es la implementación que ofrece Spring, por debajo utiliza Hibernate si no me equivoco. Esto de por si es un mundo.
  • Spring Security : Este módulo permite configurar la autenticación y autorización. ( ej. Solo permitir a los usuarios con rol Admin entrar a las rutas dentro de /admin )

Cómo ves Spring es un framework bastante grande, y puede ser muy lioso para gente que está empezando, lo bueno es que hay mucha documentación.

2 respuestas
bornex

#7 Tienes razón desde fuera se ve un mundo. El problema es que yo vengo de Computación y la ingenieria del software la he visto en una asignatura nada mas xD. Voy a empezar con Maven y con Spring Boot a ver que sale.

Ya veo que el mundo de Java es demasiado grande, pero por algún lado tengo que empezar. Gracias por la url :)

CricK

#1 Por recomendarte otra variante:

En la parte cliente: AngularJS

En el servidor como API REST: se puede hacer utilizando desde algo tan simple como jersey, pasando por frameworks como spring o playframework, usar los Google Cloud Endpoints si optas por usar el Google App Engine o seguir usando javascript en la parte del servidor con node.js + express.

JuAn4k4

#5 Yo lo llamo front, porque al final sacas HTML con ello, básciamente. Y cuando la gente se denomina "front-end developer" se dedica a eso, HTML,CSS,js y ellos son los que tocan, bien sea Freemarker, Velocity, JSP, lo que sea.

Ya que estas, yo te recomendaría IntelliJ Idea, en lugar de eclipse, aunque solo en la versión "pro" tienes el Tomcat dentro.

#7 Spring JPA lo puedes usar con Hibernate o con cualquier otra implementación de JPA, pero vamos, que yo no te recomendaría otra, EclipseLink lo prove una vez, y lo mande a tomar por culo.

RaymaN
2 1 respuesta
bornex

#11 jajajajaja

Daredevil

#6 Sin ser ningún experto, una solución clásica para una arquitectura en 3 capas (JEE) sería así:

Parte UI:

Cualquiera de estas 3 soluciones

-Struts
-Spring MVC
-GWT

Parte Datos:

-Hibernate

Y el Framework a utilizar como inyector de dependencias Spring cómo te han recomendado ya.

Un saludo.

1 respuesta
bornex

#13 Gracias buena guía. Es casi lo que voy a elegir :D

Usuarios habituales

  • bornex
  • Daredevil
  • RaymaN
  • JuAn4k4
  • CricK
  • zoeshadow