0

私はサーブレットが初めてで、助けが必要です。コマンドを送信し、jsp ページとライブラリ JSSC を使用したサーブレットを介してデータを受信するための小さなアプリケーションを開発しています。jsp は、コマンド (TX) を送信するためのテキストボックスを示し、同じ jsp には (RX) データを表示するためのテキストエリアがあります。doGet メソッドには、コマンドを RS232 に送信するコードがありますが、外部デバイスから応答を受け取るには、クラス SerialPortReader を使用して、jssc Web ページの例に従ってポートをリッスンします。

私の問題は、SerialPortReader を使用して受信データを jsp ページのテキスト領域に表示する方法がわからないことです。同じjspでRXデータを表示したい。「request.getRequestDispatcher...」を使用して doGet メソッドで機能させる方法は知っていますが、SerialPortReader を使用してこれを行う方法がわかりません。

サーブレット コード:

public void init(ServletConfig config) throws ServletException 
{
    serialPort = new SerialPort("COM7");
    try {

            System.out.println("port open :" + serialPort.openPort());//Open port
            serialPort.setParams(SerialPort.BAUDRATE_9600,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);

            int mask = SerialPort.MASK_RXCHAR + SerialPort.MASK_CTS + SerialPort.MASK_DSR;//Prepare mask
            serialPort.setEventsMask(mask);//Set mask
            serialPort.addEventListener(new SerialPortReader());//Add SerialPortEventListener

    }
    catch (SerialPortException ex)
    {
        System.out.println(ex);
    }
}

protected void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    try
    {

        String tb = request.getParameter("comand");
        out.println("textbox=" + tb);
        serialPort.writeString(tb +"\r");//Write data to port

    } catch (SerialPortException ex) {
        System.out.println(ex);
    }
  }

static class SerialPortReader implements SerialPortEventListener {

     public void serialEvent(SerialPortEvent event) {

        if (event.isRXCHAR()) {//If data is available

                try {

                    String buffer = serialPort.readString();
                    System.out.print(buffer);

                } catch (SerialPortException ex) {
                    System.out.println(ex);
                }
            //}
        } else if (event.isCTS()) {//If CTS line has changed state
            if (event.getEventValue() == 1) {//If line is ON
                System.out.println("CTS - ON");
            } else {
                System.out.println("CTS - OFF");
            }
        } else if (event.isDSR()) {///If DSR line has changed state
            if (event.getEventValue() == 1) {//If line is ON
                System.out.println("DSR - ON");
            } else {
                System.out.println("DSR - OFF");
            }
        }

    }
}
4

0 に答える 0