• Lunes 18 de Noviembre de 2024, 00:31

Autor Tema:  Cómo iniciar aplicación de un servlet  (Leído 7895 veces)

darupi

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Cómo iniciar aplicación de un servlet
« en: Jueves 13 de Agosto de 2009, 15:37 »
0
Hola!!

Quería comentaros mi problema a los expertos, ya que yo no llevo mas que 2 meses con JSP y no se cómo hacer esto, por eso me gustaría saber vuestras opiniones.

Tengo una página en JSP con dos botones, para arrancar y parar una aplicación que abre el correo y cuyo resultado final es la devolución de una lista de páginas web.

Mi pregunta es cómo puedo hacer yo para que, cuando haga click en el botón, se inicie la aplicación y se quede encendida hasta que le de al botón de parar la aplicación.

No se como arrancar el programa ni donde puedo meter mi programa (que esta hecho como una aplicación de escritorio y no se si servirá al hacerlo para web).

Muchas gracias de antemano!!

Saludos!

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Cómo iniciar aplicación de un servlet
« Respuesta #1 en: Jueves 13 de Agosto de 2009, 17:18 »
0
Realmente no comprendo bien lo que deseas hacer.
Si es ejecutar una aplicación que realiza un proceso por detrás o quieres ejecutar una aplicación para que el usuario mediante la página web la utilice.
Si es la segunda opción creo que vas mal enfocado, ya que las aplicaciones de escritorio no son para eso.
Si es la primera opción puedes investigar
Código: Java
  1.   Process prs =  runtime.exec("programa.cmd");
  2.  
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

darupi

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Re: Cómo iniciar aplicación de un servlet
« Respuesta #2 en: Jueves 13 de Agosto de 2009, 21:35 »
0
Explico lo que quiero:

Tengo una aplicación que conecta con el correo, lo abre y mira si hay correos nuevos. Si el remitente es uno en concreto, lo abre y guarda en un array una lista de páginas web de dentro del correo para posteriormente pasarlas a una base de datos.

Pues bien, quiero que esa aplicación se inicie cuando le dé al boton de la pagina JSP de iniciar. Y que se cuando le dé al botón de parar pare de ejecutarse la aplicación.

No se si ahora se entiende mejor......

darupi

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Re: Cómo iniciar aplicación de un servlet
« Respuesta #3 en: Jueves 13 de Agosto de 2009, 23:27 »
0
Yo tengo lo de la conexión al correo y todo en una clase Java. Lo que me gustaría es si, desde la funcion doPost() o doGet() de un SERVLET puedo llamar a esta clase y obtener la lista de webs.

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Cómo iniciar aplicación de un servlet
« Respuesta #4 en: Viernes 14 de Agosto de 2009, 04:38 »
0
creo que sí, revisa el tema de los hilos http://www.arrakis.es/~abelp/ApuntesJava/Threads.htm
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

darupi

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Re: Cómo iniciar aplicación de un servlet
« Respuesta #5 en: Lunes 17 de Agosto de 2009, 23:29 »
0
Al final lo que hice fue que cuando haga click en un botón se ejecute una clase Java que tengo cada 5 minutos.
Lo que pasa que al darle al botón me sale este error:
Código: Text
  1.  
  2. Exception in thread "Timer-0" java.lang.NoClassDefFoundError: javax/mail/Part
  3.     at grupo10.programaCorreo$1.run(programaCorreo.java:92)
  4.     at java.util.TimerThread.mainLoop(Unknown Source)
  5.     at java.util.TimerThread.run(Unknown Source)
  6. Caused by: java.lang.ClassNotFoundException: javax.mail.Part
  7.     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
  8.     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
  9.     at java.lang.ClassLoader.loadClassInternal(Unknown Source)
  10.     ... 3 more
  11.  
  12.  

Os pongo el código donde hago la llamada a el método de la clase:
Código: Text
  1.  
  2. public static void iniciaAplicacion()
  3.     {
  4.         TimerTask timerTask = new TimerTask()
  5.         {
  6.             public void run()
  7.             {
  8.                 //Si el programa esta encendido...
  9.                 if(estadoPrograma() == 1)
  10.                 {
  11.                     //Haz el programa
  12.                     leerCorreo.programa();
  13.                 }
  14.                 //Si esta apagado cierra el timer
  15.                 else
  16.                 {
  17.                     this.cancel();
  18.                 }
  19.             }
  20.         };
  21.  
  22.         Timer timer = new Timer();
  23.         //Cada 5 minuts que conecte
  24.         timer.scheduleAtFixedRate(timerTask, 0, 15000);
  25.     }
  26.  
  27.  

Alguien sabe por que me sale ese error? Gracias!

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Cómo iniciar aplicación de un servlet
« Respuesta #6 en: Lunes 17 de Agosto de 2009, 23:59 »
0
que servidor web estás usando?, lo que entiendo en el mensaje es que te está pidiendo la librería que estás usando para enviar correo. te falta agregarla.
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

darupi

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Re: Cómo iniciar aplicación de un servlet
« Respuesta #7 en: Martes 18 de Agosto de 2009, 00:45 »
0
Estoy utilizando Tomcat, la ultima versión, la 6. Lo que pasa que estoy haciendo las pruebas en el localhost en Eclipse y hasta ahora no me habia dado ese problema :s

darupi

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Re: Cómo iniciar aplicación de un servlet
« Respuesta #8 en: Martes 18 de Agosto de 2009, 15:27 »
0
Aclarado, faltaba copiar la libreria en el servidor tomcat

darupi

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Re: Cómo iniciar aplicación de un servlet
« Respuesta #9 en: Martes 18 de Agosto de 2009, 23:54 »
0
Una pregunta:

Tengo este método en la clase ProgramaCorreo
Código: Text
  1.  
  2. public static void iniciaAplicacion()
  3.     {
  4.         TimerTask timerTask = new TimerTask()
  5.         {
  6.             public void run()
  7.             {
  8.                 //Si el programa esta encendido...
  9.                 if(estadoPrograma() == 1)
  10.                 {
  11.                     //Haz el programa
  12.                     leerCorreo.programa();
  13.                 }
  14.                 //Si esta apagadp cerramos el timer
  15.                 else
  16.                 {
  17.                     this.cancel();
  18.                 }
  19.             }
  20.         };
  21.  
  22.         Timer timer = new Timer();
  23.         //Cada 5 minutos conecta con el correo
  24.         timer.scheduleAtFixedRate(timerTask, 0, 300000);
  25.     }
  26.  
  27.  

Yo a este método de esta clase lo llamo desde una página JSP asi:
Código: Text
  1.  
  2. <%
  3.      programaCorreo.iniciaAplicacion();
  4. %>
  5.  
  6.  

Mi intención es que cada 5 minutos se ejecute un método que tengo en una clase Java.
Antes de ejecutarse el método compruebe si en la base de datos hay un valor a 0. Si es asi que se ejecute, si no es asi no quiero que se ejecute y que se pare el timer.

No se si es así, por eso quería ayuda.

Gracias por adelantado!

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Cómo iniciar aplicación de un servlet
« Respuesta #10 en: Miércoles 19 de Agosto de 2009, 03:56 »
0
Hola, te refieres a esto?

Código: Java
  1.  <%
  2.    if ( hayValorEnCero()){
  3.         programaCorreo.iniciaAplicacion();
  4.     }
  5.  %>
  6.  

si es así, harías un método hayValorEnCero() que te verifica si encuentra, si encuentra llama al método que ejecuta tú aplicación.
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

darupi

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Re: Cómo iniciar aplicación de un servlet
« Respuesta #11 en: Miércoles 19 de Agosto de 2009, 14:07 »
0
La función estadoPrograma() devuelve un 0 si la función esta apagada y un 1 si esta encendida.
Lo que no se es porque no funciona correctamente el timer :s
Creo que no esta bien definido

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Cómo iniciar aplicación de un servlet
« Respuesta #12 en: Miércoles 19 de Agosto de 2009, 15:56 »
0
bueno si puedes copiar el método estadoPrograma para revisarlo y probar el método completo
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

darupi

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Re: Cómo iniciar aplicación de un servlet
« Respuesta #13 en: Miércoles 19 de Agosto de 2009, 18:23 »
0
Código: Text
  1.  
  2. public static int estadoPrograma()
  3.     {
  4.         //Resultado = 0 -> Aplicació parada
  5.         //Resultado = 1 -> Aplicació activada
  6.        
  7.         int resultado = 0;
  8.        
  9.         try
  10.         {
  11.           Class.forName("com.mysql.jdbc.Driver").newInstance();
  12.           Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/grupo10?user=root&password=");
  13.           Statement Estamento = conn.createStatement();
  14.           ResultSet rs = Estamento.executeQuery("SELECT dato FROM aplicacioncorreo a");        
  15.           while (rs.next())
  16.           {
  17.               resultado = rs.getInt("dato");
  18.           }      
  19.           rs.close();
  20.           Estamento.close();
  21.           conn.close();
  22.         }
  23.         catch (Exception e)
  24.         {
  25.            e.printStackTrace();
  26.         }      
  27.         return resultado;
  28.     }
  29.  
  30.  

Lo unico que hace es consultar el estado en que esta la aplicación. Es que creo que se para a mitad ejecución del programa :s

darupi

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Re: Cómo iniciar aplicación de un servlet
« Respuesta #14 en: Miércoles 19 de Agosto de 2009, 19:54 »
0
El problema que tengo es el siguiente:
http://www.hiboox.es/go/imagenes/inform ... 9.jpg.html
El mensaje que aparece es este:
org.eclipse.debug.core.DebugException: com.sun.jdi.ClassNotLoadedException:
Type has not been loaded occurred while retrieving component type of array.

Si yo ese método lo utilizo desde una aplicación de escritorio funciona perfectamente, sin embargo, al llamarlo desde la página JSP me indica que el vector de mensajes es vacío aun teniendo mensajes nuevos en el buzón de entrada.

Alguien sabe porque puede pasar eso?

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Cómo iniciar aplicación de un servlet
« Respuesta #15 en: Miércoles 19 de Agosto de 2009, 23:47 »
0
prueba a ver como te va con esto

Código: Java
  1. public class CorrerPrograma {
  2.  
  3.     private Toolkit toolkit;
  4.     private Timer timer;
  5.  
  6.     public  void iniciarPrograma() {
  7.         toolkit = Toolkit.getDefaultToolkit();
  8.         timer = new Timer();
  9.         timer.schedule(new ClaseTimerTask(),
  10.                 0,
  11.                 1 * 1000);
  12.  
  13.     }
  14.  
  15.     class ClaseTimerTask extends TimerTask {
  16.  
  17.         int n = 0;
  18.         int estado = 0;
  19.  
  20.         public void run() {
  21.  
  22.             if (estadoPrograma() != 20) {
  23.                 System.out.println("Corriendo...." + n);
  24.                 toolkit.beep();
  25.             } else {
  26.                 System.out.println("Saliento del programa");
  27.                 System.exit(1);
  28.             }
  29.             n++;
  30.  
  31.         }
  32.  
  33.         public int estadoPrograma() {
  34.             //obtienes el resultado con la consulta a la bd
  35.             return this.estado++;
  36.         }
  37.     }
  38. }
  39.  
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

darupi

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Re: Cómo iniciar aplicación de un servlet
« Respuesta #16 en: Miércoles 19 de Agosto de 2009, 23:51 »
0
Mmmmmm...

El caso es que si lee un 0 es porque la aplicación esta apagada, y un 1 si esta encendida.
Esos valores se modifican al pulsar en los botones de apagar o encender de la página JSP.

Y esa clase la tengo que sustituir por alguna mía? No veo del todo que hace esa clase, me la podrías explicar un poco por favor?
Gracias!

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Cómo iniciar aplicación de un servlet
« Respuesta #17 en: Jueves 20 de Agosto de 2009, 06:03 »
0
Los números solo son para muestra, ahí se puede modificar que sea uno o cero, si tomas el código lo pegas en una clase y le das run te das cuenta el comportamiento y verás mejor lo que hace la clase

Código: Java
  1. # public void run() {
  2. #  
  3. #             if (estadoPrograma() == 1) {
  4. #                 System.out.println("iniciando programa...." + n);
  5. #                 toolkit.beep();
  6. #             } else {
  7. #                 System.out.println("Saliento del programa");
  8. #                 System.exit(1);
  9. #             }
  10. #             n++;
  11. #  
  12. #         }
  13. #  
  14.  
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

darupi

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Re: Cómo iniciar aplicación de un servlet
« Respuesta #18 en: Jueves 20 de Agosto de 2009, 18:13 »
0
Wenas, he intentado copiar tu clase tal cual en mi programa, pero me da un problema al crear esto:

- timer.schedule(new ClaseTimerTask(), 0,1 * 1000);

Creo que es por crear una clase nueva dentro de otra clase.

Cómo podría arreglarlo?

Gracias

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Cómo iniciar aplicación de un servlet
« Respuesta #19 en: Jueves 20 de Agosto de 2009, 18:44 »
0
Debes crear una clase con nombre CorrerPrograma, si el editor te crea el nombre de la clase, lo que debes hacer es borrarle el nombre y todo el cuerpo que te agregó y solo dejarle el package y pegarle esto.

Código: Java
  1. import java.awt.Toolkit;
  2. import java.util.Timer;
  3. import java.util.TimerTask;
  4.  
  5. public class CorrerPrograma {
  6.  
  7.     private Toolkit toolkit;
  8.     private Timer timer;
  9.  
  10.     public  void iniciarPrograma() {
  11.         toolkit = Toolkit.getDefaultToolkit();
  12.         timer = new Timer();
  13.         timer.schedule(new ClaseTimerTask(),
  14.                 0,
  15.                 1 * 1000);
  16.  
  17.     }
  18.  
  19.     class ClaseTimerTask extends TimerTask {
  20.  
  21.         int n = 0;
  22.         int estado = 0;
  23.  
  24.         public void run() {
  25.  
  26.             if (estadoPrograma() != 20) {
  27.                 System.out.println("Corriendo...." + n);
  28.                 toolkit.beep();
  29.             } else {
  30.                 System.out.println("Saliento del programa");
  31.                 System.exit(1);
  32.             }
  33.             n++;
  34.  
  35.         }
  36.  
  37.         public int estadoPrograma() {
  38.             //obtienes el resultado con la consulta a la bd
  39.             return this.estado++;
  40.         }
  41.     }
  42.  
  43.     public static void main(String arg[]) {
  44.         CorrerPrograma probar = new CorrerPrograma();
  45.         probar.iniciarPrograma();
  46.     }
  47. }
  48.  

Luego le das botón derecho y le das run file CorrerPrograma.java

la salida es esta

Citar
Corriendo....0
Corriendo....1
Corriendo....2
Corriendo....3
Corriendo....4
Corriendo....5
Corriendo....6
Corriendo....7
Corriendo....8
Corriendo....9
Corriendo....10
Corriendo....11
Corriendo....12
Corriendo....13
Corriendo....14
Corriendo....15
Corriendo....16
Corriendo....17
Corriendo....18
Corriendo....19
Saliento del programa
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com