Newsgroup: it.comp.java
Titolo: aiuto!! trasformarla in un'applicazione per il web

A chiunque possa servire questo è il codice sorgente che invia un
comando al modem usando le java.comm e visualizza la risposta da parte
del modem collegato alla seriale nella porta COM4 adesso devo venire al
mio problema come dovrei ritoccare se necessario una tale classe
affinché diventi come una web application e giri richiamata da una
pagina jsp? e visualizzi il risultato su di un'altra pag jsp grazie per
l'attenzione:
import java.io.InputStream;
   import java.io.OutputStream;
   import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;
   import java.util.TooManyListenersException;
   import javax.comm.*;
/**
 * Simple program to read characters from the command-line, send
 * them to the specified serial port, and echo any characters
returned.
 * Modeled after the SimpleRead and SimpleWrite sample programs
included
 * with the Java Communications API distribution.
 */
    public class SimpleReadWrite1 implements Runnable,
SerialPortEventListener
	{
      static String DEFAULT_PORT = "COM4";
      InputStream  in;
      OutputStream out;
      private String message = "ATI6\r";
     boolean t = true;
      Thread readerThread;
      SerialPort serialPort;
	protected static Object srw;
      public void writeToCommPort(String message)  {
        this.message = message;
      }
    /**
     * Main method.
     */
       public static void main(String[] args) {
         String portname = DEFAULT_PORT;
         if (args.length > 1) {
            System.err.println("Usage: java SimpleReadWrite
[port_name]");
            System.exit(1);
         }
         else if (args.length == 1) {
            portname = args[0];
         }
         try {
            CommPortIdentifier portId =
CommPortIdentifier.getPortIdentifier(portname);
            if (portId.getPortType() ==
CommPortIdentifier.PORT_SERIAL) {
               SimpleReadWrite1 srw = new SimpleReadWrite1(portId);
            }
            else {
               System.err.println(portname + " is not a serial port");
               System.exit(1);
            }
         }
             catch (NoSuchPortException e) { //Port nicht vorhanden
               System.err.println("No such port: " + portname);
               System.exit(1);
            }
             catch (PortInUseException e) { //Port ist
gesperrt/inGebrauch
               System.err.println("Port in use: " + portname);
               System.exit(1);}
             }
    /**
     * Constructor.
     */
       public SimpleReadWrite1(CommPortIdentifier portId) throws
PortInUseException {
         try {
            SerialPort serialPort = (SerialPort)
portId.open("SimpleReadWrite",
                                                             2000);
//Port mit
            in  = serialPort.getInputStream();
            out = serialPort.getOutputStream();
           serialPort.addEventListener(this);
            serialPort.notifyOnDataAvailable(true);
            serialPort.setSerialPortParams(9600,
//Schnittstelleneinstellungen initialisieren
                                           SerialPort.DATABITS_8,
                                           SerialPort.STOPBITS_1,
                                           SerialPort.PARITY_NONE);
            Thread readerThread = new Thread(this);
            //readerThread.setDaemon(true);
            readerThread.start();
         } //Exception-Handling
             catch (IOException e) {
               System.err.println("Problem opening streams");
               System.exit(1);
            }
             catch (TooManyListenersException e) {
               System.err.println("Too Many Listeners");
               System.exit(1);
            }
             catch (UnsupportedCommOperationException e) {
               System.err.println("Problem setting port parameters");
               System.exit(1);
            }
      }
    /**
	 * @param b
	 */
	/**
     * This method loops forever, reading data from the
     * command line and writing it directly to the serial port.
     * No buffering is performed.
	 * @throws InterruptedException
     */
       public void run() {
         try {
            while(true){
			synchronized(this){
               out.write(message.getBytes());
          wait();
            } }
         }
             catch (IOException e) {
            // Terminate thread
            } catch (InterruptedException e) {
				// TODO Blocco catch generato automaticamente
				e.printStackTrace();
			}byte[] readBuffer = new byte[1];
            try {
                while (in.available() > 0) {
                   int numBytes = in.read(readBuffer);
                }
               System.out.print(new String(readBuffer));
            //   readerThread.interrupt();
       //  readerThread=null;
             }
                 catch (IOException e) {
                  // Terminate handling this event on read error
                }}
      /* public boolean stopThread() throws IOException{out.close();
       in.close();return t=false;}*/
    /**
     * Process serial port events.  This method is required
     * when implementing SerialPortEventListener
     *
     * @param event SerialPortEvent object to process
     */
     public void serialEvent(SerialPortEvent event) {
       	String a;
         switch (event.getEventType()) {
            case SerialPortEvent.BI:
            case SerialPortEvent.OE:
            case SerialPortEvent.FE:
            case SerialPortEvent.PE:
            case SerialPortEvent.CD:
            case SerialPortEvent.CTS:
            case SerialPortEvent.DSR:
            case SerialPortEvent.RI:
            case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
               break;
            case SerialPortEvent.DATA_AVAILABLE:
                // If there is data available on serial port,
                // read it in in chunks <=20 bytes
                //
               byte[] readBuffer = new byte[1];
               try {
                  while (in.available() > 0) {
                     int numBytes = in.read(readBuffer);
                  }
                 System.out.print(new String(readBuffer));
                 new Timer(true).schedule(new TimerTask() {
                    public void run() {
                     //System.out.println("Preparing to interrupt");
                    try{  readerThread.interrupt();
                      readerThread = null;}
                    catch(NullPointerException npe){System.exit(0);}//
to release it
                    }
                  }, 2000); // run() after 2000 milliseconds
               }
                   catch (IOException e) {
                    // Terminate handling this event on read error
                  }
               break;
            default:
               System.out.print("Unknown SerialPortEvent type = " +
                                 event.getEventType());
               break;
         }
 
      }
         }

a me piacerebbe trasformarla in J2ME per pilotare l'infrarossi... ma
temo sia impossibile

non posso esserti di aiuto ma non credo sia impossibile

 pagina jsp?
Nella pagina jsp istanzi la classe, richiami il metodo che ritorna la
String.
Qualcosa del genere:
  <% MyClass miaClasse = new MyClass; %>
  <%= miaClasse.mioMetodo() %>
-- 
Giambo - Occhio al filtro antispam _e_ alla whitelist !

ma in questo caso il  mioMetodo() dovrebbe restituire una stringa ma il
metodo che si occupa di scrivere si trova dentro il metodo public void
serialEvent(SerialPortEvent event)  a cui non posso cambiare il tipo di
ritorno e se chiamo un metodo toString gli devo passare il readBuffer
quindi le cose sono più complicate, inoltre volevo sapere: se voglio
importare una classe sul file jsp devo scrivere <% @
import="SimpleReadWrite1"%> e mettere in
WEB-INF/classes/SimpleReadWrite1.class ? grazie ciao

adesso ho provato la strada della servlet o meglio ho trasformato la
mia classe in una servlet implementando i due metodi doGet() e doPost()
, ho messo .class nel percorso indicato prima e se metto l'url
http://localhost:8080/cazzo/SimpleWriteServlet
 mi da questo errore :
HTTP Status 404 - /cazzo/SimpleWriteServlet
--------------------------------------------------------------------------------
type Status report
message /cazzo/SimpleWriteServlet
description The requested resource (/cazzo/SimpleWriteServlet) is not
available.
--------------------------------------------------------------------------------
Apache Tomcat/5.5.9
QUALCUNO può aiutarmi sono alla frutta grazie!

ecco come è stato modificato rendendolo una servlet:
DOVE SBAGLIO????????????????
import javax.comm.*;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import java.util.Timer;
import java.util.TimerTask;
import java.util.TooManyListenersException;
/*
 * Creato il 24-mag-2005
 *
 * TODO Per modificare il modello associato a questo file generato,
aprire
 * Finestra - Preferenze - Java - Stile codice - Modelli codice
 */
/**
 * @author Riccardo
 *
 * TODO Per modificare il modello associato al commento di questo tipo
generato, aprire
 * Finestra - Preferenze - Java - Stile codice - Modelli codice
 */
public class SimpleWriteServlet extends HttpServlet implements
Runnable,SerialPortEventListener{
	CommPortIdentifier portId;
	Thread readerThread;
	OutputStream out;
	InputStream in;
	static String DEFAULT_PORT="COM4";
	private String message="ATI6\r";
	SerialPort serialPort;
	protected void doPost(
		       HttpServletRequest request,
		       HttpServletResponse response)
		       throws ServletException, java.io.IOException {
		     doGet(request,response);
		   }
	public void doGet(HttpServletRequest request,HttpServletResponse
response)
	throws ServletException,IOException{
		String portname=DEFAULT_PORT;
		try{
			CommPortIdentifier
portId=CommPortIdentifier.getPortIdentifier(portname);
			if (portId.getPortType()==CommPortIdentifier.PORT_SERIAL){
				seriale(portId);}
				else{
		               System.err.println(portname + " is not a serial
port");
		               System.exit(1);
		            }
		         }
		             catch (NoSuchPortException e) { //Port nicht vorhanden
		               System.err.println("No such port: " + portname);
		               System.exit(1);
		            } catch (PortInUseException e) {
						// TODO Blocco catch generato automaticamente
						e.printStackTrace();
					}
response.setContentType("text/html");
 PrintWriter out1=response.getWriter();
		            out1.println("<html>");
		            out1.println("<body>");
		            out1.println(""+out+"");
		            out1.println("</body>");
		            out1.println("</html>");
		             }
	/**
	 * @param portId2
	 */
	private void seriale(CommPortIdentifier portId2)throws
	PortInUseException {
		// TODO Stub di metodo generato automaticamente


	/* (non Javadoc)
	 * @see java.lang.Runnable#run()
	 */
	public void run() {byte[] readBuffer = new byte[1];
    try {
   		while (true){
              out.write(message.getBytes());
         	 }
         }
             catch (IOException e) {
            // Terminate thread
            }
		// TODO Stub di metodo generato automaticamente
	}
	/* (non Javadoc)
	 * @see
javax.comm.SerialPortEventListener#serialEvent(javax.comm.SerialPortEvent)
	 */
	public void serialEvent(SerialPortEvent event) { 	String a;
    switch (event.getEventType()) {
    case SerialPortEvent.BI:
    case SerialPortEvent.OE:
    case SerialPortEvent.FE:
    case SerialPortEvent.PE:
    case SerialPortEvent.CD:
    case SerialPortEvent.CTS:
    case SerialPortEvent.DSR:
    case SerialPortEvent.RI:
    case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
       break;
    case SerialPortEvent.DATA_AVAILABLE:
        // If there is data available on serial port,
        // read it in in chunks <=20 bytes
        //
       byte[] readBuffer = new byte[1];
       try {
          while (in.available() > 0) {
             int numBytes = in.read(readBuffer);
          }
  // String   c=toString(new String(readBuffer));
       System.out.print(new String(readBuffer));
         new Timer(true).schedule(new TimerTask() {
            public void run() {
             //System.out.println("Preparing to interrupt");
            try{  readerThread.interrupt();
              readerThread = null;}
            catch(NullPointerException npe){System.exit(0);}// to
release it
            }
          }, 2000); // run() after 2000 milliseconds
       }
           catch (IOException e) {
            // Terminate handling this event on read error
          }
       break;
    default:
       System.out.print("Unknown SerialPortEvent type = " +
                         event.getEventType());
       break;
 }
		// TODO Stub di metodo generato automaticamente
 
	}}

chiedo scusa avevo mappato male la classe per distrazione però non ho
risolto un bel niente dato che non visualizza comunque niente dicendomi
impossibile trovare il server il fatto è che le altre servlet che ho
fatto mi funzionano spero che qualcuno mi possa consigliare in merito e
continui a fare un monologo grazie comunque


Comincio con il regalarti un pochino di punteggiatura: ...,,,:;
Se le altre servlet ti funzionano e questa no, evidentemente c'e' un
problema di configurazione. Le informazioni che dai sono troppo poche
per capire dove sta' il problema, controlla e ricontrolla
meticolosamente tutto.
Per il fatto che non puoi cambiare la signature del metodo: Cambia nel
metodo stesso l'output. Invece che scrivere su System.out, scrivi nella
response (Cito a memoria):
  PrintWriter out = response.getWriter();
  out.println(new String(readBuffer));
P.S.: Ai colleghi che inseriscono i commenti in tedesco, io solitamente
rigo la macchina >:-) ...


adesso  è troppo ho fatto tutto ma nn funziona vi faccio vedere i
passaggi e vi dò il codice sorgente da me scritto per accedere ad un
qualsiasi strumento sulla porta seriale nel mio caso COM4:
1 passo:
scrivo la servlet SimpleRW:
import java.io.*;
import javax.comm.NoSuchPortException;
import javax.comm.PortInUseException;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.comm.*;
/*
 * Creato il 26-mag-2005
 *
 * TODO Per modificare il modello associato a questo file generato,
aprire
 * Finestra - Preferenze - Java - Stile codice - Modelli codice
 */
/**
 * @author Riccardo
 *
 * TODO Per modificare il modello associato al commento di questo tipo
generato, aprire
 * Finestra - Preferenze - Java - Stile codice - Modelli codice
 */
public class SimpleRW extends HttpServlet {
String a;
	String portname="COM4";
	public  void doGet(HttpServletRequest request, HttpServletResponse
response) throws
	ServletException,IOException{
		try {
			  CommPortIdentifier portId =
CommPortIdentifier.getPortIdentifier(portname);
			  if (portId.getPortType()==CommPortIdentifier.PORT_SERIAL)
			  {
			  	Simple s=new Simple();
			    try {
					String a =s.seriale();
				} catch (PortInUseException e1) {
					// TODO Blocco catch generato automaticamente
					e1.printStackTrace();
				}
				response.setContentType("text/html");
	            PrintWriter out=response.getWriter();
	            out.println("<html>");
	            out.println("<body>");
	            out.println(""+a+"");
	            out.println("</body>");
	            out.println("</html>");
			  }
			  else {
	               System.err.println(portname + " is not a serial port");
	               System.exit(1);
	            }
	         }
	             catch (NoSuchPortException e) { //Port nicht vorhanden
	               System.err.println("No such port: " + portname);
	               System.exit(1);
	            }
	             }
	          }
2 passo :
scrivo la classe che si occupa della comunicazione e la chiamo Simple:
import java.io.IOException;
import java.io.*;
import java.util.Timer;
import java.util.TimerTask;
import java.util.TooManyListenersException;
import  javax.comm.*;
/*
 * Creato il 26-mag-2005
 *
 * TODO Per modificare il modello associato a questo file generato,
aprire
 * Finestra - Preferenze - Java - Stile codice - Modelli codice
 */
/**
 * @author Riccardo
 *
 * TODO Per modificare il modello associato al commento di questo tipo
generato, aprire
 * Finestra - Preferenze - Java - Stile codice - Modelli codice
 */
public class Simple implements SerialPortEventListener, Runnable {
	InputStream in;
	OutputStream out;
	static String DEFAULT_PORT="COM4";
	private String message="AT\r";
	protected Thread readerThread;
	private String c;
	public String seriale() throws
	PortInUseException {
		String portname=DEFAULT_PORT;
		try{
			CommPortIdentifier
portId=CommPortIdentifier.getPortIdentifier(portname);
			if (portId.getPortType()==CommPortIdentifier.PORT_SERIAL){
				try {
		            SerialPort serialPort = (SerialPort)
		portId.open("SimpleReadWrite",
		                                                             2000);
//		Port mit
		            in  = serialPort.getInputStream();
		            out = serialPort.getOutputStream();
		           serialPort.addEventListener(this);
		            serialPort.notifyOnDataAvailable(true);
		            serialPort.setSerialPortParams(9600,
//Schnittstelleneinstellungen initialisieren
		                                           SerialPort.DATABITS_8,
		                                           SerialPort.STOPBITS_1,
		                                           SerialPort.PARITY_NONE);
		            Thread readerThread = new Thread(this);
		            //readerThread.setDaemon(true);
		            readerThread.start();
		         } //Exception-Handling
		             catch (IOException e) {
		               System.err.println("Problem opening streams");
		               System.exit(1);
		            }
		             catch (TooManyListenersException e) {
		               System.err.println("Too Many Listeners");
		               System.exit(1);
		            }
		             catch (UnsupportedCommOperationException e) {
		               System.err.println("Problem setting port parameters");
		               System.exit(1);
		            }}
				else{
		               System.err.println(portname + " is not a serial
port");
		               System.exit(1);
		            }
		         }
		             catch (NoSuchPortException e) { //Port nicht vorhanden
		               System.err.println("No such port: " + portname);
		               System.exit(1);
		            } catch (PortInUseException e) {
						// TODO Blocco catch generato automaticamente
						e.printStackTrace();
					}
		return c;
		             }


                 }
        String   c=new String(readBuffer);
             //System.out.print(new String(readBuffer));
                new Timer(true).schedule(new TimerTask() {
                   public void run() {
                    //System.out.println("Preparing to interrupt");
                   try{  readerThread.interrupt();
                     readerThread = null;}
                   catch(NullPointerException npe){System.exit(0);}//
to release it
                   }
                 }, 2000); // run() after 2000 milliseconds
              }
                  catch (IOException e) {
                   // Terminate handling this event on read error
                 }
              break;
           default:
              System.out.print("Unknown SerialPortEvent type = " +
                                event.getEventType());
              break;
        }
     }
	/**
	 * @param string
	 * @return
	 */
	/*private String toString(String string) {
		// TODO Stub di metodo generato automaticamente
		return string;
	}
	/* (non Javadoc)
	 * @see java.lang.Runnable#run()
	 */
	public void run() {
        try {
            while(true){
			synchronized(this){
               out.write(message.getBytes());
          wait();
            } }
         }
             catch (IOException e) {
            // Terminate thread
            } catch (InterruptedException e) {
				// TODO Blocco catch generato automaticamente
				e.printStackTrace();
			}
		// TODO Stub di metodo generato automaticamente
	}
}
3 passo:
poi configuro il file web.xml così:
<servlet>
   <servlet-name>SimpleRW</servlet-name>
    <servlet-class>SimpleRW</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>SimpleRW</servlet-name>
    <url-pattern>/SimpleRW/*</url-pattern>
  </servlet-mapping>
4 passo :compilo SimpleRW che automaticamente dato che richiama Simple
crea 3 file .class
5 passo : posiziono i miei .class nella directory  C:\Programmi\Apache
Software Foundation\Tomcat 5.5\webapps\cazzo\WEB-INF\classes
6 passo: faccio partire Tomcat e sul mio browser scrivo
http://localhost:8080/cazzo/SimpleRW
RISULTATO:
impossibile trovare il server
mi sto esaurendo grazie a chiunque è arrivato sino all'ultimo punto!
CHE DEVO Fà?

 impossibile trovare il server
Non riesce a trovare il server. Se non lo trova puo' darsi che non
esista (Che non e' partito) o che non stia ascoltando sulla porta giusta.
Controlla meglio i settings.


non è possibile per il fatto che le altre jsp vengono visualizzate

 non č possibile per il fatto che le altre jsp vengono visualizzate
Allora hai ragione te e non so aiutarti.
