基于JSP技术进行信息交互的研究与应用
摘 要 从信息交互的方式着手,结合开发项目中遇到的实际问题,本文总体上将JSP动态网页上信息交互分三种情况说明和探究,即信息在同一页面中、两个不同页面之间或多个不同页面之间的动态交互,分别给出不同的解决方法和对应实例。
关键词 交互;内置对象;JSP
1 引言
随着网络技术和教育信息化的飞速发展,用户对Web页面的需求也不断提高,且网页上的信息日趋丰富,网页间信息交互性越来越频繁;动态Web页面的内容是基于用户的请求或系统的状态所产生的动态页面。生成动态页面需要一定的技巧,其关键在于处理好页面间信息的交互,以达到信息共享的目的。本文结合实际开发的“航空公司机务维修预警专家系统”项目,对JSP应用中的信息交互技术进行了深入探讨。
1.1 JSP技术及优点
JSP技术是用JAVA语言作为脚本语言的,JSP网页为整个服务器端的JAVA库单元提供了一个接口来服务于HTTP的应用程序, 是基于JAVA 、Servlet以及整个JAVA体系的Web开发技术。与其它传统动态网页语言相比,JSP主要有以下一些优点[1,2] :
① 所有的应用都是基于服务器的,所以它们可以时刻保持最新版本;
② 分离了应用程序的逻辑和页面显示,用户界面的更新很快;
③ 可扩展的标签技术,且组件方式更方便;
④ JSP的效率和安全性更高,简化了开发基于Web的交互式应用程序的过程。
1.2 JSP动态网页间的信息交互
基于JSP的动态信息发布技术是一个开放的、可扩展的建立动态Web页面的标准。不论采用什么创建工具,开发人员都可以使用JSP页面来创建可移植的Web应用,在不同的Web应用服务器上运行[3,4] ,这都有利于信息的交互。
在具体的交互过程中,相关网页的变化遵循消息驱动模型,即通过信息不断地在信息载体之间交互,相互通告各自的变化;根据信息传递及动态网页相对关系的不同,将动态网页上信息交互分为三种情况:① 同一页面中进行信息的交互;② 两个不同页面之间进行的信息交互;③ 多个页面之间进行的信息交互。
2 动态网页间信息的交互技术
2.1 同一页面中进行信息交互
在同一页面内,首先会借助脚本全局变量可以实现信息在JSP同页面程序内信息共享与元素间的交互,但实际应用中经常会遇到从动态页面链接到本页或者从本页响应不同事件等操作,以下给出解决方法和对应的实例。
方法:借助浏览器的内部对象系统和JavaScript脚本实现本页面内不同Web元素之间的信息交互。
实例:以开发的“航空公司机务维修差错预警专家系统”中的“维修差错预控”子模块进行差错诱因分析为例,差错诱因分析页面analyze.jsp,其实际界面如图1所示。
图1
在本页进行信息交互时主要涉及两个方面,一是选择有或无事件差错名称时本页相应表格中立即显示出事件类型、差错第一和第二类型以及差错的诱因信息;二是出现多个差错相关的诱因,专家分析并选定下面的诱因后,怎样识别专家到底选择哪几个诱因。
解决方案:当点击选择“有事件差错名称”下拉按钮时,结合JavaScript脚本,将响应chg type()事件,主要代码是:
var events_name= document.frm.events_name.value;
location.href ='analyze.jsp?events_name='+events_name;
通过选择将有事件差错名称(events_name)的值传递到本页(analyze.jsp),以便本页后面脚本读取,并从数据库中调出与该事件名称相应的第一、二差错类型和需要分析的诱因信息。另外,当分析选择不同诱因时,要知道有多少个诱因被选中的情况下,同样是响应choice()事件,主要代码是
var I= document.frm.I.value; I=I+1;
var events_name= document.frm.events_name.value;
location.href='analyze.jsp?events_name='+events_name+ '&I='+I;
当选择一个诱因时,相应I值就要加1,这里I用的是在动态页面的表单中用到隐藏式的页面控件,让处理页面知道本次分析有多少个诱因引起相应的差错。
总之,这两个看似不同的功能的操作,所使用的却是同样的方法,给合JavaScript脚本来响应相应的事件,达到本页信息交互的目的。
2.2 两个不同页面之间进行信息交互
方法一:表单的ACTION属性将参数及其值提交到目的网页,发出请求后,借助request的方法获取参数名称及其值;提交的信息仅在请求页和响应页中有效。
实例:以“维修差错预控”子模块进行不安全事件信息录入为例,用户输入发生事件的原始信息,提交后在处理页面中将其存储到知识库中,这是两页面之间进行信息交互最常见的问题。
解决方案:在events.jsp(不安全事件信息录入页面)中提供录入信息界面,让一般用户输入发生事件的原始信息,提交后传送到events_deal.jsp(不安全事件处理页面)页面,获取提交的信息后并存储到数据库中。
录入页面events.jsp中主要代码:
事件名称: *
事件发生主要地点: *
…………
处理页面events_deal.jsp中主要代码:
String events_name=check.toChinese(request.getParameter("events_name"));
String events_place=check.toChinese(request.getParameter("events_place"));
总之,该方法主要是在提交页面输入信息,在处理页面通过request的方法获取参数名称及其值,然后对这个进行加工处理,从而到达在两个页面进行信息交互的目的。
方法二:在JSP网页中访问Bean,使用JSP标签把结果显示为动态内容。JavaBeans是一种基于Java的软件组件,通过封装业务逻辑建立一整套可重复利用的对象库。JavaBeans组件用来执行复杂的计算任务、负责与数据库的交互或数据提取等功能;Bean有作用范围:单一页面、一次请求、会话,或整个应用程序;在此将Scope属性置为Request 域,实现两个不同页面间交互信息。
实例:专家系统在进行知识库管理时,存在子模块“差错规则管理”,其主要功能是进行差错规则知识库的管理。在进行新规则录入时,涉及的录入信息比较多和相关的安全性因素,用JavaBeans方式比较好。图2是新规则录入界面(ruleInput.jsp)。
图2
解决方案:以交互“差错第一类型”值为例进行说明, ruleInput.jsp将提交前台信息,然后由处理页面ruleInput_deal.jsp通过JavaBean获取数据信息后再进行处理。提交过程中获取数据的ModDB.java的主要代码为:
private String condition1="";
public void setCondition1(String condition1){this.condition1 =condition1; }
public String getCondition1(){return condition1; }
在新规则录入处理页面ruleInput_deal.jsp中引用:
动作指令的作用是定义生成和使用Bean的环境,给合,通 过页面输入的所有值来匹配Bean的属性,设置scope范围属性为request,直到执行完转向另一页面文件为止。在处理页面中获取所提交值的主要代码:
String condition1=ModDb.getCondition1(); //ModDb为Bean的标识名;
总之,以上方法是通过前台页面提交信息,处理页面用JavaBeans处理,达到两不同页面间信息交互的作用。
2.3 多个页面之间进行的信息交互
方法一:当客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面。借助内置对象会话,会话为不同的用户保存不同的数据信息,在一次连接中始终有效的信息放在会话对象中保存。在网页中直接使用隐含的会话变量,通过会话的两种方法分别设置和获得请求所在的会话。
实例:在开发“航空公司机务维修预警专家系统”过程中,出现这样的问题,各种页面中可能要显示用户的用户名和相应的身份,这是在多个页面中信息交互和共享的问题。
解决方案:当用户在主页(index.jsp)中经校验登录到系统中后,在Index_deal.jsp(主登录处理页面)中设置会话信息:
session.setAttribute("user_name",user_name); //用户名
session.setAttribute("work_card",work_card); //以工作卡号代表用户密码
在其它需要显示登录用户名与身份的网页中:
用户名:<%=session.getAttribute("user_name")%> //读取数据,以便显示不同身份的用户
总之,session变量可用于保存当前用户的当前会话,该变量可设定在整个会话期间使用,从而实现一次会话相关的多页面间的信息交互,这为后面不同模块中验证用户身份提供了方便。因为太多session很消耗服务器资源,应尽量少用。
方法二:application内置对象封装了Web应用中的所有Servlet JSP页面、html页面和其它资源的集合属性,使用该对象进行参数存取和信息交互。它与会话不同的是所有用户的对象都是一个。
实例:在专家系统中,有三种不同用户(系统管理员,一般用户,机务维修专家),不同的用户完成系统中不同的功能模块,例如一般用户进行各种差错信息录入、查询差错、等,机务维修专家进行知识库进行管理;在不同的用户不同时间登录后,要对访问网站的各种用户进行计数统计。
解决方法:application内置对象是存放代表当前计数值的理想场所,通过该对象的setAttribute()和getAttribute()方法提供了存取对象中变量的功能。主要代码如下:
Long counter =new Long(0);
application.setAttribuite(“counter”,counter);
counter=(Long) application.getAttribute(“counter”);//在不同页面内显示的访问数
总之,借助内置对象application保存与服务器连接的所有客户端共享的数据信息,在servlet程序中调用config的getServletContext()方法可获取隐含的application对象的一个同步拷贝使用,达到在同一服务器上的多页面间的信息交互,当然,存取application对象中的属性必须考虑访问冲突,与该内置对象相联系的是ServletContext类,因为它实现的是应用程序级别的数据交互,所以设计应考虑其功耗问题。
3 结束语
以上所提到的实现方法和技巧是结合开发“航空公司机务维修预警专家系统”项目实践的总结,具有一定的实用价值和参考价值。从三个方面对信息交互方式进行了分类和探讨,同一页面中可借助浏览器的内部对象系统实现本页面内不同Web元素之间的信息交互;两个页面之间可用表单的ACTION属性将参数及其值提交到目的网页、或在JSP网页中直接访问Bean再使用JSP标签把结果显示为动态内容;多页面之间信息交互可根据不同需求使用相应的内置对象。在开发其它基于B/S结构的各种应用程序时,这些方法不是孤立的使用,根据各种项目的实际需要进行灵活运用和扩展。
参考文献
[1] 王国辉、李文立、杨亮. JSP数据库系统开发完全手册. 北京:人民邮电出版社, 2006
[2] 马斗、邱哲、王俊标. 专家门诊——JSP开发答疑.北京: 人民邮电出版社,2005
[3] 阮家栋、陈美雅. Web 数据库技术. 北京:科学出版社, 2002
[4] 汪晓平,俞俊,李功.精通Java网络编程[M]. 北京:清华大学出版社,2005
国家自然基金项目:民航灾害预警机理与方法研究,批准号:70371034
作者简介: 胡启实,男,硕士研究生在读,就读于武汉理工大学计算机科学与技术学院,研究方向:计算机智能技术;高曙,女,研究生导师,研究方向:计算机网络与分布式处理,人工智能与AGENT技术,智能信息处理。