Java - llamar metodo js o jqery desde un servlet java

 
Vista:

llamar metodo js o jqery desde un servlet java

Publicado por gonzalo (3 intervenciones) el 12/02/2019 22:36:28
Buenas,

Soy nuevo en el tema de java, cree una sitio web con jsp y servlet el cual al logearte te lleva a un formulario el cual el formulario es un jsp y la validación la hago en el servlet.
Mi duda es la siguiente:

Quiero validar los campos y en caso de que por ejemplo el campo este vació o, etc por medio de mi jquery muestra en el formulario las alertas de campos vació, etc.

No estaría sabiendo como hacer que un jsp se comunique con método jquery o js.
La idea es del serlvet llamar a un método que se encuentra en mi archivo .js.

Nos se si se puede por eso pregunto o cual seria la forma correcta.

espero puedan darme una mano.

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
Imágen de perfil de Pedro
Val: 305
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

llamar metodo js o jqery desde un servlet java

Publicado por Pedro (102 intervenciones) el 12/02/2019 23:42:20
@Gonzalo debes alinear los conceptos porque ahora mismo es como una tortilla de patatas todo revuelto.

El servlet es el encargado de coger los datos del formulario vía POST o GET en su request , pero antes de que se produzca el submit del formulario , tú puedes crear un archivo .js con funciones que comprueben los campos inputs que no estén vacíos o que cumplan un regex específico.

Debes dar un repaso a elementodelDOM.addEventListenner(); para controlar en los blur o click lo que quieras que compruebe ó haga y crear funciones que deniegen el submit del formulario con preventDefault();

Una vez se comprueba que los campos cumplen los requisitos entonces se produce la mágia del submit y es entonces cuando el Servlet es el encargado de recibir en el request los parámetros del formulario para así procesarlos.

Espero haberte ayudado y no haberte liado, pero son conceptos que tienes que tener claros para poder conseguir lo que quieres.

yd8js2deEstoy en --->seoconsultorweb.ml
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

llamar metodo js o jqery desde un servlet java

Publicado por gonzalo (3 intervenciones) el 13/02/2019 22:34:04
Muchas gracias con esto poder encaminar ese problema.
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
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

llamar metodo js o jqery desde un servlet java

Publicado por Billy Joel (876 intervenciones) el 13/02/2019 23:39:29
Es justo como suelo trabajar. Te explico mas tarde
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
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

llamar metodo js o jqery desde un servlet java

Publicado por Billy Joel (876 intervenciones) el 14/02/2019 05:20:54
Antes de empezar descarga el paquete de JSON https://github.com/stleary/JSON-java
En tu proyecto crea el paquete org.json y colocas las clases que descargas ahí
Te debe quedar así
org-json

Ese paquete sirve para manejar objetos json. Si has manejado mapas, entonces ya lo dominas.

El navegador del cliente se comunicará con tu servidor a través de AJAX/JSON
Cuando utilizas Netbeans y creas un Servlet, asegurate de registrarlo en el archivo web.xml
NewServlet

Dentro del código que se genera está el método processRequest que maneja las peticiones GET y POST
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
 * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
 * methods.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    try (PrintWriter out = response.getWriter()) {
        /* TODO output your page here. You may use following sample code. */
        out.println("<!DOCTYPE html>");
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet NewServlet</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Servlet NewServlet at " + request.getContextPath() + "</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}

Si necesitas manejar de forma separada las peticiones GET y POST entonces debes utilizar los métodos doGet o doPost.
Los servlets también manejan las peticiones doPut y doDelete.

En esta ocación vamos a quedarnos con el método processRequest y vamos a modificarlo para que quede así:
1
2
3
4
5
6
7
8
9
10
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    JSONObject json = new JSONObject();
    json.put("mensaje", "Este es un mensaje");
    json.put("entero", 1234);
    response.setContentType("application/json");
    try (PrintWriter out = response.getWriter()) {
        out.println(json.toString());
    }
}

Como puedes ver es es muy sencillo usarlo. Lo genial de JSON es la comunicación; si llamo a este servlet a traves del navegador la respuesta será algo así:
servlet-respuesta

Concretamente la respuesta es esta:
1
{"entero":1234,"mensaje":"Este es un mensaje"}

Entonces desde tu jsp html que ya tienes tu JQuery declarado puedes hacer algo como esto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE html>
<html>
    <head>
        <title>Titulo</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <button id="btn">Botón</button>
        <script src="js/jquery-1.8.3.min.js"></script>
        <script>
            $("#btn").click(function(){
                $.get("NewServlet", {
                    param1: "Este es un parametro",
                    param2: "Este es otro parametro",
                    param3: 123
                }, function(data){
                    console.log("Mensaje: " + data.mensaje);
                    console.log("Entero: " + data.entero);
                });
            });
        </script>
    </body>
</html>

Si te vas al inspector de red verás algo como esto
comunicacion
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 Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

llamar metodo js o jqery desde un servlet java

Publicado por Billy Joel (876 intervenciones) el 14/02/2019 05:21:50
Supongamos que el servlet debe devolver datos para generar una tabla en tu html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    JSONObject json = new JSONObject();
    request.getParameterMap().keySet().forEach((parameterName) -> {
        json.put(parameterName, request.getParameter(parameterName));
    });
    json.put("mensaje", "Este es un mensaje");
    json.put("entero", 1234);
 
    List<JSONObject> lista = new ArrayList();
    for (int i = 0; i < 10; i++) {
        JSONObject o = new JSONObject();
        o.put("col1", (i + 1));
        o.put("col2", (i * 2));
        o.put("col3", (i * 3));
        lista.add(o);
    }
    json.put("lista", lista);
    response.setContentType("application/json");
    try (PrintWriter out = response.getWriter()) {
        out.println(json.toString());
    }
}

Entonces tu html queda así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<!DOCTYPE html>
<html>
    <head>
        <title>Titulo</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <button id="btn">Botón</button>
        <table id="tabla">
            <thead>
                <tr>
                    <th>Colmna 1</th>
                    <th>Colmna 2</th>
                    <th>Colmna 3</th>
                </tr>
            </thead>
            <tbody></tbody>
        </table>
        <script src="js/jquery-1.8.3.min.js"></script>
        <script>
            $("#btn").click(function () {
                $.get("NewServlet", {
                    param1: "Este es un parametro",
                    param2: "Este es otro parametro",
                    param3: 123
                }, function (data) {
                    console.log("Mensaje: " + data.mensaje);
                    console.log("Entero: " + data.entero);
                    var txt = "";
                    for (i = 0; i < data.lista.length; i++) {
                        txt += "<tr>"
                                + "<td>" + data.lista[i].col1 + "</td>"
                                + "<td>" + data.lista[i].col2 + "</td>"
                                + "<td>" + data.lista[i].col3 + "</td>"
                                + "</tr>";
                    }
                    $("#tabla > tbody").html(txt);
                });
            });
        </script>
    </body>
</html>

Bueno creo que ha sido un poco largo esto. Cualquier duda solo escribe

Saludos,
;-)
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

llamar metodo js o jqery desde un servlet java

Publicado por gonzalo (3 intervenciones) el 14/02/2019 20:11:12
Muchas gracias lo voy a probar. ;)
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