我是 servlet 的新手,我需要一些帮助。我开发了一个小型应用程序,通过一个 jsp 页面和一个带有库 JSSC 的 servlet 发送命令和接收数据。该 jsp 显示一个文本框来提交命令 (TX),并且在同一个 jsp 中有一个文本区域来显示 (RX) 数据。根据jssc 网页的示例,在 doGet 方法中,我有将命令发送到 RS232 的代码,但是为了从外部设备接收答案,我使用 SerialPortReader 类来监听端口。
我的问题是我不知道如何使用 SerialPortReader 将接收数据显示到 jsp 页面的 textarea 中。我想在同一个 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");
}
}
}
}