关于使用DWR框架的反向Ajax技术时,服务器只访问了一次我自己的业务方法,其他的都在访问dwr/call/plainpoll/ReverseAjax.dwr

ganchunsaixx 2012-08-20 11:20:26
目前想做这样一个功能:
实时显示数据库的情况,也就是数据库增、删、改、查后能将数据实时的显示到页面。
使用DWR2.X的推技术。

数据库的数据如下:
编号 姓名 年龄 家庭地址
1 张三 18 广东省广州市天河区
2 李四 18 广西省贵港市
3 齐铭 18 云南省昆明市

[code=web.xml][/code]
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<!-- 推送 -->
<servlet>
<servlet-name>dwr-studentcomet-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>

<!-- DWR默认采用piggyback方式 -->

<!-- 使用polling和comet的方式 -->
<init-param>
<param-name>pollAndCometEnabled</param-name>
<param-value>true</param-value>
</init-param>

<!-- comet方式 -->
<init-param>
<param-name>activeReverseAjaxEnabled</param-name>
<param-value>true</param-value>
</init-param>

<!-- polling方式:在comet方式的基础之上,再配置以下参数 -->
<init-param>
<param-name>org.directwebremoting.extend.ServerLoadMonitor</param-name>
<param-value>org.directwebremoting.impl.PollingServerLoadMonitor</param-value>
</init-param>

<!-- 毫秒数。页面默认的请求间隔时间是5秒 -->
<init-param>
<param-name>timeToNextPoll</param-name>
<param-value>1000</param-value>
</init-param>

<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>dwr-studentcomet-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
</web-app>


[code=dwr.xml][/code]
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
"http://getahead.ltd.uk/dwr/dwr20.dtd">

<dwr>
<allow>
<create javascript="DWRMethod" creator="new" scope="application">
<param name="class" value="biz.StudentBiz"></param>
<include method="getStudents"/>
</create>
<convert converter="bean" match="bean.*" />
<convert converter="list" match="java.util.List" />
</allow>
</dwr>

[code=Student.java(javabean)][/code]
package bean;

import java.io.Serializable;

public class Student implements Serializable {

public Student() {
super();
}

public Student(int stuId, String stuName, int stuAge, String stuAddress) {
this.stuId = stuId;
this.stuName = stuName;
this.stuAge = stuAge;
this.stuAddress = stuAddress;
}

public int getStuId() {
return stuId;
}
public void setStuId(int stuId) {
this.stuId = stuId;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public int getStuAge() {
return stuAge;
}
public void setStuAge(int stuAge) {
this.stuAge = stuAge;
}
public String getStuAddress() {
return stuAddress;
}
public void setStuAddress(String stuAddress) {
this.stuAddress = stuAddress;
}

private int stuId;
private String stuName;
private int stuAge;
private String stuAddress;
}


[code=StudentBiz.java][/code]
package biz;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.locks.ReentrantLock;
import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.proxy.dwr.Util;
import dao.DBConnection;
import bean.Student;

public class StudentBiz {
private static ReentrantLock lock = new ReentrantLock();

public void getStudents(){
Connection con = DBConnection.getConnection();
Statement sm = null;
ResultSet rs = null;
List<Student> studentliList = new ArrayList<Student>();

System.out.println("----------");
try {
//获取锁定
lock.lock();
String sql = "SELECT * FROM STUDENT";
sm = con.createStatement();
rs = sm.executeQuery(sql);
while(rs.next()){
Student s = new Student(rs.getInt("stu_id"),rs.getString("stu_name"),rs.getInt("stu_age"),rs.getString("stu_address"));
studentliList.add(s);
}
DBConnection.close(con,sm,rs);
} catch (Exception e) {
e.printStackTrace();
}finally{
//释放锁定
lock.unlock();
}
System.out.println("1、获得DWR上下文");
WebContext webContext = WebContextFactory.get();

System.out.println("2、获取当前页面的URL");
String currentPage = webContext.getCurrentPage();

System.out.println("3、当前脚本session");
ScriptSession scriptSession = webContext.getScriptSession();

// System.out.println("4、设置页面控件的值");
// Util util = new Util(scriptSession);
// util.setValue("text", ""); //清空页面控件的值

System.out.println("5、设置脚本session的属性值");
scriptSession.setAttribute("list", studentliList);

System.out.println("6、获取脚本session的属性值");
for(Iterator it = scriptSession.getAttributeNames(); it.hasNext();){
String attributeName = (String)it.next();
System.out.println(attributeName + "=" + scriptSession.getAttribute(attributeName));
}

System.out.println("7、获取所有浏览但前页面的脚本session");
Collection<ScriptSession> sessions = webContext.getScriptSessionsByPage(currentPage);

System.out.println("8、--------");
Util allUtil = new Util(sessions);

System.out.println("9、执行客户端脚本");
ScriptBuffer script = new ScriptBuffer();
script.appendScript("clientFunction(")
.appendData(scriptSession.getAttribute("list"))
.appendScript(");");

System.err.println("10、-------");
for(ScriptSession session : sessions){
session.addScript(script);
}

/*System.out.println("11、更新这些脚本session的一些元素");
for(int i = 0; i < studentliList.size(); i ++){
Student su = studentliList.get(i);
allUtil.setValue("id", String.valueOf(su.getStuId()));
allUtil.setValue("name", su.getStuName());
allUtil.setValue("age", String.valueOf(su.getStuAge()));
allUtil.setValue("address", su.getStuAddress());
}
/*allUtil.removeAllOptions("messages");
allUtil.addOptions("messages", studentliList, "id", "text");*/
}
}

[code=jsp][/code]
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>学生信息</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript" src="<%=path %>/dwr/util.js"></script>
<script type="text/javascript" src="<%=path %>/dwr/engine.js"></script>
<script type="text/javascript" src="<%=path %>/dwr/interface/DWRMethod.js"></script>
<script type="text/javascript">
var functions = [
function(data){return data.stuId;},
function(data){return data.stuName;},
function(data){return data.stuAge},
function(data){return data.stuAddress}
];
function sendMessage() {
DWRMethod.getStudents();
}
function clientFunction(returnStr){
//document.all.view.value="已经广播给所有看到这个页面的用户了"+returnStr
DWRUtil.removeAllRows("mytbody");
DWRUtil.addRows("mytbody",returnStr,functions);
}
window.onload = function(){
dwr.engine.setActiveReverseAjax(true);
sendMessage();
}
</script>
</head>

<body>
<table id="mytab">
<thead>
<tr>
<td>
编号
</td>
<td>
姓名
</td>
<td>
年龄
</td>
<td>
家庭地址
</td>
</tr>
</thead>
<tbody id="mytbody">
</tbody>
</table>
<input id="inputButton" type="button" value="访问DWR" onclick="sendMessage()" />
</body>
</html>


代码大概就是这些了
现在出现的问题是:
当首次进入到页面时,能访问到我的业务方法getStudents();
地址是:http://localhost:8080/DWRDemo/dwr/call/plaincall/DWRMethod.getStudents.dwr
然后观察FF的控制台,当访问一次我的业务方法后,服务器一直都在访问
http://localhost:8080/DWRDemo/dwr/call/plainpoll/ReverseAjax.dwr
请问这是什么个情况,请指点,谢谢!!!


















...全文
568 回复 打赏 收藏 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文围绕基于电感电容电流环PI与前馈补偿矩阵构造的跟网型储能变流器,开展dq坐标系下的阻抗理论建模与Simulink仿真对比研究。通过建立储能变流器在dq域的数学模型,设计包含电感电流内环、电容电流中间环和电压外环的多环控制结构,并引入前馈补偿矩阵以提升系统的动态响应能力和稳定性。在此基础上,采用小信号分析法推导系统的输出阻抗模型,构建完整的dq域阻抗理论框架,并利用Simulink平台搭建高保真仿真模型进行频域扫频验证,实现理论建模与仿真结果的精确对比,深入分析控制参数对系统阻抗特性的影响规律,揭示其在抑制并网系统振荡、提升稳定性方面的关键作用,为新能源并网系统的稳定性分析与优化设计提供坚实的理论支撑和技术路径。; 适合人群:具备电力电子、自动控制理论基础,从事新能源发电、储能系统、微电网或电力系统稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握跟网型储能变流器在dq域的阻抗建模方法;②理解多环控制与前馈补偿对系统阻抗特性的影响机制;③实现理论阻抗模型与Simulink仿真扫频结果的对比验证,支撑并网稳定性分析。; 阅读建议:学习者应结合控制理论与电力电子变换器知识,重点关注数学推导与仿真建模的一致性,建议动手复现Simulink仿真模型并进行参数敏感性分析,以深化对阻抗重塑机理的理解。
内容概要:本文介绍了基于Matlab实现的基本雷达与干扰机仿真系统,旨在通过代码实践帮助读者深入理解雷达系统的工作原理及其在复杂电磁环境中与干扰机的相互作用机制。内容涵盖雷达信号的发射、传播、目标回波接收、微多普勒效应建模、干扰信号的生成与影响分析等关键环节,结合具体的Matlab代码实现了完整的仿真流程,并提供了详尽的结果可视化与性能评估,重点展示了目标探测、时频特征提取、干扰抑制策略等关键技术的实现方法,有助于掌握雷达系统动态特性与抗干扰能力的分析手段。; 适合人群:具备一定Matlab编程基础,对雷达系统、信号处理、电子对抗或通信工程等领域感兴趣的高校学生、科研人员及工程技术人员。; 使用场景及目标:①学习雷达系统的基本构成与工作流程;②掌握雷达回波信号与典型干扰信号(如噪声干扰、欺骗干扰)的数学建模方法;③通过Matlab仿真深入理解微多普勒特征、时频分析技术(如STFT、小波变换)及干扰抑制算法;④为开展雷达目标识别、抗干扰算法设计或电子战系统仿真等前沿研究奠定实践基础。; 阅读建议:建议读者结合提供的Matlab代码逐段运行并调试,重点关注雷达信号模型、目标运动建模、干扰生成模块及信号处理流程,配合文中仿真结果进行对比分析;同时可延伸学习现代信号处理技术如压缩感知、机器学习在雷达中的应用,以提升综合科研与工程实践能力。
基于星形耦合自均流机制的双三相LLC变换器变频调压与多模式切换控制策略研究(Simulink仿真实现)内容概要:本文研究了一种基于星形耦合自均流机制的双三相LLC变换器,重点探讨其变频调压与多模式切换控制策略,并通过Simulink进行仿真实现。该研究旨在解决双三相LLC变换器在不同工作模式下电流不均衡、电压调节不稳定等问题,通过引入星形耦合结构实现自动均流,提升系统效率与可靠性。文中详细分析了变频控制对谐振变换器输出电压的调节机理,设计了多模式平滑切换策略以适应负载变化,确保系统在轻载、重载及瞬态工况下的高效稳定运行。同时,建立了完整的Simulink仿真模型,验证了所提控制策略在动态响应、稳态精度和抗干扰能力方面的优越性。; 适合人群:从事电力电子与电力传动、新能源变换技术及相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高效率、高可靠性的直流电源系统设计,如电动汽车充电、数据中心供电等;②为多相LLC谐振变换器的均流控制与模式切换提供理论支持和技术方案;③适用于需要高性能电源变换器的工业应用场景,推动先进控制策略在实际系统中的落地应用。; 阅读建议:读者应具备一定的电力电子电路与控制系统基础知识,建议结合Simulink仿真模型同步学习,深入理解控制逻辑的设计细节与参数整定方法,并可通过修改仿真参数验证不同工况下的系统性能,以增强实践理解和创新能力。

87,984

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧