Java - ¿Servlet por página o por funcionalidad?

 
Vista:
Imágen de perfil de Octavio

¿Servlet por página o por funcionalidad?

Publicado por Octavio (6 intervenciones) el 10/09/2015 00:46:54
Saludos.

Me encuentro iniciando un proyecto web con Java EE, estoy aplicando un modelo MVC propio, es decir sin utlizar frameworks. El proyecto tiene alrededor de 25 páginas (html y jsp), la duda que me surge es si crear un servlet por cada página o crear servlets por funcionalidad que respondan a las peticiones de varias páginas.

Por ejemplo 8 páginas tienen un link para que el usuario cierre sesión, lo que se me ocurre es que exista un servlet "sessionManager" que contenga la lógica para permitir que cada usuario cierre su sesión en vez de repetir el mismo código en distintos servlets.

Otro caso es que en mas de una página se tiene que mostrar en un select las entidades federativas del país. Entonces igual se me ocurre que es mejor crear un solo servlet que recupere la lista de entidades federativas en vez de que crear un sevlet por página con dicha funcionalidad. Pero bueno son mis inicios en java EE y no se si exista algún inconveniente en aplicar lo que mencioné o si por ejemplo que exista algún estandar que me convenga aplicar.

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 349
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿Servlet por página o por funcionalidad?

Publicado por Andrés (340 intervenciones) el 14/09/2015 23:26:11
Buena idea lo del session manager, de hecho no necesita ser un servlet, puede ser un servicio que creas cuando se levanta la aplicación. Despues en cada petición atendida por un servlet, obtienes el servicio del contexto y ahí es donde trabajas con la sesión del request.

Lo que mencionas de las entidades federativas, al final de cuentas es un catálogo que también puedes cargar cuando se levanta el contexto. El select que contiene las entidades federativas, lo puedes meter en un jsp e incluirlo donde sea necesario.

Yo agruparía las funcionalidades y crearía un servlet por cada una de estas, manejar uno por página es una pesadilla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Octavio

¿Servlet por página o por funcionalidad?

Publicado por Octavio (6 intervenciones) el 15/09/2015 21:02:58
Gracias, muy buena tu respuesta pero como tengo poca experiencia en Java EE me surgen varias dudas:

¿Qué es y como se programa y crea un servicio?

¿Cómo se crea al levantar la aplicación?

¿Es lo mismo levantar el contexto y levantar la aplicación?

Con meter el select en un jsp e incluirlo donde sea necesario ¿Te refieres a hacer uso de: <%@ include%>?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 349
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿Servlet por página o por funcionalidad?

Publicado por Andrés (340 intervenciones) el 15/09/2015 21:36:29
Estas usando un MVC propio, aquí bueno modelo, vista y controlador, no hay mucho que decir. Pero en el flujo Controlador-->Modelo, no pasas directo al modelo o sí?

Sería mejor desde mi punto de vista, meter una capa intermedia entre el Controlador y el Modelo, algunos le llaman Service, otros Business, independiente al nombre que le des a esta capa intermedia, es claro que es esta haces "Reglas del negocio" así, el Controlador no queda "sucio" con validaciones por aquí y por allá. Claro que la comunicación entre estas capas es el VO (Value Object).

Entonces, un servicio no es más que una clase (sería mejor una interfaz y una implementación), lo ideal sería crear un servicio Singleton, crear un listener (una clase que implemente la interfaz ServletContextListener) y en su método contextInitialized obtienes la instancia del Servicio, este a su vez va al modelo y se trae el catálogo de entidades, finalmente usas el ServletContext, su método setAttribute y ahí guardas el catálogo.

Ahora, el jsp que tiene el select inicia con <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>, hace uso de <c:forEach> y tiene el select, no recomiendo el uso de scriptlets!

Después lo incluyes en cualquier jsp con: <jsp:include page="" />

Y ya esta! ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Octavio

¿Servlet por página o por funcionalidad?

Publicado por Octavio (6 intervenciones) el 16/09/2015 20:51:49
Vaya que me siento en pañales en esto jaja. Casi toda mi investigación para aprender sobre Java EE ha sido googleando, varias cosas si las entiendo y muchas otras no, y el no entender creo que se debe a no buscar los temas en un orden jerárquico ya que desconozco ese orden. Con orden jerárquico me refiero p.e. en Java SE a aprender primero sobre variables, luego sobre operadores, luego intrucciones de control, etc.

Me encontré con el tema de EJB y traté de emularlo abstrayendo ciertos aspectos según mi entendimiento, por tanto mi proyecto va así:

- En la parte de la vista tengo mis jsp/html + css y javascript
- En la parte de controlador tengo los servlets, ahorita estoy tratando de tener un servlet por funcionalidad y no por página.
- La parte del modelo: Aún no distingo donde empieza y termina un modelo pero digamos que la parte de acceso a datos la estructuré asi:

a) Clases entity que son la representación de las tablas en la db. Cada clase tiene como atributos los campos de su tabla y métodos get y set. Aqui tengo la duda si es conveniente agregar otros métodos, por ejemplo teniendo una clase empleado agregar un método que calcule el monto a pagarle.

b) Clases facade, una por cada clase entity. Una clase facade utiliza a su correspondiente clase entity y con ella realiza operaciones insert, update y delete en la db. (no se si esta capa corresponde a los servicios que mencionas).

Me faltaria una clase EntityManager que sea la encargada de hacer directamente las operaciones con la db, pero no se como implementarla sobre todo por que me solitiraron usar stored procedures en oracle. Por tanto esta responsabilidad cae en las clases facade.

Ejemplo:

1
2
3
4
5
6
public class Usuario{
 private String nombre;
 private String contrasena;
 
 //métodos get y set
}

1
2
3
4
5
6
7
public class UsuarioFacade{
 public Usuario getUsuario(int id){
  /*Haciendo uso de las clases Connection y CallableStatement se llama a un stored procedure en oracle
 que devuelve los datos de la tabla usuarios*/
 return usuario;
 }
}

En cuanto al tema de usuarios me salto una duda filosófica jaja ¿Quén debe hacer la validación de que la contraseña es correcta o incorrecta?, me doy cuenta que esto lo puede hacer el js, también el servet, la clase entity o incluso un procedimiento de la db. Creo necesito salir a que me de el aire. Por lo mientras dejé esta funcionalidad en un metodo de la clase Usuario.

En fin ¿Cómo ves la estructura que he establecido?, ¿Como la modifico hacia una mejor implementación?, ¿Qué bibliografía o temas me sugieres revisar?

p.d. aunque si conozco sobre jstl no te entendi con el select.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar