基于B/S结构的Java串口通信

合集下载

java串口编程,java串口通信,监听者模式解析

java串口编程,java串口通信,监听者模式解析

java调用coms端口串口通信的方法。

首先需要下到串口驱动。

javacomm20-win32.zip去sun的主页应该有下的。

在这个驱动中有comm.jar,m.properties,win32com.dll这么3个重要的文件。

1、首先配置驱动,把m.properties,win32com.dll拷贝到你的jdk 中具体位置为C:\Program Files\Java\jdk1.6.0_06\bin然后配置windows系统环境变量,在path中加入C:\ProgramFiles\Java\jdk1.6.0_06\bin;打开你的java工程,配置user library,并导入comm.jar包。

2、现在就可以开始写代码了。

串口读写代码如下CommPortIdentifier portID =CommPortIdentifier.getPortIdentifier(com);//1,先拿到Identifier//其中com是String类型的,传入的是串口名com="COM1";SerialPort port = (SerialPort)portID.open("MyComm", 100000000);//2,打开串口//"MyComm"是串口名,100000000是串口过期时间(ms)。

port.setSerialPortParams(rate, databits,stopbit, parity);//3,设置串口属性//rate 波特率(默认9600),databits载波位(默认8),stopbit停止位(默认1),parity校验位(默认0无校验)port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);//4(可选)设置数据流控制模式,默认为无port.close();//关闭串口3、串口读入写出流。

毕业论文---基于BS架构保险系统的设计和实现

毕业论文---基于BS架构保险系统的设计和实现

毕业论⽂---基于BS架构保险系统的设计和实现本科毕业设计(论⽂)基于B/S架构保险系统的设计和实现论⽂题⽬基于B/S架构保险系统的设计和实现系部艺术设计与计算机学部专业⽹络⼯程班级学号学⽣姓名指导教师摘要⾯对⽇趋严峻的经营环境,各保险公司竞争致胜的关键是如何形成以客户服务为中⼼的营运主轴,并建⽴国际化、标准化与优质化的组织架构、作业流程,以及相应的信息系统,同时这也是各公司所需积极应对的挑战。

保险核⼼系统是⼀个保险公司开业的先决条件,保险公司也已经⼴泛地认识到保险公司业务的⾼速增长和⾯临的巨⼤竞争压⼒需要得到⼀个⾼度灵活的、可靠的和可扩展的核⼼业务系统的⽀持,这个核⼼业务系统需能够为保险公司和所有的⽤户提供完整、全⾯的业务处理⽀持。

国内的保险核⼼系统通常以保险公司现有业务作为模板进⾏开发,往往缺乏前瞻性,这样的系统缺乏可扩展性和可移植性。

由于不同保险公司之间的业务和经营模式差异性较⼤,需要通⽤核⼼系统具有⾼度的模块化、参数化、以满⾜不同保险公司的需求,同时保证系统具有良好的可扩展性和可移植性。

关键词:B/S,J2EE,保险核⼼系统,Java企业架构,架构模型,通⽤架构AbstractFacing the serious business environment, how to form to the customer service as a center spindle is the key to winning the competition, and the establishment of international standardization and quality of organizational structure, processes, the corresponding information systems, and required to actively respond to the challenges.Insurance core system is an opened prerequisite for the insurance company has also been widely recognized that the rapid growth of the insurance company's business and facing enormous competitive pressures need to be a highly flexible, reliable and scalable core business system support core business systems need to be able to insurance companies and all users to provide a complete, comprehensive business support. Domestic insurance core systems are usually developed as a template tot he existing business of the insurance company, and often a lack of forward-looking, such systems lack the scalability and portability. Business and business model differences between the different insurance companies, the common core system with a high degree of modularity, parameterization, in order to meet the needs of different insurance companies, while ensuring that the system has good scalability and portability .Key words:B/S, J2EE, Insurance core system, Frameworkmodel, UniversalFramework⽬录1 绪论 (1)1.1 背景及⽬的 (1)1.2 研究主要内容 (2)2 开发⼯具和开发技术选择 (3)2.1 B/S模式 (3)2.2 JSP技术 (4)2.3 JSON技术 (8)2.4 Struts技术 (10)2.5 Spring技术 (11)2.5 Hiberanate技术 (12)2.6 本章⼩结 (13)3 系统的需求分析 (14)3.1 需求分析 (14)3.2 新旧系统功能对⽐ (15)3.3 本章⼩结 (16)4 系统的设计 (17)4.1 整体技术架构 (17)4.2 构造思路 (23)4.3 架构实现 (24)4.3.1 PCIS V6应⽤服务器的配置 (24) 4.3.2 配置⽂件 (25)4.3.3 DW展⽰ (30)4.3.5 PCIS V6 业务层 (38)4.3.6 业务层事务处理 (39)4.3.7 PCIS V6集成层 (39)4.4 数据库分析和设计 (43)4.5 数据库物理结构设计 (44)4.6 本章⼩结 (47)5 系统模块的实现 (48)5.1 ⽤户登录模块的实现 (48)5.2 新增投保模块的实现 (50)5.2.1 前台界⾯字段设置 (51)5.2.2 后台界⾯字段设置 (54)5.3 暂存单查询模块的实现 (54)5.4 投保单查询模块的实现 (55)5.5 本章⼩结 (55)6 调试与测试 (57)6.1 程序调试原则和⽬的 (57)6.2 程序调试 (57)6.3 系统测试 (58)6.4 本章⼩结 (61)总结 (62)参考⽂献 (63)致谢 (64)1绪论随着保险⾏业业务快速发展以及市场竞争加强,特别是渠道业务发展,将各个保险公司IT⽀撑系统推到竞争的第⼀线,直接进⼊―⾯对⾯‖的竞争。

Java 串口通讯 RS232

Java 串口通讯 RS232

通过comm.jar等配置如果用applet应用程序的话,下面这个函数是可以取到串口的,但是如果通过web应用程序(或者通过jsp调用)却取不到串口,而且也不会抛出异常,感觉很奇怪,特来请教!CommPortIdentifier.getPortIdentifiers();同时目标机器的java运行环境也需要把w32comm.dll, comm.jar xxx.proper等放到相应的目录就是用ibm的包而不用sun的comm包:ibm-javacomm-win32-x86.zip只需要把comm驱动包这个类的装载更新一下即/serialcomm.htm利用Java实现串口全双工通讯一个嵌入式系统通常需要通过串口与其主控系统进行全双工通讯,譬如一个流水线控制系统需要不断的接受从主控系统发送来的查询和控制信息,并将执行结果或查询结果发送回主控系统。

本文介绍了一个简单的通过串口实现全双工通讯的Java类库,该类库大大的简化了对串口进行操作的过程。

本类库主要包括:SerialBean.java (与其他应用程序的接口), SerialBuffer.java(用来保存从串口所接收数据的缓冲区), ReadSerial.java (从串口读取数据的程序)。

另外本类库还提供了一个例程SerialExample.java 作为示范。

在下面的内容中将逐一对这几个部分进行详细介绍。

1. SerialBeanSerialBean是本类库与其他应用程序的接口。

该类库中定义了SerialBean的构造方法以及初始化串口,从串口读取数据,往串口写入数据以及关闭串口的函数。

具体介绍如下:本函数构造一个指向特定串口的SerialBean,该串口由参数PortID所指定。

PortID = 1 表示COM1,PortID = 2 表示COM2,由此类推。

本函数初始化所指定的串口并返回初始化结果。

如果初始化成功返回1,否则返回-1。

java基于协议与硬件通信流程

java基于协议与硬件通信流程

java基于协议与硬件通信流程Java基于协议与硬件通信流程在现代的信息时代,计算机与网络技术的快速发展使得计算机与各种硬件设备之间的通信变得日益重要和普遍。

而Java作为一种跨平台的编程语言,具有强大的网络通信能力,可以方便地与各种硬件设备进行通信。

本文将介绍Java基于协议与硬件通信的流程。

1. 硬件设备与协议在硬件通信中,硬件设备通常会遵循特定的通信协议进行数据的交换。

通信协议定义了通信的规则和格式,使得不同设备能够相互理解和交流。

常见的硬件通信协议有串口通信协议(如RS232、RS485)、网络通信协议(如TCP/IP、UDP)等。

2. Java与硬件通信Java作为一种面向对象的编程语言,提供了丰富的网络编程接口和库,使得开发者可以方便地与硬件设备进行通信。

Java通过Socket类提供了对TCP/IP协议的支持,通过DatagramSocket类提供了对UDP协议的支持,通过SerialPort类提供了对串口通信的支持等。

3. Java基于协议与硬件通信的流程Java基于协议与硬件通信的流程通常包括以下几个步骤:3.1 创建与硬件设备之间的通信连接在Java中,通过不同的类和方法可以创建与硬件设备之间的通信连接。

对于网络通信,可以使用Socket类的构造函数创建与服务器的连接;对于串口通信,可以使用SerialPort类的openPort方法打开串口。

3.2 发送数据到硬件设备一旦与硬件设备建立了通信连接,Java程序可以通过相应的类和方法将数据发送到硬件设备。

对于网络通信,可以使用Socket类的getOutputStream方法获取输出流,然后通过write方法发送数据;对于串口通信,可以使用SerialPort类的getOutputStream方法获取输出流,然后通过write方法发送数据。

3.3 接收硬件设备的数据在与硬件设备通信的过程中,Java程序通常需要接收硬件设备发送的数据。

基于java技术的web应用开发选择题及答案

基于java技术的web应用开发选择题及答案

Unit 1 Web应用体系架构简介1.有关C/S、B/S结构以下说法错误的选项是:a)在C/S结构,即客户端/效劳器结构中,有专门的数据库效劳器,但客户端还要运行客户端应用程序,这也叫做胖客户端。

b)在B/S结构中,客户端在阅读器中只负责表示层逻辑的实现,业务逻辑和数据库都在效劳器端运行。

也确实是说,应用程序部署在效劳器端,客户端通过阅读器访问应用程序。

c)通常B/S结构中,客户端发送HTTP请求消息传给效劳器,效劳器将请求传递给Web应用程序,Web应用程序处置请求,并把相应的HTML页面传给客户端。

d)Web应用是基于C/S结构的,也确实是客户端/效劳器结构。

d2.以下HTTP消息的题头域的含义明白得正确的选项是:(三个答案)a)Accept指示响应能够同意的媒体类型。

若是没有Accept题头域,那么效劳器能够平安的假设客户端同意所有的媒介类型。

如:accept :image/gif,accept:image/jpegb)Accept-Language 指示页面的编程语言,如:Accept-Language:javac)Content-Type 指示发送到接受者的消息体的媒介类型,如:Content-type:text/htmld)User-Agent包括发出请求消息的客户端的信息,如:User-Agent:Mozilla/acd3.以下HTTP响应状态码的含义描述正确的选项是?(两个答案)a)200 OK 表示请求成功b)400 不良请求表示服务器未发现与请求URI匹配的内容。

c)404 未发现表示由于语法错误而导致服务器无法理解请求信息d)500 内部服务器错误,无法处理请求ad5. 两大Web效劳器端技术和JSP的特性的对照说法错误的是:a)将页面表现和程序代码分离,在ASPX页面中只有负责页面显示的HTML标记、Web控件标记等。

而随后绑定的或页面包括了页面的程序代码。

b)JSP在 HTML 代码中混合程序代码、由语言引擎执行程序代码;c)的页面表现与代码的分离使得程序员能够在代码页面利用多种语言,如、C#等。

Java串口通信详解

Java串口通信详解

Java串口通信详解序言说到开源,恐怕很少有人不挑大指称赞。

学生通过开源代码学到了知识,程序员通过开源类库获得了别人的成功经验及能够按时完成手头的工程,商家通过开源软件赚到了钱……,总之是皆大欢喜。

然而开源软件或类库的首要缺点就是大多缺乏详细的说明文档和使用的例子,或者就是软件代码随便你用,就是文档,例子和后期服务收钱。

这也难怪,毕竟就像某个著名NBA 球员说的那样:“我还要养家,所以千万美元以下的合同别找我谈,否则我宁可待业”。

是啊,支持开源的人也要养家,收点钱也不过分。

要想既不花钱又学到知识就只能借助网络和了,我只是想抛砖引玉,为开源事业做出点微薄共献,能为你的工程解决哪怕一个小问题,也就足够了。

虽然我的这个系列介绍的东西不是什么Web框架,也不是什么开源服务器,但是我相信,作为一个程序员,什么样的问题都会遇到。

有时候越是简单的问题反而越棘手;越是小的地方就越是找不到称手的家伙。

只要你不是整天只与“架构”、“构件”、“框架”打交道的话,相信我所说的东西你一定会用到。

1串口通信简介1.1常见的Java串口包1.2串口包的安装(Windows下)2串口API概览mPortmPortIdentifierm.SerialPort2.4串口API实例2.4.1列举出本机所有可用串口2.4.2串口参数的配置2.4.3串口的读写3串口通信的通用模式及其问题3.1事件监听模型3.2串口读数据的线程模型3.3第三种方法4结束语1串口通信简介嵌入式系统或传感器网络的很多应用和测试都需要通过PC机与嵌入式设备或传感器节点进行通信。

其中,最常用的接口就是RS-232串口和并口(鉴于USB接口的复杂性以及不需要很大的数据传输量,USB接口用在这里还是显得过于奢侈,况且目前除了SUN有一个支持USB 的包之外,我还没有看到其他直接支持USB的Java类库)。

SUN的CommAPI分别提供了对常用的RS232串行端口和IEEE1284并行端口通讯的支持。

java 串口通信案例

java 串口通信案例

java 串口通信案例Java串口通信是指使用Java编程语言实现与串口设备之间的数据通信。

串口通信在很多应用场景中都有广泛的应用,比如物联网、工业自动化、智能家居等领域。

本文将列举十个以Java串口通信为题的案例,介绍其实现方法和应用场景。

1. 串口读取数据通过Java编程语言实现串口读取数据的功能,可以使用Java的串口通信库,如RXTX、JavaComm等。

首先需要打开串口,并设置串口参数,然后通过监听串口数据的方式实时读取串口传入的数据。

这个案例适用于需要实时监控串口设备数据的应用场景,比如环境监测。

2. 串口发送数据通过Java编程语言实现串口发送数据的功能,可以使用Java的串口通信库。

首先需要打开串口,并设置串口参数,然后通过写入数据的方式将数据发送到串口设备。

这个案例适用于需要向串口设备发送指令或数据的应用场景,比如控制外部设备。

3. 串口数据解析通过Java编程语言实现串口数据解析的功能,可以将从串口读取的原始数据进行解析,提取出有用的信息。

可以根据数据格式进行解析,比如按照特定的协议解析数据。

这个案例适用于需要对串口设备传输的数据进行处理和分析的应用场景。

4. 串口数据存储通过Java编程语言实现串口数据存储的功能,可以将从串口读取的数据保存到本地文件或数据库中。

可以根据需求选择适当的存储方式,比如文本文件、二进制文件或数据库。

这个案例适用于需要对串口设备传输的数据进行长期存储和分析的应用场景。

5. 串口数据转发通过Java编程语言实现串口数据转发的功能,可以将从一个串口读取的数据转发到另一个串口。

可以实现串口设备之间的数据交互,比如串口设备之间的数据通信或设备之间的数据同步。

这个案例适用于需要多个串口设备之间进行数据交互的应用场景。

6. 串口数据监控通过Java编程语言实现串口数据监控的功能,可以监控串口设备的状态和传输数据。

可以实时显示串口设备的连接状态、波特率、数据位、停止位等信息,并实时显示串口传输的数据。

Java 串口通讯 RS232

Java 串口通讯 RS232

通过comm.jar等配置如果用applet应用程序的话,下面这个函数是可以取到串口的,但是如果通过web应用程序(或者通过jsp调用)却取不到串口,而且也不会抛出异常,感觉很奇怪,特来请教!CommPortIdentifier.getPortIdentifiers();同时目标机器的java运行环境也需要把w32comm.dll, comm.jar xxx.proper等放到相应的目录就是用ibm的包而不用sun的comm包:ibm-javacomm-win32-x86.zip只需要把comm驱动包这个类的装载更新一下即/serialcomm.htm利用Java实现串口全双工通讯一个嵌入式系统通常需要通过串口与其主控系统进行全双工通讯,譬如一个流水线控制系统需要不断的接受从主控系统发送来的查询和控制信息,并将执行结果或查询结果发送回主控系统。

本文介绍了一个简单的通过串口实现全双工通讯的Java类库,该类库大大的简化了对串口进行操作的过程。

本类库主要包括:SerialBean.java (与其他应用程序的接口), SerialBuffer.java(用来保存从串口所接收数据的缓冲区), ReadSerial.java (从串口读取数据的程序)。

另外本类库还提供了一个例程SerialExample.java 作为示范。

在下面的内容中将逐一对这几个部分进行详细介绍。

1. SerialBeanSerialBean是本类库与其他应用程序的接口。

该类库中定义了SerialBean的构造方法以及初始化串口,从串口读取数据,往串口写入数据以及关闭串口的函数。

具体介绍如下:本函数构造一个指向特定串口的SerialBean,该串口由参数PortID所指定。

PortID = 1 表示COM1,PortID = 2 表示COM2,由此类推。

本函数初始化所指定的串口并返回初始化结果。

如果初始化成功返回1,否则返回-1。

基于BS结构的applet和servlet通信实例

基于BS结构的applet和servlet通信实例

基于B/S架构的applet和servlet通信Applet的优缺点这里也不想细说,百度上面多的是,只不过实例多为一个版本,这几天也研究了一下,写了个小例子,希望可以对大家有用.1.首先页面如下,主要完成的是增删改查的操作,数据传递主要依靠的是对象的序列化,封装了两个对象TempObject(客户到服务端)和ServerObject(服务到客户端),页面中的刷新是全表格的刷新,增删改操作后有局部动态刷新,整体布局为GridBagLayout和BorderLayout 相结合,包的划分如下:2.代码部分Client端主要是ManageInfo,java:代码如下:package com.zcsoft.frame;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.io.IOException;import java.io.InputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.OutputStream;import .MalformedURLException;import .URL;import .URLConnection;import java.util.Calendar;import java.util.List;import java.util.Vector;import javax.print.attribute.standard.Severity;import javax.swing.JApplet;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JTextField;import javax.swing.UIManager;import javax.swing.UnsupportedLookAndFeelException; import javax.swing.border.LineBorder;import javax.swing.event.ListSelectionEvent;import javax.swing.event.ListSelectionListener;import javax.swing.table.DefaultTableModel;import javax.swing.table.TableColumn;import javax.swing.table.TableColumnModel;import sun.security.krb5.internal.UDPClient;import com.sun.corba.se.impl.ior.WireObjectKeyTemplate; import com.zcsoft.dao.EmployeeDao;import com.zcsoft.test.Employee;import com.zcsoft.test.ServerObject;import com.zcsoft.test.TempObject;/*** 页面窗体* @author training**/public class ManageInfo extends JApplet {private JTable tab;private DefaultTableModel tabModel;//文本框private JTextField txtName,txtBirth,txtPhone,txtEmail,txtAddress;//下拉列表private JComboBox cboSex,cboEducation;//按钮private JButton btnUpd,btnAdd,btnMod,btnDel;private URL url;private URLConnection urlcon;private InputStream ins=null;private ObjectInputStream ois=null;private ObjectOutputStream oos=null;private Object result=null;private Calendar calendar;public ManageInfo() {setBounds(200, 200, 900, 700);setLayout(new BorderLayout());//组件初始化componentInit();//校验服务端if(checkServer()){//数据初始化InitData();}//绑定监听器bindListener();// cboEducation.addActionListener()/*tabModel.addRow(rowData);tabModel.setValueAt(aValue, row, column);tabModel.removeRow();*/// tab.getSelectionModel().addListSelectionListener(new ListSelectionListener(){ // @Override// public void valueChanged(ListSelectionEvent e) {//// }// });}/*** 组件初始化*/private void componentInit(){//用于BorderLayout布局的上中下面板JPanel pnlTop,pnlFoot;JScrollPane spnlTab;//实例化文本框txtName=new JTextField(10);txtBirth=new JTextField(10);txtPhone=new JTextField(10);txtEmail=new JTextField(10);txtAddress=new JTextField(40);//实例化下拉列表cboEducation=new JComboBox(new String[]{"博士","硕士","本科","专科","高中"});cboSex=new JComboBox(new String[]{"男","女"});//实例化按钮btnUpd=new JButton("刷新");btnAdd=new JButton("添加");btnDel=new JButton("删除");btnMod=new JButton("修改");//主体部分pnlTop=new JPanel(new GridBagLayout());pnlTop.setBorder(new LineBorder(Color.red,1));//底部pnlFoot=new JPanel();pnlFoot.add(btnUpd);pnlFoot.add(btnAdd);pnlFoot.add(btnMod);pnlFoot.add(btnDel);//实例化表格String[] columns=new String[]{"编号","姓名","出生年月","性别","文化程度","联系电话","电子邮件","通讯地址"};Object[][] data=null;tabModel=new DefaultTableModel(data,columns);tab=new JTable(tabModel);//禁止拖动tab.getTableHeader().setReorderingAllowed(false);//实例化滚动面板,将表格加入其中spnlTab=new JScrollPane(tab);//将组件添加至pnlTop中GridBagConstraints gbc=new GridBagConstraints();gbc.insets=new Insets(10,10,10,20);gbc.gridy=0;gbc.anchor=GridBagConstraints.NORTHWEST;pnlTop.add(new JLabel("姓名"),gbc);pnlTop.add(txtName,gbc);pnlTop.add(new JLabel("出生日期"),gbc);pnlTop.add(txtBirth,gbc);pnlTop.add(new JLabel("性别"),gbc);pnlTop.add(cboSex,gbc);gbc.gridy=1;pnlTop.add(new JLabel("文化程度"),gbc);pnlTop.add(cboEducation,gbc);pnlTop.add(new JLabel("联系电话"),gbc);pnlTop.add(txtPhone,gbc);pnlTop.add(new JLabel("电子邮件"),gbc);pnlTop.add(txtEmail,gbc);gbc.gridy=2;pnlTop.add(new JLabel("通讯地址"),gbc);gbc.gridwidth=5;pnlTop.add(txtAddress,gbc);gbc.gridy=3;gbc.gridwidth=6;gbc.fill=GridBagConstraints.HORIZONTAL;this.add(pnlTop,BorderLayout.NORTH);this.add(spnlTab,BorderLayout.CENTER);this.add(pnlFoot,BorderLayout.SOUTH);}/*** 绑定监听器*/private void bindListener(){btnUpd.addActionListener(new btnClick());btnAdd.addActionListener(new btnClick());btnDel.addActionListener(new btnClick());btnMod.addActionListener(new btnClick());tab.getSelectionModel().addListSelectionListener(new tabSelectedChange()); }/*** 表格变更行监听实现类* @author training**/private class tabSelectedChange implements ListSelectionListener{@Overridepublic void valueChanged(ListSelectionEvent e) {//获取选中的行的对象if(tab.getSelectedRow()==-1){return;}if(!e.getValueIsAdjusting()){//清空组件InitFrame();int sel=tab.getSelectedRow();if(tab.getValueAt(sel, 1)!=null){txtName.setText(tab.getValueAt(sel, 1).toString());}if(tab.getValueAt(sel, 2)!=null){txtBirth.setText(tab.getValueAt(sel, 2).toString());}if(tab.getValueAt(sel, 5)!=null){txtPhone.setText(tab.getValueAt(sel, 5).toString());}if(tab.getValueAt(sel, 6)!=null){txtEmail.setText(tab.getValueAt(sel, 6).toString());}if(tab.getValueAt(sel, 7)!=null){txtAddress.setText(tab.getValueAt(sel, 7).toString());}if(tab.getValueAt(sel, 4).toString().trim().equals("博士")){cboEducation.setSelectedIndex(0);}else if(tab.getValueAt(sel, 4).toString().trim().equals("硕士")) {cboEducation.setSelectedIndex(1);}else if(tab.getValueAt(sel, 4).toString().trim().equals("本科")) {cboEducation.setSelectedIndex(2);}else if(tab.getValueAt(sel, 4).toString().trim().equals("专科")) {cboEducation.setSelectedIndex(3);}else{cboEducation.setSelectedIndex(4);}if(tab.getValueAt(sel, 3).toString().trim().equals("男")){cboSex.setSelectedIndex(0);}else{cboSex.setSelectedIndex(1);}}}}/*** 按钮监听器实现类* @author training**/private class btnClick implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {JButton btn=(JButton)e.getSource();//检测服务端是否异常if(checkServer()==false){return;}//建立链接urlcon=getCon();if(btn==btnUpd){update();}//添加else if(btn==btnAdd){add();}//删除else if(btn==btnDel){del();}//修改else{mod();}//更新表格// InitData();}}/*** 刷新表格*/private void update(){InitData();InitFrame();}/*** 新增方法*/private void add(){//封装对象String name,birth,sex,education,phone,email,address;int id=getNum();name=txtName.getText();birth=txtBirth.getText();education=cboEducation.getSelectedItem().toString();phone=txtPhone.getText();email=txtEmail.getText();address=txtAddress.getText();TempObject temp=new TempObject();Employee emp=new Employee();emp.setId(id);emp.setName(name);emp.setAddress(address);emp.setBirth(birth);emp.setPhone(phone);emp.setEmail(email);emp.setEducation(education);if(cboSex.getSelectedIndex()==0){sex="男";emp.setSex(1);}else{sex="女";emp.setSex(0);}temp.setEmployee(emp);temp.setType(1);//将对象写到服务端writeObjectToServer(temp);//获取服务端返回结果result=readObjectFromServer();if(result!=null){ServerObject returnObject=(ServerObject)result;if(returnObject.getFlag()){tabModel.addRow(newObject[]{id,name,birth,sex,education,phone,email,address});JOptionPane.showMessageDialog(null,"新增成功");}else{JOptionPane.showMessageDialog(null, returnObject.getMsg());return;}}}/*** 修改方法*/private void mod(){if(tab.getSelectedRow()==-1){JOptionPane.showMessageDialog(null,"请选择要操作的行");return;}//实例化TempObjectTempObject tempObject=new TempObject();Employee emp=new Employee();emp.setId(Integer.parseInt(tab.getValueAt(tab.getSelectedRow(), 0).toString()));emp.setName(txtName.getText());emp.setBirth(txtBirth.getText());emp.setPhone(txtPhone.getText());emp.setEmail(txtEmail.getText());emp.setAddress(txtAddress.getText());//选择男if(cboSex.getSelectedIndex()==0){emp.setSex(1);}else{emp.setSex(0);}if(cboEducation.getSelectedIndex()==0){emp.setEducation("博士");}else if(cboEducation.getSelectedIndex()==1){emp.setEducation("硕士");}else if(cboEducation.getSelectedIndex()==2){emp.setEducation("本科");}else if(cboEducation.getSelectedIndex()==3){emp.setEducation("专科");}else if(cboEducation.getSelectedIndex()==4){emp.setEducation("高中");}tempObject.setType(2);tempObject.setEmployee(emp);//发送请求writeObjectToServer(tempObject);Object[] dataMod=new Object[]{emp.getName(),emp.getBirth(),cboSex.getSelectedItem().toString(),emp.getEducation(),emp.getPhone(),emp.getEmail(),emp.getAddress()};//获取响应result=readObjectFromServer();if(result!=null){ServerObject serverObject=(ServerObject)result;if(serverObject.getFlag()){for(int i=1;i<8;i++){tabModel.setValueAt(dataMod[i-1],tab.getSelectedRow(), i);}JOptionPane.showMessageDialog(null,"修改成功");}else{JOptionPane.showMessageDialog(null,serverObject.getMsg());return;}}}/*** 删除方法*/private void del(){if(tab.getSelectedRow()==-1){JOptionPane.showMessageDialog(null,"请选择要操作的行");return;}int sel=JOptionPane.showConfirmDialog(null, "确认删除");if(sel==JOptionPane.OK_OPTION){TempObject tempObject=new TempObject();//3 表示删除tempObject.setType(3);int id=Integer.parseInt(tab.getValueAt(tab.getSelectedRow(), 0).toString());Employee emp=new Employee();emp.setId(id);tempObject.setEmployee(emp);//写到服务端writeObjectToServer(tempObject);//从服务端获得结果result=readObjectFromServer();ServerObject serverObject=(ServerObject)result;if(serverObject.getFlag()){tabModel.removeRow(tab.getSelectedRow());JOptionPane.showMessageDialog(null,"删除成功");InitFrame();}else{JOptionPane.showMessageDialog(null, serverObject.getMsg());}}else{}}/*** 根据指定数据更新表数据* @param list*/private void InitData(){urlcon=getCon();//获取所有数据TempObject tempObject=new TempObject();tempObject.setType(0);writeObjectToServer(tempObject);//获取服务返回数据Object obj=readObjectFromServer();ServerObject returnObj=(ServerObject)obj;//方法正确执行if(returnObj.getFlag()){List<Employee> list=returnObj.getEmpList();String[] columns=new String[]{"编号","姓名","出生年月","性别","文化程度","联系电话","电子邮件","通讯地址"};Object[][] data=new Object[list.size()][8];for(int i=0;i<list.size();i++){data[i][0]=list.get(i).getId();data[i][1]=list.get(i).getName();data[i][2]=list.get(i).getBirth();if(list.get(i).getSex()==1){data[i][3]="男";}else{data[i][3]="女";}data[i][4]=list.get(i).getEducation();data[i][5]=list.get(i).getPhone();data[i][6]=list.get(i).getEmail();data[i][7]=list.get(i).getAddress();}tabModel.setDataVector(data, columns);//隐藏第一列TableColumnModel colModel=tab.getColumnModel();TableColumn column=colModel.getColumn(0);column.setMaxWidth(0);column.setMinWidth(0);column.setPreferredWidth(0);}else{JOptionPane.showMessageDialog(null,returnObj.getMsg());}}/*** 获取链接* @param url* @return*/private URLConnection getCon(){URLConnection con=null;try {url=new URL("http://localhost:8080/Web2/EmployeeSer");con=url.openConnection();con.setDoInput(true);con.setDoOutput(true);con.setUseCaches(false);con.connect();} catch (MalformedURLException e) {// TODO Auto-generated catch blockJOptionPane.showMessageDialog(null, e.getMessage());} catch (IOException e) {// TODO Auto-generated catch blockJOptionPane.showMessageDialog(null, e.getMessage());}return con;}/*** 清空组件框*/private void InitFrame(){txtAddress.setText("");txtBirth.setText("");txtEmail.setText("");txtPhone.setText("");txtName.setText("");cboEducation.setSelectedIndex(0);cboSex.setSelectedIndex(0);}/*** 将对象写入服务端* @param obj*/private void writeObjectToServer(Object obj){try {oos=new ObjectOutputStream(urlcon.getOutputStream());oos.writeObject(obj);oos.flush();oos.close();} catch (IOException e) {// TODO Auto-generated catch blockJOptionPane.showMessageDialog(null, e.getMessage());}}/*** 从服务端读取对象* @return*/private Object readObjectFromServer(){Object objRerurn=null;try {。

java串口通信

java串口通信

小技巧:如何辨别TXD和RXD端口?搞电子的人手边应该常备一个电表,用来测测电压,电阻什么的会很有用。

你只要分别测一下RS232端口的2--5或3--5针脚之间的电压,通常TXD针脚与GND之间会有3~15V左右的负电压,表示它是TXD针脚。

安装JavaCommunicationsAPISun的J2SE中并没有直接提供以上提到的任何一种串行通讯协议的开发包,而是以独立的jar包形式发布在网站上(从这里下载)----即comm.jar,称之为Javatm CommunicationsAPI,它是J2SE的标准扩展。

comm.jar并不是最近才有,早在1998年时,sun就已经发布了这个开发包。

comm.jar分别提供了对常用的RS232串行端口和IEEE1284并行端口通讯的支持。

目前sun发布的comm.jar只有Windows和Solaris平台两个版本,如果你需要Linux平台下的,可以在/~kevinh/linuxcomm.html找到。

在使用comm.jar之前,必须知道如何安装它。

这也是困扰许多初学javaRS232通讯者的一个难题。

如果我们电脑上安装了JDK,它将同时为我们安装一份JRE(Java RuntimeEntironment),通常我们运行程序时都是以JRE来运行的。

所以以下的安装适用于JRE。

如果你是用JDK来运行程序的,请将相应的改成。

下载了comm.jar开发包后,与之一起的还有两个重要的文件,win32com.dll和m.properties。

comm.jar提供了通讯用的javaAPI,而win32com.dll提供了供comm.jar调用的本地驱动接口。

而m.properties是这个驱动的类配置文件。

首先将comm.jar复制到\lib\ext目录。

再将win21com.dll复制到你的RS232应用程序运行的目录,即user.dir。

然后将m.properties复制到\lib目录。

java串口通信

java串口通信

java串口通信API说明java串口通信Java提供了 CommunicationAPI(包含于m包中)用于通过与机器无关的方式,控制各种外部设备。

Communications API,是标准的Java的扩展部分,它在JavaAPI中是没有附带的。

因此,必须先在SUN公司网站的Java站点()上下载这个扩展类库。

1.1Communications API 简介Communications API 的核心是抽象的CommPort类及其两个子类:SerialPort类和ParallePort类。

其中,SerialPort类是用于串口通信的类,ParallePort类是用于并行口通信的类。

CommPort类还提供了常规的通信模式和方法,例如:getInputStream( )方法和getOutputStream( )方法,专用于与端口上的设备进行通信。

然而,这些类的构造方法都被有意的设置为非公有的(non-public)。

所以,不能直接构造对象,而是先通过静态的CommPortIdentifer.getPortIdentifiers()获得端口列表;再从这个端口列表中选择所需要的端口,并调用CommPortIdentifer对象的Open( )方法,这样,就能得到一个CommPort对象。

当然,还要将这个CommPort对象的类型转换为某个非抽象的子类,表明是特定的通讯设备。

该子类可以是SerialPort类和ParallePort类中的一个。

下面将分别对CommPort类,CommPortIdentifier类,串口类SerialPort进行详细的介绍。

1.2 CommPortIdentifier类CommPortIdentifier类的方法如下:方法说明addPortName(String, int, CommDriver) 添加端口名到端口列表里addPortOwnershipListener(CommPortOwnershipListener) 添加端口拥有的监听器removePortOwnershipListener(CommPortOwnershipListener) 移除端口拥有的监听器getCurrentOwner() 得到当前占有端口的对象或应用程序getName() 得到端口名称getPortIdentifier(CommPort) 得到参数打开的端口的CommPortIdentifier类型对象getPortIdentifier(String) 得到以参数命名的端口的CommPortIdentifier类型对象getPortIdentifiers() 得到系统中的端口列表getPortType() 得到端口的类型isCurrentlyOwned() 判断当前端口是否被占用open(FileDescriptor) 用文件描述的类型打开端口open(String, int) 打开端口,两个参数:程序名称,延迟时间(毫秒数)1.3 SerialPort类SerialPort关于串口参数的静态成员变量成员变量说明成员变量说明成员变量说明DATABITS_5 数据位为5 STOPBITS_2 停止位为2 PARITY_ODD 奇检验DATABITS_6 数据位为6 STOPBITS_1 停止位为1 PARITY_MARK 标记检验DATABITS_7 数据位为7 STOPBITS_1_5 停止为1.5 PARITY_NONE 空格检验DATABITS_8 数据位为8 PARITY_EVEN 偶检验 PARITY_SPACE 无检验SerialPort对象的关于串口参数的函数方法说明方法说明getBaudRate() 得到波特率 getParity() 得到检验类型getDataBits() 得到数据位数 getStopBits() 得到停止位数setSerialPortParams(int, int, int, int) 设置串口参数依次为(波特率,数据位,停止位,奇偶检验)SerialPort关于事件的静态成员变量成员变量说明成员变量说明BI Break interrupt中断 FE Framing error错误CD Carrier detect载波侦听 OE Overrun error错误CTS Clear to send清除以传送 PE Parity error奇偶检验错误DSR Data set ready数据备妥 RI Ring indicator响铃侦测DATA_AVAILABLE 串口中的可用数据 OUTPUT_BUFFER_EMPTY 输出缓冲区空SerialPort中关于事件的方法方法说明方法说明方法说明isCD() 是否有载波 isCTS() 是否清除以传送 isDSR() 数据是否备妥isDTR() 是否数据端备妥 isRI() 是否响铃侦测 isRTS() 是否要求传送addEventListener(SerialPortEventListener) 向SerialPort对象中添加串口事件监听器removeEventListener() 移除SerialPort对象中的串口事件监听器notifyOnBreakInterrupt(boolean) 设置中断事件true有效,false 无效notifyOnCarrierDetect(boolean) 设置载波监听事件true有效,false无效notifyOnCTS(boolean) 设置清除发送事件true有效,false无效notifyOnDataAvailable(boolean) 设置串口有数据的事件true有效,false无效notifyOnDSR(boolean) 设置数据备妥事件true有效,false无效notifyOnFramingError(boolean) 设置发生错误事件true有效,false无效notifyOnOutputEmpty(boolean) 设置发送缓冲区为空事件true有效,false无效notifyOnParityError(boolean) 设置发生奇偶检验错误事件true 有效,false无效notifyOnRingIndicator(boolean) 设置响铃侦测事件true有效,false无效getEventType() 得到发生的事件类型返回值为int型sendBreak(int) 设置中断过程的时间,参数为毫秒值setRTS(boolean) 设置或清除RTS位setDTR(boolean) 设置或清除DTR位SerialPort中的其他常用方法方法说明close() 关闭串口getOutputStream() 得到OutputStream类型的输出流getInputStream() 得到InputStream类型的输入流一年半前在jbuilder2006下写过串口通信程序,最近做一个GPS-SMS 项目,用到串口通信,在JBUILDER 配置了comm.jar却发现找不到端口,经过几番查找才发现自己配置的路径错了,浪费了不少时间,有必要记下来,防止下次出错,此次还暴露了自己看文章一目十行,走马观花的毛病。

基于B/S结构的Java串口通信

基于B/S结构的Java串口通信

基于B/S结构的Java串口通信【摘要】本文介绍的是数字粮库信息化软件系统的智能通风模块,系统建设了一个综合性多功能的粮库信息化管理网络平台。

平台系统基于B/S结构,实现在线业务处理、信息发布、智能控制的目的。

其中通风模块的通风状态检测,通过串口发送指令控制通风设备,接收串口指令显示通风设备状态。

系统在Java 程序中使用comm.jar开发包编程实现串口通信。

【关键词】智能通风;状态监控;Java串口通信引言Java由于具有开放性、平台无关性和面向对象等特性,使之成为一个理想的软件开发平台[1]。

因此智能通风[2]模块与下位机的通信方式选择RS232串口通信。

本文使用Java开发基于B/S结构的智能通风状态监控串口通信程序,具有很强的实用意义。

1.智能通风结构模式智能通风模块的物理结构为B/S(Browser/Server)模式,即浏览器/服务器模式,用户可联网通过Web浏览器访问系统,连接服务器对各通风设备进行监控维护。

服务器通过串口与通风设备进行通信,其流程如图1所示。

进入页面,发送状态查询数据帧查询通风设备状态。

若超过T0时间则提示响应失败。

在T0时间内设备有响应则分析返回数据帧显示各通风设备的状态。

用户点击通风设备图标,发送操作数据帧,在T0时间内通风设备进行响应,并返回数据。

如果通风设备操作成功则提示操作成功,否则提示操作失败。

若超过T0时间则提示响应失败。

图1 程序流程图2.通风设备通信协议智能通风通信协议[3]以帧为基本单元传输的,每帧由帧头、装置地址、报文命令码、报文长度、正文、累加和及结束符等组成。

每个域由一定字节组成。

其中读写寄存器的通信协议采用Modbus协议。

其命令帧格式如图2所示。

图2 读写寄存器帧数据格式3.智能通风设备监控智能通风设备监控模块如图3所示,通过选择仓号显示该仓号通风设备的状态,通风设备有通风窗、轴流风机、离心风机和空调等。

点击图中通风设备图标可控制设备的开关。

java jssc串口例子

java jssc串口例子

java jssc串口例子Java JSSC(Java Simple Serial Connector)是一个用于串口通信的Java 库。

下面是一个简单的Java JSSC串口通信示例:```javaimport ;import ;import ;import ;public class SerialPortExample implements SerialPortEventListener { private SerialPort serialPort;public SerialPortExample(String portName) {serialPort = new SerialPort(portName);try {();(_9600, _8, _1, _NONE);(this);} catch (SerialPortException e) {();}}public void serialEvent(SerialPortEvent event) { if (()) {try {int available = ();if (available > 0) {byte[] bytes = new byte[available];(bytes, );("Received data: " + new String(bytes)); }} catch (SerialPortException e) {();}}}public static void main(String[] args) {String portName = "COM1"; // 串口名称,根据实际情况修改new SerialPortExample(portName);}}```该示例程序使用JSSC库打开一个串口,并设置串口参数(波特率、数据位、停止位和校验位)。

然后,它添加了一个`SerialPortEventListener`,以便在接收到数据时执行相应的操作。

基于B-S模式和Java技术的实验室管理系统(LIMS)的研究与实现

基于B-S模式和Java技术的实验室管理系统(LIMS)的研究与实现

基于B/S模式和Java技术的实验室管理系统(LIMS)的研究与实现摘要:系统的研制主要使用了b/s模式和java技术.b/s模式是目前软件开发使用最普遍的模式之一。

b/s不用用户安装桌面程序而可以随心所欲地进行操作,为工作提供了极大的方便,这也是本项目使用这个模式进行开发的原因之所在。

使用实验室管理系统的主要目的就是提高工作的效率,b/s这一模式的特点正好顺应了这一要求。

在开发的语言选择上,选择了java语言,因为java语言在开发系统的安全性和可移植性方面都有独到之处。

在数据层主要使用了hibernate技术,而在表现层主要使用了jsf技术,并使用了mvc三层模型开发。

关键词:实验室信息管理系统;hlims1.0; j2ee;lims1.2hlims1。

0的体系架构及功能模块基于以上的分析,结合我校实验信息管理系统的需要,确定本系统的功能模块。

如图1所示:图1系统的功能模块本系统共分为11个小的模块,分为系部信息设置部分、教师基本信息维护、实验室信息维护、实验项目管理、实验课程维护、实验项目申请、实验器材管理、开放实验室服务管理、文档资料管理、安全管理和各类统计报表。

1。

3hlims1.0的数据库设计1.3。

1确定hlims的结构实体和数据项以下是主要的实体及其主要属性:①资产及设备(设备编号,设备名称,设备型号,资产配置,数量单位,资产类别,生产厂家,生产日期,入帐日期,使用年限,资产价值,增加方式,资产状态,所属实验室,保管人,备注);②工作人员(员工编号,姓名,性别,出生年月,所学专业,职称,所属部门,人员状况,个人靓照,备注);③实验室(实验室编号,实验室名称,门牌号码,管理人员,学科门类,筹建日期,设备总资产,实验个数,实验室开课率);④排课记录(开课年份,星期,起时,止时,课程名称,实验室名称,班级,辅导教师)。

1.3。

2优化了的hlims的e r图“实验室管理信息系统”的全局e r图如图2所示:图2实体之间的关系2实验室信息系统(hlims1。

基于B/S模式的数控设备远程控制系统的研究及其Java技术的实现

基于B/S模式的数控设备远程控制系统的研究及其Java技术的实现
Ab t a t n o d r o me t h e wo kn n f t r a ed o n e n t n r n l n h e i - s r c :I r e e e n t r i g ma u ac u e b s n Il r e / la e d t e r qu r t t I a e m e t fr dt n l n a io a n f c u e St e i f ma i n r f m , h a i a o t i ma u a t r ’ or t e or t e b s c f me h n o r wor f h mo e ko e r t e t
0 引言
随着 计算机 、通信 和 网络技 术 的发展 ,制造 系 统也 向着 集成 化 、网络化 、全球 化方 向发 展 。充分 利 用异地 资源 、 备 、 设 知识 等快 速 响应市 场需求 , 生 产 出满足 用户需 求 的产 品已成为 制造 业发 展的必 然
具 有面 向对 象 ,与操作 平 台无关 ,可移 植性和 稳 定 性 高等 特点 。 同时 , 作为 一种面 向网络编 程 的语言 , Jv 又是一 种简洁 的 、 aa 多线程 执 行 的We 编程 语言 。 b 它与 It t ne 的紧密 结合 ,在 对 We me b的开发上 ,克 服 了原 来 C I G 编程 中存在 的效率 低下 ,实时 响应 要
基于bs模式的数控设备远程控制系统的研究及其java技术的实现
维普资 式的数控设备远程控制 系统 的研究 /模
及其 Jv 技 术的实现 aa
杨敏华 ’顾寄南 ,
(. 1 江苏大学 制造业信息化研究 中心 , 镇江 2 2 1 :2 镇江市 制造业信息化工程技术研究中心, 10 3 . 镇江 2 2 1 ) 1 0 3

BS三层架构模式的使用分析

BS三层架构模式的使用分析

信息科学企业技术开发年月三层架构模式的使用分析王茜邹悦临石家庄信息工程职业学院河北石家庄摘要三层架构一、、即表示层、业务逻辑层和数据访问层。

在小型项目中是体现的优势并不明显但在大型或中型项目中三层架构能带来的绝不仅是效率的提高清晰的层次划分会让杂乱的代码流露出艺术的美感程序员的工作变得更具艺术创作性文章对其使用进行分析。

关键词三层架构程序中图分类号文献标识码文章编号———三层架构的解释层是指在应用程序中实现的客户端。

在分布式应用程序结构中用户服务可以是客户端或客户端这具体取决于特定的应用程序。

例如在开发应用程序时可能需要提供具有标准用户界面或用户界面。

通常这种一般类型的应用程序包含以下功能管理页的呈现和行为向业务逻辑层发送用户输入从业务逻辑层接收结果等。

三层架构的概念模式的三层结构是一种严格的分层定义它首先将应用系统复杂的开发工作进行划分相对简单的小分块然后在每一层中只实现系统相应层的功能设计层间的交互由相邻层对应的功能模块进行调用信息传递只由接口进行传送。

系统功能实现构架的设计是为系统提供一个可行的实现方案并方便程序设计人员将此方案转换为实现应用系统功能的具体模式是从传统的发展起来的计算方式。

是松散耦合系统通过消息传递机制进行对话由客户端发出请求给服务器服务器进行相应处理后经传递机制送回客户端模式则把模式的服务器端进一步深化分解成应用服务器服务器和多个数据库服务器同时简化中的客户端将客户端的计算功能移至服务器仅保留其表示功能从而成为一种由表示层、功能层与数据库服务层构成的三层分布式结构。

三层架构的具体划分所谓三层架构是在客户端与数据库之间加入了一个中间层也叫组件层。

这里所说的三层体系是指逻辑上的三层即使这三个层放置到一台机器上。

三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。

通常情况下客户端不直接与数据库进行交互而是通过通讯与中间层建立连接再经由中间层与数据库进行交换数据访问层执行从数据库获取数据或向数据库发送数据的功能。

java dbus机制

java dbus机制

java dbus机制Java D-Bus机制是一种用于在不同进程之间进行通信的机制,它基于D-Bus协议,并提供了Java语言的API。

D-Bus是一个跨平台的IPC(进程间通信)系统,它允许进程通过消息传递来进行通信。

在Java中使用D-Bus,可以方便地实现不同进程之间的通信,以实现各种复杂的功能。

Java D-Bus机制的主要特点和优势如下:1.跨平台性:Java D-Bus机制可以在各种操作系统上使用,包括Linux、Windows和Mac等。

这意味着我们可以使用相同的代码在不同的操作系统上实现类似的功能,大大提高了开发的灵活性和可移植性。

2.简单易用:Java D-Bus机制提供了一套直观的API,可以方便地进行进程间通信。

开发者只需要了解一些简单的API调用就可以实现进程间的消息传递,而无需了解底层的通信协议和细节。

3.高效可靠:Java D-Bus机制使用了D-Bus协议,这是一种经过验证和可靠的通信协议。

它通过可靠的消息传递机制来保证消息的不丢失和有序性,从而提供了高效和可靠的通信方式。

4.功能丰富:Java D-Bus机制提供了丰富的功能和特性,可以满足各种不同的需求。

例如,可以通过D-Bus机制在不同进程间共享数据、调用远程方法、订阅事件等。

这些功能可以帮助我们实现复杂的功能,提高开发效率。

Java D-Bus机制的使用步骤如下:1.引入依赖:首先,我们需要在项目中引入Java D-Bus的依赖。

可以通过maven等工具将其添加到项目的依赖中。

例如,在maven中可以添加以下依赖:```xml<dependency><groupId>org.freedesktop.dbus</groupId><artifactId>dbus-java</artifactId><version>3.2.1</version></dependency>```2.创建连接:接下来,我们需要创建一个连接来与D-Bus进行通信。

基于B-S体系结构开发应用系统

基于B-S体系结构开发应用系统

基于B/S体系结构开发应用系统摘要:本文介绍了B/S构架的定义,分析了Browser/Server体系结构开发应用软件的特点和不足。

提出了克服该不足的一种方法,以及对编写B/S的一些建议。

关键词:应用软件服务器B/S1. 引言由于客户服务器两层结构存在灵活性差、升级困难、维护工作量大等缺陷,已较难适应当前信息技术与网络技术发展的需要。

随着WEB技术的日益成熟,Browse/Server(简称B/S)结构已成为取代Client/Server(简称C/S)结构的一种全新技术。

采用该结构软件的优势在于:(1)无须开发客户端软件,维护和升级方便;(2)可跨平台操作,任何一台机器只要装有WWW浏览器软件,均可作为客户机来访问系统;(3)具有良好的开放性和可扩充性;(4)可采用防火墙技术来保证系统的安全性,有效地适应了当前用户对管理信息系统的新需求。

因此该结构在管理信息系统开发领域中获得飞速发展,成为应用软件研制中一种流行的体系结构。

2. 基于B/S体系结构开发应用系统2.1 B/S三层体系结构在B/S体系结构系统中,用户通过浏览器向分布在网络上的许多服务器发出请求,服务器对浏览器的请求进行处理,将用户所需信息返回到浏览器。

B/S结构简化了客户机的工作,客户机上只需配置少量的客户端软件。

服务器将担负更多的工作,对数据库的访问和应用程序的执行将在服务器上完成。

浏览器发出请求,而其余如数据请求、加工、结果返回以及动态网页生成等工作全部由Web Server完成。

实际上B/S体系结构是把二层C/S结构的事务处理逻辑模块从客户机的任务中分离出来,由Web服务器单独组成一层来负担其任务,这样客户机的压力减轻了,把负荷分配给了Web服务器。

这种三层体系结构如图1所示。

页脚内容图2.1三层体系结构图这种结构不仅把客户机从沉重的负担和不断对其提高的性能的要求中解放出来,也把技术维护人员从繁重的维护升级工作中解脱出来。

由于客户机把事务处理逻辑部分分给了功能服务器,使客户机一下子"苗条"了许多,不再负责处理复杂计算和数据访问等关键事务,只负责显示部分,所以维护人员不再为程序的维护工作奔波于每个客户机之间,而把主要精力放在功能服务器上程序的更新工作。

学生智能学习系统

学生智能学习系统

小学生智能学习系统摘要随着科技的进步和计算机网络的飞速发展,教育在人们生活中开始占有很重要的地位。

为了让人们的学习过程可以不受地域、时间限制,使得教学资源能在最大范围内实现共享,产生了小学生智能学习系统。

本学生学习系统主要是为在校学习的学生提供一个网络平台,可以让同学无论何时何地,只要有网络的地方就可以进行网上学习,自行安排学习时间,不仅突破了学校授课的地点时间的局限性,更节约了学校的各种资源,而且还节省了老师同学的时间,网上的交流让老师同学更加的自由方便,从学习渠道方面解决学生学习知识。

本设计的开发是基于B/S结构,JAVA开发语言,采用My Eclipse 开发平台及SQL Server 2008数据库进行开发。

关键词:B/S;java;JSPPupils intelligent learning systemAbstractWith the advancement of technology and the rapid development of computer networks, education plays in people's lives is very important to start position. To make people's learning process can be subject to geographical and time constraints, making teaching resources can be shared within the maximum, resulting in an online teaching system.The Web site primarily for students studying in the school to provide a network platform that allows students anywhere, anytime, as long as the place where the network can be e-learning, self-study time arrangements, not only broke the schools where instruction time limitations, but also saves the resources of schools, but also saves time for teachers and students, online communication that the freedom of teachers and students more convenient channels to solve the students from learning to learn knowledge. The design of the development is based on B / S structure, JA V A development language, using My Eclipse development platform and SQL Server 2008 database development.Keywords: B / S; online teaching system; JSP目录摘要 (i)Abstract (ii)目录 (I)1 引言 (1)1.1 课题背景 (2)1.2 国内外研究现状 (2)1.3 本课题研究的意义 (2)1.4 本课题的研究方法 (3)1.5 可行性分析 (3)1.5.1 技术可行性 (3)1.5.2 经济可行性 (4)1.5.3 操作可行性 (4)2 相关理论知识介绍 (5)2.1 系统开发环境 (5)2.2 B/S结构 (5)2.3 Eclipse+My Eclipse简介 (5)2.4 SQL Server 2008介绍 (6)2.5 JSP简介 (7)3 需求分析 (8)3.1 用户角色分析 (8)3.2 功能模块划分 (8)3.3 性能需求 (9)4 总体设计 (10)4.1 系统功能图示例 (10)4.1.1 测试的主要内容 (10)4.1.2 业务流程分析 (10)4.1.3 数据流分析 (12)4.1.4 后台功能演示 (14)4.2 数据库表的设计与实现 (14)4.2.1 测试题答案信息表(answer) (14)4.2.2 课程文件信息表(kcfiles) (15)4.2.3 课程信息表(kechens) (15)4.2.4 新闻资讯信息表(news) (16)4.2.5 公告信息表(notices) (16)4.2.6 试题信息表(shiti) (17)4.2.7 系统用户信息表(sysuser) (17)4.3 数据库概念结构设计 (18)4.4 网站详细设计 (21)4.4.1 学生注册 (22)4.4.2 学生登录 (22)4.4.3 发布作业 (23)4.4.4 师生交流 (24)4.3.5 新闻管理 (25)4.3.6 公告栏管理模块的实现 (25)结论 (26)参考文献 (27)致谢 (28)附录 A 外文原文 (29)附录 B 外文译文 (40)附录 C 源代码 (46)1引言在21世纪这个信息高速发达、高速流通的时代,计算机的普及以及计算机网络的广泛应用,让普通人能够接触到比以往更多的知识。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于B/S结构的Java串口通信
【摘要】本文介绍的是数字粮库信息化软件系统的智能通风模块,系统建设了一个综合性多功能的粮库信息化管理网络平台。

平台系统基于B/S结构,实现在线业务处理、信息发布、智能控制的目的。

其中通风模块的通风状态检测,通过串口发送指令控制通风设备,接收串口指令显示通风设备状态。

系统在Java 程序中使用comm.jar开发包编程实现串口通信。

【关键词】智能通风;状态监控;Java串口通信
引言
Java由于具有开放性、平台无关性和面向对象等特性,使之成为一个理想的软件开发平台[1]。

因此智能通风[2]模块与下位机的通信方式选择RS232串口通信。

本文使用Java开发基于B/S结构的智能通风状态监控串口通信程序,具有很强的实用意义。

1.智能通风结构模式
智能通风模块的物理结构为B/S(Browser/Server)模式,即浏览器/服务器模式,用户可联网通过Web浏览器访问系统,连接服务器对各通风设备进行监控维护。

服务器通过串口与通风设备进行通信,其流程如图1所示。

进入页面,发送状态查询数据帧查询通风设备状态。

若超过T0时间则提示响应失败。

在T0时间内设备有响应则分析返回数据帧显示各通风设备的状态。

用户点击通风设备图标,发送操作数据帧,在T0时间内通风设备进行响应,并返回数据。

如果通风设备操作成功则提示操作成功,否则提示操作失败。

若超过T0时间则提示响应失败。

图1 程序流程图
2.通风设备通信协议
智能通风通信协议[3]以帧为基本单元传输的,每帧由帧头、装置地址、报文命令码、报文长度、正文、累加和及结束符等组成。

每个域由一定字节组成。

其中读写寄存器的通信协议采用Modbus协议。

其命令帧格式如图2所示。

图2 读写寄存器帧数据格式
3.智能通风设备监控
智能通风设备监控模块如图3所示,通过选择仓号显示该仓号通风设备的
状态,通风设备有通风窗、轴流风机、离心风机和空调等。

点击图中通风设备图标可控制设备的开关。

模块采用MVC框架模式,所谓MVC是一种使用MVC(Model View Controller模型-视图-控制器)设计创建Web应用程序的模式。

页面通过JSP调用javascript文件。

Javascript通过Ext.Ajax.request方法向服务器端发送一个http 请求,并可以在回调函数中处理返回的结果。

Javascript通过url:/zntf_ztjk/updateZtjk连接ZtjkController.java文件,该java文件进行初始化串口,读写串口以及处理数据操作。

4.Java串口通信技术实现
Sun的J2SE没有直接提供串行通讯协议的开发包,而是以独立的jar包形式发布的comm.jar[4],称之为Java(tm)Communications API,是J2SE的标准扩展。

提供对RS-232串行端口通讯的支持。

Java读写串口过程主要是调用m包中的comm API函数。

在m包中串口的输入输出操作是数据流形式,在初始化串口波特率和数据位的同时,将输入输出流和该串口建立一个映射,串口的输入输出操作就直接反映在输入流和输出流上。

通过CommPort类的getInputStream()和getOutputStream()方法即可分别取得端口的输入流和输出流。

串口操作主要包括初始化串口、读写串口和关闭串口等操作。

初始化串口操作SB.Initialize()打开串口并配置串口,如果初始化成功返回1,否则返回-1。

打开串口需确定串口号和打开方式。

首先使用m. CommPortIdentifier类确定是否有可用的通信端口以及为IO操作打开通信端口。

其中getPortIdentifier 对象得到系统端口列表,open 方法可以返回一个CommPort对象。

open方法有两个参数,第一个是String,通常设置为应用程序的名字。

第二个参数是时间,即开启端口超时的毫秒数。

当端口被另外的应用程序占用时,将抛出PortInUseException异常。

接着使用setSerialPortParams方法配制串口静态成员变量波特率、数据位、数据停止位和奇偶校验。

读写操作使用SB.WritePort(SendMsg)和RevMsg=SB.ReadPortX()函数中使用in=serialPort.getInputStream()从端口读取数据以及out=serial-
Port.getOutputStream()往端口写数据。

5.结束语
本文介绍了智能化粮库系统中的通风模块,模块通过发送接收串口通信数据包进行监控通风设备状态以及控制通风设备开关闭合。

系统使用Java的
Comm.jar开发包实现串口通信比较简单,可移植性好,具有一定的实用性。

参考文献
[1]周海涛,高兴锁,江晓峰.基于java数据采集串口通信的设计和实现[J].微计算机信息,2006(4):141-142.
[2]陈德发,秦维平,马飞.智能通风技术在高大平房仓中的应用[J].粮油仓储科技通讯,2014,30(1):29-31.
[3]钱伟青,张茂青,宦洪才,彭芳.基于Modbus协议的智能通风系统[J].电气时代,2006(8):110-112.
[4]伍祥生,王克宏m API规范及其功能[J].微型机与应用,1999,18(6):38-40.。

相关文档
最新文档