Realmente necesito los Servlets o es por simple mantenibilidad de codigo?

Buenas gente a pasado tiempo desde que pregunte algo en este gran foro

Tengo la siguiente interrogante en cuanto a un proyecto que me dejaron de tarea en la universidad,me dijeron que lo hiciera en java ESO SI EN JSP lo cual no me molesto me puse manos a la obra a investigar,resulta y sucede que termine el famoso proyecto y un amigo se acerco y me dijo man,porque carajo no usaste SERVLESTS a lo que respondi para que? me complican la vida

Un ejemplo de uno de los mantenimientos de mi proyecto

Aqui mi mantenimiento de marca(marca.jsp)

NOTESE QUE HAGO UN INCLUDE AL ARCHIVO DONDE TENGO MI LOGICA Y LLAMOS MIS METODOS CON ESTO NO USO SERVLETS

 

<%@include file="marcaBehind.jsp"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="DAO.marcaDAO"%>
<%@page import="java.sql.ResultSet"%>
<script>
    function validarMarca(){
   
        aceptar=true;
   
        if($("#nombre").val()==""){
     
            $("#nombre").css('background-color','pink');
   
            aceptar=false;  
   
        }else{
       
            $("#nombre").css('background-color','');  
       
        }
        return aceptar;
    }
</script>

<form method="post" action="">

    <div class="table">
        <img src="Plantilla/img/bg-th-left.gif" width="8" height="7" alt="" class="left" />
        <img src="Plantilla/img/bg-th-right.gif" width="7" height="7" alt="" class="right" />
        <table class="listing form" cellpadding="0" cellspacing="0">
            <tr>
                <th class="full" colspan="2">Registro de Marca</th>
            </tr>      
            <tr>    
                <td class="first">Nombre:</td>
                <td class="last"><input id="nombre" name="nombre" type="text" value="<%out.println(nombreMarcaP);%>"/></td>
            </tr>  
            <tr class="bg">    
                <td class="first"></td>
                <td class="last"><input type="submit" id="btn_registra" onclick="return validarMarca()" name="btn_registra" value="Registrar"/></td>
            </tr>
        </table>
    </div>
</form>  

Aqui mi archivo con toda la logica(al que hice un include en el anterior archivo que mostre) que llamo donde hago instancias de las clases de marca(la cual uso solo para transportar datos) y marcaDAO(El cual contiene todos los metodos para la base de datos) y en lugar de esto mi amigo me recomendo que era mejor usar un servlet para recibir los parametros y redirigir a otras paginas

 
<%@page import="Entidad.Marca"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="DAO.marcaDAO"%>

<%

    marcaDAO mMarca = new marcaDAO();
    Marca marcaP = null;

    int opcion = 0;
    int cantRegiAfec = 0;
    int cod_marcaP = 0;
    String nombreMarcaP = "";

    if (request.getParameter("accion") != null) {

        opcion = Integer.parseInt(request.getParameter("accion"));

        switch (opcion) {

            case 1:

                mMarca.eliminarMarca(Integer.parseInt(request.getParameter("id_marca")));
%>
<jsp:forward page="administracion.jsp?seccion=listado_marca"/>
<%

        break;

    case 2:

        if (request.getParameter("btn_registra") != null) {

            nombreMarcaP = request.getParameter("nombre");

            marcaP = new Marca(nombreMarcaP);

            cantRegiAfec = mMarca.registrarMarca(marcaP);

            if (cantRegiAfec > 0) {

%>
<jsp:forward page="administracion.jsp?seccion=listado_marca"/>
<%                } else {

                out.println("No se pudo registrar la marca");

            }

        }

        break;

    case 3:

        if (request.getParameter("btn_registra") != null) {

            cod_marcaP = Integer.parseInt(request.getParameter("id_marca"));

            nombreMarcaP = request.getParameter("nombre");

            marcaP = new Marca(cod_marcaP, nombreMarcaP);

            cantRegiAfec = mMarca.actualizarMarca(marcaP);

            if (cantRegiAfec > 0) {

%>
<jsp:forward page="administracion.jsp?seccion=listado_marca"/>
<%                            } else {

                        out.println("No se pudo Actualizar la marca");

                    }

                } else {

                    marcaP = mMarca.obtenerMarca(Integer.parseInt(request.getParameter("id_marca")));

                    nombreMarcaP = marcaP.getNombreMarca();

                }
                break;

        }
    }
%>

La verdad es que hace tiempo no manipulo Java,pero estuve investigando lo de los servlest y se dice que son mejores para la mantenibilidad del codigo,pero a nivel de rendimiento son mejores?

Gracias por su opinion!! y cordial ayuda de antemano la verdad para mi esto es una tarea,pero quiero aprender a hacer bien proyectos usando esta tecnologia Gracias

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Los JSP's son traducidos a

Los JSP's son traducidos a servlets por el contenedor, por lo que el desempeño no es la razón.

Si hubiera métodos o código que se pudiera re-utilizar entre clases, al escribirlo en JSP's lo haces inaccesible. Al ponerlo en Servlets lo puedes usar como cualquier otro código Java.

Como regla general se prefiere tener todo el código en archivos .java ( un servlet ) y todo el html/javascript en JSP's pero como lo tienes me parece razonablemente bien.

Saludos.

Imagen de The man

Muchas gracias

Muchas gracias OscarRyz,entoces quiere decir que es mas que todo para reutilizar el codigo,eso significa que hacerlo con servlets brinda mas mantenibilidad al codigo,osea es mejor usarlos para proyectos grandes,aunque es mejor usarlos desde el principio de plano para todos los proyectos JSP

Los servlets no son suficientes

Es necesario porque algun día quizas tengas la necesidad de instalar una aplicación en un servidor dn presentacion donde solo puedes poner tus jsp porque esa capa de la infraestructura no puede tener comunicacion con la base de datos mientras que tus servlets tengas que instalarlos en otro servidor donde no puedes accesar desde internet.

Lo lindo es que estas aplicando unas simples reglas de seguridad que es: "Asegurar que tu aplicacion no ofrezca una interaccion con la DB directamente desde internet sino que tienes que pasar por un servidor (de presentacion) para poder realizar una consulta

la arquitectura seria

presentacion | firewall | procesamiento | firewall | datos

donde antes de presentacion puede presentarse que exista un firewall para que solo aceptes peticiones del puerto del http/s y antes de procesamiento solo se permite el acceso del servidor de presentacion...

El punto es, que en este caso, no puedes tener tu logica dentro de un JSP porque entonces, tendrias que usar el concepto de WS (Web Services o en español SW Set Werbis jejeje) pero el costo del marshal y unmarshal del mensaje sale costoso para sistemas de alto rendimiento por lo que se propone utilizar componentes de menor desacoplamiento pero de mayor eficiencia en las llamadas como es un EJB que puedes invocarlo desde otro punto que no sea tu servidor. Estos componentes consumirán tus clases que realicen las consultas, registros y cualquier operación que tenga que tocar el repositorio de datos (que como ya bien mencionamos debe estar seguro y fuera del alcance de los niños en internet). De esta forma el flujo seria:

html -> servlet -> ejb -> dao -> db

y de esa forma, tendrias un buen sistema, seguro y bien distribuido

Conclusion: Es bueno que pienses en la distrubución de tu sistema partiendo tus jsp pero no basta incluso con solo usar servlets para una buena distrubucion fisica de una aplicacion