最近一个新项目由于涉及到后台插数据时需要前台页面自动刷新显示,即使前台Web应用页面没有显示出来也需要进行显示,这中间即涉及后台数据库操作,又涉及中间逻辑处理,还涉及到前台页面展示,可以说是一个小应用了,很具有“典型”,最后贴下代码,说下思路,仅供参考。(黑色为大众语言,对于一般群体可速看下。红色为具体代码,对于那些真正操作者来说可以看看。蓝色为设计思路,对于那些神马大牛不需要写代码的,只需指挥大家的,可细看下。)
既然是数据库有改动时需要通知前台,首先触发器是必不可少的。触发器部分代码如下:语言种类为PL/SQl
create or replace trigger TAB_AC_LOG_INSERT
after insert OR UPDATE on tab_ac_log
for each row
declare
temp varchar(20);
ip varchar(20);
port number;
begin
select WEBHOST_IP into ip FROM TAB_MSG_HOST where rownum = 1;
select WEBGISHOST_PORT INTO port FROM TAB_MSG_HOST where rownum = 1;
select sendMessage(
'AcLogMess:In:Prison:Triggers',
ip,
PORT)
into temp
from dual;
end TAB_AC_LOG_INSERT;
代码说明:tab_ac_log为表的名字,在begin和and里,我们调用了一个名为sendMessage的函数,这函数需要三个参数,第一个是一个说明,因为可能有多个页面需要实时刷新显示,据此参数可判断是哪个页面。第二三个参数分别为服务器的IP,端口号。
数据库里sendMessage函数定义:
create or replace function sendMessage(name VARCHAR2,ip VARCHAR2,port NUMBER) return VARCHAR2
as language java name
'SocketSend.Message(java.lang.String,java.lang.String,int) return java.lang.String';
接下来要说的是前台JSP页面,在此页面主要是设置一个定时器,定时调用中间逻辑业务处理并且处理返回数据(根据返回数据决定是否刷新页面)页面代码如下所示:语言种类为javascript
function setBaojing()
{
setTimeout("getResult()",2000);
}
function getResult()
{
var flag = new Date();
var url = "./main.do?method=topAjax&isAlarm=1&zheshiyigebiaoz0hiwei=" + flag.getTime();
if (window.XMLHttpRequest)
{
req = new XMLHttpRequest();
}else if (window.ActiveXObject)
{
req = new ActiveXObject("Microsoft.XMLHTTP");
}if(req)
{
req.open("GET",encodeURI(url),true);
req.onreadystatechange = complete;
req.send(null);
}
setTimeout("getResult()",2000);
}
function complete()
{
if (req.readyState == 4)
{
if (req.status == 200)
{
// 获得报警信息
var result = req.responseText;
if(result.length < 300){
var alerm = result.split("20100920");
info = alerm[0];
setLink(alerm[0]);
flashword();
setDisk(alerm[1]);
//setACLog(alerm[0]);
}
}
}
}
代码说明:以上javascript里我们URL访问了一个地址,此地址估计大家也都猜到了,就是我们中间逻辑处理的入口。
且看中间逻辑业务处理代码:语言种类为java
public ModelAndView topAjax(HttpServletRequest request,HttpServletResponse res){
ModelAndView mav = new ModelAndView();
SocketServer socket = SocketServer.getJmsServer();
socket.setClientSession(request.getSession().getId(), request.getSession().getLastAccessedTime());
String flagString = socket.getFlag();
try {
// 取得打印输出
PrintWriter printWriter = res.getWriter();
if(flagString != null && !flagString.equals(""))
{
// 如果数据库已更新,将更新数据发送到页面
//System.out.println("MainCtrl.topAjax()"+flagString);
printWriter.print(flagString);
}else
{
//如果数据未更新
printWriter.print("nothing");
}
printWriter.close();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
mav.setViewName("top");
return mav;
}
代码说明:这里主要是接受处理Oracle里sendMessage发送过来的消息。 具体是保存到flagString变量里,并且通过printWriter.print(flagString)函数把值交给前台页面定时器来处理。
慢慢长征路,据此只差最后“一跃”,相信大家也都知道了,就差前台页面来处理返回的数据了。
前台页面代码如下所示:语言种类为javascript
function setLink(result)
{
var split = result.split(":");
var alarm;
var hrefDate;
var hrefTime;
var cphm;
if(split.length == 5)
{
$("#mainFrame",parent.document.body).attr("src","client.do?method=linkXxlr&msg="+encodeURI(encodeURI(split)));
}else if(split.length == 4)
{
$("#mainFrame",parent.document.body).attr("src","statistic.do?method=linkPersonEventRecord");
}
else{
return;
}
var html = "<a href='" + encodeURI(href,"iso8859_1") + "' id='texiao' target='right' onclick='clearAlarm()' name='texiao'>" + alarm + "</a>";
document.all.baojing.innerHTML = html;
document.all.imgalarm.innerHTML="<img src='"+alarmType[split[4]]+"' height='20px' align='bottom' style='padding-top:0px;padding-bottom:0px;border: 0'>";
}
代码说明:大家可能有变量点迷糊了,现在大家可以回头去看上面说的前台页面部分,其中有一处调用了setLink函数,在setLink函数里,我们有变量split,这个变量保存的即时数据库senMessage中的第一个参数,我曾经说过,第一个参数是用来判断哪个表发生变化,哪个页面需要显示的,在此split中的值是 'AcLogMess:In:Prison:Triggers',长度为4时,我在此发送了一个请求,此请求即为刷新页面的URL,至此就可以刷新页面实时显示了。
看过了这些,是不是觉得很多不可思议的事都可以发生呢?事实上他就是发生了,至于你信不信,我反正是信了。
相关推荐
使用触发器来查看登录 Oracle 数据库用户记录有很多优点。首先,触发器可以自动记录用户的登录行为,无需手动记录。其次,触发器可以实时记录用户的登录行为,提供了实时的数据库访问信息。最后,触发器可以帮助...
使用UltraWebGrid控件在网页上展示Oracle数据库表结果数据.pdf 在本文中,我们将讨论如何使用Infragistics公司的NetAdvantage WebClient 2009.1组件中的UltraWebGrid控件在网页上展示Oracle数据库表结果数据。该...
总结来说,"Oracle数据库表结构导出工具Excel"通过DBExport软件实现,能够有效地帮助数据库管理员和开发人员快速获取和分享Oracle数据库的表结构信息。通过阅读DBExport的使用手册,用户可以学会如何利用这个工具...
在开发基于.NET框架的应用程序,特别是使用C#语言时,通常需要将数据库中的表结构映射到C#对象,这些对象被称为实体类。这有助于实现对象关系映射(ORM),简化数据访问并提高代码的可读性和可维护性。 "Oracle...
Oracle数据库表转换为Mysql是指将Oracle数据库中的表结构转换为Mysql数据库中的表结构,以便在Mysql数据库中使用。这种转换可以使用PowerDesigner工具来实现。 一、Oracle数据库表结构导出 首先,需要使用Oracle...
Java 导出 Oracle 数据库数据 Java 是一种流行的编程语言,广泛应用于各种领域。Oracle 是一种关系数据库管理系统,广泛应用于企业级应用中。在实际项目中,数据备份和恢复是非常重要的工作。本文将介绍如何使用 ...
Oracle数据库表结构导出器是一套用来完成将Oracle数据库中的表结构导出成Word文档,并输出标准的打印报表格式的软件。亲测oracle绝对好使 ,另附有链接信息,请先看好说明再操作.不会的加我qq87611894
### Oracle数据库、表空间及数据文件之间的关系 在Oracle数据库管理系统的架构中,数据库、表空间与数据文件之间存在着紧密的联系。理解这些组件之间的相互作用对于有效地管理和维护Oracle数据库至关重要。 #### ...
在本项目中,我们主要探讨如何使用C#编程语言在Visual Studio 2010(VS2010)环境中与Oracle数据库进行交互,包括基本的CRUD(创建、读取、更新、删除)操作以及在用户界面上的数据显示。以下是对这个主题的详细解析...
在本教程中,我们将深入探讨如何利用Struts2来实现对Oracle数据库的CRUD(创建、读取、更新和删除)操作。 首先,我们需要在项目中集成Struts2框架。这通常涉及到以下几个步骤: 1. 添加Struts2的核心库到项目的类...
在Oracle数据库中实现这样的系统,需要进行数据库设计,包括实体关系模型(ER模型)的构建,确定数据表的结构、字段、主键和外键等关键元素,以确保数据的一致性和完整性。 在PPT中,可能详细阐述了需求分析、系统...
Oracle数据库中有多种类型的日志文件,包括但不限于: 1. **后台进程日志(Background Dump Files)**:这些日志文件通常包含系统错误信息,可以帮助诊断系统级的问题。 2. **Alert日志文件**:用于记录重要的警告...
Oracle数据库表结构导出成Word文档工具(带源码下载) 修改了一下数据库的连接方式:由于我安装的是win764位+office64+oracle client 32位,用MSDAORA.1无法连接,所以将MSDAORA.1换为OraOleDb.Oracle.1,换后正常连接...
在开发、文档编写或分享数据库设计时,有时我们需要将Oracle表结构导出到更便于阅读和分享的格式,比如Microsoft Word文档。这个过程可以帮助团队成员更好地理解数据库结构,也可以作为备份或审计的参考。 "oracle...
易语言连接Oracle数据库时,主要依赖两个关键组件:数据库连接和记录集。数据库连接组件用于建立与Oracle数据库的物理连接,而记录集组件则负责在程序中操作数据,如查询、插入、更新和删除记录。 1. 数据库连接...
oracle数据库导入、导出数据、创建表空间、创建用户、用户授权等操作