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.