将字节数组从servlet侦听器传递给控制器

时间:2013-02-25 21:04:16

标签: java servlets bytearray listener

我有一个servlet上下文侦听器,其中有一个串口侦听器。在这个监听器中,我以这种方式从串口保存字节:

public void contextInitialized(ServletContextEvent contextEvent){
  context = contextEvent.getServletContext();
  serial =  SerialFactory.createInstance();
  serial.open(Serial.DEFAULT_COM_PORT, 19200);
  serial.addListener(new SerialDataListener(){
    @Override
    public void dataReceived(SerialDataEvent arg0) {    
    private byte[] serialDataByte;
    serialDataByte = arg0.getData().getBytes();
    context.setAttribute("serialData", serialDataByte);
    seriale.write(serialDataByte); //the echo on serial port show me the right bytes                                
    }           
  });
}
在我的控制器上

我通过以下方式访问串口数据:

private byte[] temp;
temp = (byte[]) getServletContext().getAttribute("serialData");
for(int i=0; i<temp.length;i++){
  output.println(Integer.toHexString(temp[i] & 0x00FF));    
}

我发送到串口这个字节数组:

aa 7f 40 a 72 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 fe 1a

长度为69。 有时在我的临时数组中,我只有原始数组的一小部分,有时候:

aa 7f 40 a 72 0 0 0 0 0 0 0 0 0 0

有时:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 fe 1a

有时是69字节的正确数组。 如何将从串口获取的确切数据传递给控制器​​? 提前致谢

1 个答案:

答案 0 :(得分:1)

如果有更多数据进入该端口,此代码将覆盖您最初在serialData上下文属性中所拥有的内容。因此,只有在属性存在时才写入,并考虑在初始dataRecieved()调用后关闭端口。

serial.addListener(new SerialDataListener(){
    @Override
    public void dataReceived(SerialDataEvent arg0) {    
        private byte[] serialDataByte;
        if (context.getAttribute("serialData") == null) {
            serialDataByte = arg0.getData().getBytes();
            context.setAttribute("serialData", serialDataByte);
            seriale.write(serialDataByte); // I assume this is only for debugging
                                           // and also supposed to be `serial`
            serial.close();
        }
    }
});