java web应用实现扫码枪获取信息

最近项目有一个需求,要求新增光标聚焦到二维码input框连接扫码枪扫码进行输入信息,添加信息的一个功能。

1.项目环境:前端vue后台ssh

2.问题:点击新增 光标聚焦到二维码input框

具体vue光标聚焦到input可以去官网看方法:

键盘监听回车键执行showMessage方法

扫码枪扫出接口url通过myData传入后台

/**
		 * 调用前端传入的接口url抓取HTML页面
		 * strURL 接口url 
		 * postDataStr 参数数据
		 */
	 private ComProduct postHTML(String strURL,String postDataStr)  
	             {
		 ComProduct comProduct = new ComProduct();
		 OutputStreamWriter out = null;
		 BufferedReader in = null;
		 String sTotalString = "";
		 try {
			 URL url = new URL(strURL);
			  URLConnection connection = url.openConnection();
			  connection.setRequestProperty("accept", "*/*");
			  connection.setRequestProperty("connection", "Keep-Alive");
			  connection.setRequestProperty("user-agent",
	                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
	            // 发送POST请求必须设置如下两行
			  connection.setDoOutput(true);
			  connection.setDoInput(true);
                //设置utf-8编码
			  out = new OutputStreamWriter(connection
			    .getOutputStream(),"utf-8");
			  out.write(postDataStr); //post的关键所在!
			  // remember to clean up
			  out.flush();
			  // 一旦发送成功,用以下方法就可以得到服务器的回应:
			  String sCurrentLine;
			  sCurrentLine = "";
			  InputStream l_urlStream;
			  l_urlStream = connection.getInputStream();
			  //设置utf-8编码 
			  BufferedReader l_reader = new BufferedReader(new InputStreamReader(
			    l_urlStream,"utf-8"));
			  while ((sCurrentLine = l_reader.readLine()) != null) {
			   sTotalString += sCurrentLine + "\r\n";
			  } 
			  Document doc = Jsoup.parse(sTotalString);
			  Elements trs = doc.select("table").select("tr");
			  for(int i = 0;i<trs.size();i++){
		      Elements tds = trs.get(i).select("td");
		      for(int j = 0;j<tds.size();j++){
		         if(i==12) {
		        	 comProduct.setBarCode(tds.get(0).text());
		        	 comProduct.setName(tds.get(1).text());
		        	 Integer id = comProductClassDao.getProductClassByName(tds.get(2).text());
		        	 comProduct.setClassId(comProductClassDao.getProductClassByName(tds.get(2).text()));
		        	 comProduct.setNo(tds.get(3).text());
		        	 comProduct.setInfo(tds.get(6).text());
		         }
		       }
		     }
		} catch (Exception e) {
			// TODO: handle exception
			 System.out.println("发送 POST 请求出现异常!"+e);
	            e.printStackTrace();
		}
		 finally{
	            try{
	                if(out!=null){
	                    out.close();
	                }
	                if(in!=null){
	                    in.close();
	                }
	            }
	            catch(IOException ex){
	                ex.printStackTrace();
	            }
	        }
		 return comProduct;  
	   }  

调用前端传入的接口url抓取JSON数据

public ComProduct AnalyzeProductInfo(String Url) {
Map<String, String> params = new HashMap<>();
//将unitCaCode解码
params.put("code", UrlDeCodeUtils.MyUrlDeCode(unitCaCode));

			JSONObject jsonObject = JSONObject.parseObject(HttpClientUtil.HttpPost("http","接口url", params));
			jsonRootBean = new JsonRootBean();
//将JSON转换成实体类 返回实体类
			jsonRootBean = JSONObject.toJavaObject(jsonObject, JsonRootBean.class);
   return JsonRootBean;
}

前端在做一些赋值就收工了!

实现Java自动获取USB扫码数据,可以使用Javajavax.usb库来实现USB设备的连接和数据获取。 下面是基本的实现步骤: 1. 首先需要导入javax.usb相关的库文件,可以在Maven中引入javax.usb-api和usb4java相关依赖。 2. 通过javax.usb库中的UsbHostManager类来获取USB设备管理器实例。 3. 使用USB设备管理器实例获取所有已连接的USB设备。 4. 遍历USB设备列表,查找符合条件的扫码设备。 5. 获取扫码设备的USB接口和端点信息。 6. 通过USB接口和端点信息,使用javax.usb库中的UsbPipe类来建立与扫码设备的数据通信管道。 7. 通过UsbPipe类中的read方法来读取扫码设备发送的数据。 下面是一个简单的Java代码示例: ``` import javax.usb.*; import java.util.*; public class USBScanner { public static void main(String[] args) throws UsbException { // 获取USB设备管理器实例 UsbServices services = UsbHostManager.getUsbServices(); // 获取所有已连接的USB设备 UsbDevice[] devices = services.getRootUsbHub().getAttachedUsbDevices(); // 查找扫码设备 UsbDevice scannerDevice = findScannerDevice(devices); // 获取扫码设备的USB接口和端点信息 UsbInterface scannerInterface = findScannerInterface(scannerDevice); UsbEndpoint scannerEndpoint = findScannerEndpoint(scannerInterface); // 建立与扫码设备的数据通信管道 UsbPipe scannerPipe = scannerEndpoint.getUsbPipe(); scannerPipe.open(); // 读取扫码设备发送的数据 byte[] buffer = new byte[scannerEndpoint.getUsbEndpointDescriptor().wMaxPacketSize()]; while (true) { int bytesRead = scannerPipe.syncSubmit(buffer); String data = new String(buffer, 0, bytesRead); System.out.println("Scanned data: " + data); } } // 查找扫码设备 private static UsbDevice findScannerDevice(UsbDevice[] devices) { for (UsbDevice device : devices) { if (device.isUsbHub()) { UsbDevice scannerDevice = findScannerDevice(device.getAttachedUsbDevices()); if (scannerDevice != null) { return scannerDevice; } } else { UsbDeviceDescriptor descriptor = device.getUsbDeviceDescriptor(); if (descriptor.idVendor() == VENDOR_ID && descriptor.idProduct() == PRODUCT_ID) { return device; } } } return null; } // 查找扫码设备的USB接口信息 private static UsbInterface findScannerInterface(UsbDevice scannerDevice) { List<UsbInterface> interfaces = scannerDevice.getUsbInterfaces(); for (UsbInterface usbInterface : interfaces) { if (usbInterface.getUsbInterfaceDescriptor().bInterfaceClass() == USB_CLASS_HID) { return usbInterface; } } return null; } // 查找扫码设备的数据输入端点信息 private static UsbEndpoint findScannerEndpoint(UsbInterface scannerInterface) { List<UsbEndpoint> endpoints = scannerInterface.getUsbEndpoints(); for (UsbEndpoint endpoint : endpoints) { if (endpoint.getUsbEndpointDescriptor().bEndpointAddress() == ENDPOINT_IN) { return endpoint; } } return null; } private static final short VENDOR_ID = 0x1234; private static final short PRODUCT_ID = 0x5678; private static final int USB_CLASS_HID = 0x03; private static final int ENDPOINT_IN = 0x81; } ``` 在这个示例中,我们通过查找USB设备列表中的扫码设备,并获取其USB接口和端点信息,建立与扫码设备的数据通信管道,然后不断读取扫码设备发送的数据。需要注意的是,具体的USB接口和端点信息可能因设备而异,需要根据实际情况进行调整。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值