Yo no diria sofisticado, más bien ordenado (o desordenado segun un compañero mio)
cada cosa a su sitio y lo menos mezclado posible.
Todo depende del tipo de aplicación que tengas, su tamaño, el plazo de entrega y lo independiente de cambios que quieras hacer las cosas ... a mi lo que me gusta usar normalmente es tener la aplicacion separada en 3 capas para que asi cambios en una parte no me impliquen tener que cambiar cosas por toda la aplicacion.
Para aplicaciones sencillitas y que no preveo que vayan a ser muy modificadas una vez terminadas.
1) BD: Registro BD -> Value Bean que representa los datos de ese registro o una collection de esos Value Bean si recupera varios
2) Logica de negocio -> Servlets + Value Bean o collection con los Value Bean
3) Servlet -> JSP. En la JSP solamente hago tratamientos de presentacion, las validaciones de si los datos estan bien etc las hago en la logica de negocio. Solamente accedo a metodos get/set de los value bean.
Si ya es algo mas complicado con EJBs tipo CMP o asi lo que hago es en la capa 2 (logica de negocio) convierto los Value Bean a otro tipo de bean que usare para validaciones y presentaciones, de forma que los value bean que cojo en BD nunca llegan hasta la presentacion.
Pero ya te digo que esto es como me gusta a mi, eso no significa que mi forma sea la única y mucho menos la mejor, simplemente es con la que yo mejor me muevo.