前台页面如何实现Oracle数据库表有…
2013-04-08 19:44
113 查看
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
最近一个新项目由于涉及到后台插数据时需要前台页面自动刷新显示,即使前台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,至此就可以刷新页面实时显示了。
看过了这些,是不是觉得很多不可思议的事都可以发生呢?事实上他就是发生了,至于你信不信,我反正是信了。
最近一个新项目由于涉及到后台插数据时需要前台页面自动刷新显示,即使前台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,至此就可以刷新页面实时显示了。
看过了这些,是不是觉得很多不可思议的事都可以发生呢?事实上他就是发生了,至于你信不信,我反正是信了。
相关文章推荐
- 如何实现省市区三级联动的效果(从前台页面、后台、数据库详细阐述)
- 如何利用反射机制实现前台页面共用一个servlet文件
- jsp页面中如何实现获取后台传来的list数组
- 如何实现footer自动适应的页面布局
- 关于如何实现在整合struts2和hibernate4框架下实现many-to-one级联数据表在JSP页面中的输出
- 按下按钮后页面的滚动条向下(或向上)滑动,松开之后便停留在当前位置的效果如何实现?
- webSocket 如何实现服务器端 想页面推送实时数据? 动态数据?如何进行连接?
- 如何实现"请等待..."页面?
- Asp.net中如何实现后台控制前台的跳转
- JSP页面中如何用select标签实现级联
- 大家很容易忽视的几个问题,1.投简历请换位思考、2.前台页面设计比后台实现更值钱
- 如何实现页面滚动到下面再加载
- 把页面分成左右两个,如何实现在左侧点击,链接一个页面到右边的页面
- 如何实现“返回顶部”的页面效果
- 如何实现页面的打印版本
- AppCan(2)在页面如何实现 左上角箭头 < 作为返回按钮
- 如何实现在页面上所有内容加载完之前一直显示loading...页面?
- 如何实现页面在线预览PDF文档
- Android如何实现对APP是否处于前台的判断?
- 如何在asp.net页面上放置的控件上实现左右键菜单,同时对之操作(1)