Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Duda Servlet-Controllers-JSP

Estas en el tema de Duda Servlet-Controllers-JSP en el foro de Java en Foros del Web. Buenas, se me acaba de plantear una duda mientras desarrollaba mi pagina web. Supongamos que tenemos un boton "Ver articulo" en la web, yo hasta ...
  #1 (permalink)  
Antiguo 07/03/2013, 05:38
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 3 meses
Puntos: 22
Duda Servlet-Controllers-JSP

Buenas,

se me acaba de plantear una duda mientras desarrollaba mi pagina web.

Supongamos que tenemos un boton "Ver articulo" en la web, yo hasta ahora lo que hacia era en mi dispatcher-servlet.xml asociar la URL que quería mostrar con un controlador de tal manera que se ejecutaba el controlador con el siguiente código

Código JAVA:
Ver original
  1. public class ArticuloController implements Controller {
  2.    
  3.     protected final Log logger = LogFactory.getLog(getClass());
  4.     private models.Operaciones operaciones = new models.Operaciones();
  5.     @Override
  6.     public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
  7.             throws ServletException, IOException, SQLException {    
  8.        
  9.         Articulo articulo = operaciones.getArticulo(Integer.parseInt(request.getParameter("idArticulo")));      
  10.        
  11.         return new ModelAndView("/WEB-INF/jsp/articulo.jsp", "articulo", articulo);
  12.     }
  13. }

desde el controlador llamo al Modelo para obtener el Articulo y posteriormente llamo al archivo JSP donde lo muestro....

Ahora bien en este caso... llamo a un controlador porque solo tengo que realizar una petición al Modelo sin realizar ninguna operación más

Sin embargo si quiero por ejemplo insertar un nuevo Articulo mediante un Formulario, no llamo a un controlador, sino que llamo a un Servlet donde hago todas las operaciones comunicandome con el modelo y luego al final redirecciono a un JSP de la siguiente manera por ejemplo:

Código JAVA:
Ver original
  1. public class InsertarArticuloServlet extends HttpServlet {
  2.  
  3.     @Override
  4.     @SuppressWarnings("empty-statement")
  5.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  6.         try {
  7.            
  8.             AQUI REALIZO LAS OPERACIONES QUE HAGAN FALTA COMUNICANDOME CON EL MODELO
  9.  
  10.         } catch (FileUploadException ex) {
  11.             Logger.getLogger(InsertarNoticiaServlet.class.getName()).log(Level.SEVERE, null, ex);
  12.         } catch (Exception ex) {
  13.             Logger.getLogger(InsertarNoticiaServlet.class.getName()).log(Level.SEVERE, null, ex);
  14.         }
  15.        
  16.         request.setAttribute("mensaje", "¡EL ARTICULO SE HA CREADO CORRECTAMENE, A LA ESPERA DE SER CONFIRMADO!");
  17.         getServletContext().getRequestDispatcher("/WEB-INF/jsp/mensaje.jsp").forward(request, response);
  18.     }

Entonces al final en algunos casos llamo a Controladores y en otros casos llamo a Servlets, y no me queda muy claro si intentando basarme en el patrón de diseño MVC esto está bien hecho, o si debería usar solo Servlets o solo Controladores, o puedo tener un paquete con Controladores y Servlets mezclados...

Alguien puede orientarme un poco??En teoría ambos cumplen la misma función pero me estoy liando jaja!!
  #2 (permalink)  
Antiguo 07/03/2013, 06:55
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Duda Servlet-Controllers-JSP

Bueno, lo del patrón MVC es lo de menos, ya que de alguna forma puedes considerar que el servlet es el controller y llama a la vista que es el jsp. Por coherencia deberías usar siempre el mismo mecanismo. Puedes hacer un controlador para Articulo que haga ambas cosas, distingues si es consulta, inserción, update o delete con un parámetro que pongas (por ejemplo, puedes llamarlo action="get", action="insert", ...) Dentro del handleRequest() mirarías primero ese parámetro y en función de su valor lees el resto de parámetros y realizas lo que tengas que hacer.

O bien puedes hacer un único controlador que atienda varias URLs distintas, cada una para una operacion (imagino que estás usando Spring MVC). Si en el controlador pones varios métodos y las anotaciones adecuadas @RequestMapping , un método podría atender http://dominio/articulo/get, otro http://dominio/articulo/insert, ...

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 07/03/2013, 07:30
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 3 meses
Puntos: 22
Respuesta: Duda Servlet-Controllers-JSP

Chuidang tendre que pagarte por los servicios? jeje siempre me ayudas con las dudas jejeje

PRIMERA OPCION

Seria por ejemplo si tengo un formulario insertar, en el action llamo al controller así pasandole un atributo action?

Código JAVA:
Ver original
  1. <form enctype="multipart/form-data" method="post" action="articuloController?action="insert">

y luego en el controller un if(request.getParameter("action") == "insert") hago las operaciones necesarias y devuelvo la vista que me interese,

¿Es mas o menos eso no?

SEGUNDA OPCION


Si estoy utilizando Spring MVC, o más bien lo intento, pero no he utilizado hasta ahora el @RequestMapping y nose muy bien como funciona...
Tendría que quitar todos los mapeos del dispatcher-servlet.xml y mapearlo todo a un mismo controlador?? o como funciona exactamente??

Te pregunto porque me parece mucho más eficiente estructurarlo todo en un mismo fichero y si eso es parte de Spring MVC me interesa más hacerlo así.

Un saludo y gracias!
  #4 (permalink)  
Antiguo 07/03/2013, 08:12
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Duda Servlet-Controllers-JSP

Hola:

Para lo primero, la idea es esa, pero habitualmente al ser POST se pone el action como un <input type="hidden" name="action" value="insert"> dentro del form, así la URL no necesita el ?action=insert.

En lo segundo sí, en el xml sólo pondrías el controller y un mapping "general" para él (por ejemplo, todo lo que sea http://dominio/miControlador va a tu controlador). Luego en las anotaciones de cada método, pondrías un @RequestMapping estilo

Código java:
Ver original
  1. // esto atiende a http://miControlador/unaUrl
  2. @RequestMapping(value = "unaUrl", method = RequestMethod.POST)
  3. public String unMetodo(....) {
  4. ...
  5. }

el method es opcional, si no lo pones atiende GET y POST. La "unaURL", por supuesto, distitinta para cada método. Tienes aquí http://chuwiki.chuidiang.org/index.p..._MVC_Framework un pequeño tutorial, pero casi mejor vas a la documentación original de spring http://static.springsource.org/sprin...requestmapping

Por cierto, casi somos paisanos, aunque vivo en Madrid, soy de Gijón :)

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 07/03/2013, 09:07
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 3 meses
Puntos: 22
Respuesta: Duda Servlet-Controllers-JSP

Vale mirare el wiki y la documentacion de Spring a ver si consigo aclarar las ideas, he mirado tu wiki por encima y parece estar bastante claro...

Una ultima cosa, ambos formas son exclusivas de Spring MVC, lo que quiero decir, si digo que mi proyecto está basado en Spring MVC... ¿da igual que lo haga de una u otra manera, ¿o alguna de las dos es más correcta?

Es que la aplicación que estoy realizando, si te soy sincero es para mi PFC, y en teoría es una Aplicación Web utilizando Spring y Java...

Si yes de Asturies, entos da igual la ciudad, pa mi somos paisanos jeje
  #6 (permalink)  
Antiguo 07/03/2013, 12:06
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Duda Servlet-Controllers-JSP

Buenas de nuevo

Ambas formas (handelRequest o anotaciones) son Spring MVC. Sin embargo, es menos elegante meter varias acciones (insertar, borrar, editar) en un mismo handleRequests, ni tampoco es elegante hacer un controller distinto por cada acción, por lo que si es para tu PFC, te aconsejo usar anotaciones.

Es cuestión de gustos, por ejemplo, a mi me gusta hacer un Controller por cada tipo de dato (por ejemplo, un Controller para artículos, otro para personas, etc) y en cada uno de ellos meter todas las operaciones asociadas a ese tipo de dato (insert, edit, delete, get). A veces se complica, porque hay operaciones que no son claramente de uno u otro, como asociar un artículo a una persona y tienes usar algún criterio.

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Última edición por chuidiang; 07/03/2013 a las 12:12
  #7 (permalink)  
Antiguo 07/03/2013, 13:56
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 3 meses
Puntos: 22
Respuesta: Duda Servlet-Controllers-JSP

He intentado hacerlo con anotaciones y nada más empezar me he encontrado con un problema ya... he mirado en tu wiki http://chuwiki.chuidiang.org/index.p..._MVC_Framework
y donde explicas como crear la clase Controlador pues no soy capaz de hacerlo así me sale un error a la hora de usar la anotacion @Controller y no me deja hacer el import:

import org.springframework.stereotype.Controller;

He mirado por google cual puede ser el problema pero no encuentro nada... :(
  #8 (permalink)  
Antiguo 07/03/2013, 17:58
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 3 meses
Puntos: 22
Respuesta: Duda Servlet-Controllers-JSP

Cita:
Iniciado por rgf1987 Ver Mensaje
He intentado hacerlo con anotaciones y nada más empezar me he encontrado con un problema ya... he mirado en tu wiki http://chuwiki.chuidiang.org/index.p..._MVC_Framework
y donde explicas como crear la clase Controlador pues no soy capaz de hacerlo así me sale un error a la hora de usar la anotacion @Controller y no me deja hacer el import:

import org.springframework.stereotype.Controller;

He mirado por google cual puede ser el problema pero no encuentro nada... :(
Problema arreglado... el problema era que estaba llamando a la clase "Controller" y no lo permitía.. he puesto de nombre "Controlador" y arreglado

Etiquetas: formulario, jsp, servlet
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:59.