我正在使用Direct Web Remoting(DWR)JavaScript库文件,我只在Safari(桌面和iPad)中收到错误
它说
超出最大调用堆栈大小.
这个错误究竟是什么意思,它是否完全停止处理?
对Safari浏览器的任何修复(实际上iPad Safari,它说
JS:执行超过了超时
我假设是相同的调用堆栈问题)
我想在一个简单的Web应用程序中添加一些Comet /服务器推送功能.我无法找到有关如何执行此操作的最新信息.
有人能指出我使用Comet with Spring MVC的一些示例,教程,博客或最近的任何内容吗?
如果它很重要,我使用Freemarker来渲染视图,使用JQuery来构建JavaScript框架.
旁白:我已经了解了Lift及其内置的强大Comet支持.这个应用程序是我已经使用Lift实现的概念证明.现在我用Spring MVC构建它来进行比较和对比.
编辑:我已经开始尝试DWR了.这不是太棒了,但我能做出有用的东西.我也检查了Atmosphere,但我根本无法获得任何牵引力.
我要打开这个问题了.希望会有更好的建议.
在Java中,我们使用JAXB2进行了大量工作.对象< - > XML映射在Java类中定义为注释:
@XmlRootElement(name="usertask", namespace="urn:test")
public class UserTask
{
@XmlElement(namespace="urn:test")
public String getAssignee() { ... }
public void setAssignee(String assignee) { ... }
}
Run Code Online (Sandbox Code Playgroud)
JAXB运行时可以读取这些注释并创建unmarshaller以将XML解析为对象实例或将对象编组为XML.
JAXB提供了一个模式编译器(XJC),它可以从XML模式生成带注释的类,这是另一个很棒的特性.
最近我们一直在使用客户端JavaScript进行大量工作.我们还需要XML处理.例如,我们需要像这样解析WPS文档.这些文档也符合不同的XML模式(这里是示例XML 的WPS 1.0.0模式).使用JavaScript对象而不是XML会很棒,这可以节省大量的工作量.在某些情况下,我们可以使用基于JSON的解决方案,如DWR,但在许多情况下,我们必须在客户端处理XML.
我的问题是:
是否有一些JAXB for JavaScript的模拟?
一些工具可以将XML Schema编译成一些XML < - >对象映射并提供运行时来在XML和JavaScript对象之间进行转换?
我可以很容易地想象以下形式生成的映射:
UserTask = new JSXML.XmlRootElement({
name: "usertask",
namespace: "urn:test",
properties: [
{
assignee: new JSXML.XmlElement({
name: "assignee",
namespace: "urn:test",
type: new JSXML.XSD.String()
})
}
]
});
Run Code Online (Sandbox Code Playgroud)
这应该足以构建unmarshaller或marshaller.
我过去一直是DWR(www.directwebremoting.org)的重要人物,并在一些项目中使用过它.它通过在服务器上为java类创建javascript代理/存根来简化AJAX.
虽然DWR已经存在多年,但自从主要开发人员继续前进以来,它似乎已经放缓了 - 它与早期相比也相当大.
至于需要一个简单的java到javascript代理/ marshelling(基本上抽象的低级AJAX的东西) - 任何人都可以推荐一个替代?我所发现的只是RAJAX,但这也是过时了.
谢谢!!
到目前为止,我理解Java中的Httpsession概念.
HttpSession ses = req.getSession(true);
Run Code Online (Sandbox Code Playgroud)
将根据请求创建会话对象.
setAttribute("String", object);
Run Code Online (Sandbox Code Playgroud)
将使用Session对象绑定'String'和value.
getAttribute("String");
Run Code Online (Sandbox Code Playgroud)
将返回与指定的字符串关联的对象.
我无法理解的是:我正在创建一个会话对象
HttpSession ses = req.getSession(true);
,并通过调用为其设置名称setAttribute("String", object);.这里,此代码驻留在服务器内部.对于每个人,当他尝试登录服务器中的相同代码时将被执行.setAttribute("String", object);在此方法中,字符串值是常量.因此,创建的每个会话对象都将使用我提供的相同字符串进行绑定.当我尝试检索字符串以验证他的会话或在采取注销操作时,getAttribute("String"); ll返回相同的常量字符串值(我是对的!! ??实际上我不知道,我只是想到它的执行逻辑) .然后,我怎么能够无效.
我在WEB上的所有教程中都看到了这种类型的插图.它是设置该属性的实际方法吗?或者,真正的应用程序开发人员将在"String"字段中给出一个变量来动态设置它
(ie. session.setAttribut(userName, userName); //Setting the String Dynamically.. I dono is it right or not.)
我的最后一个问题是
WebContext ctx = WebContextFactory.get();
request = ctx.getHttpServletRequest();
Run Code Online (Sandbox Code Playgroud)
上面两行做什么?什么将存储在ctx和请求中?
HttpSession ses = req.getSession(true);将创建新的会话手段.存储在ses中的值.
我希望能够在Web应用程序中记录用户活动.我目前正在使用log4j,它适用于日志记录错误等,但我不确定最好的方法是记录用户,执行的servlet方法和方法参数.我正在使用spring security进行身份验证.
典型的servlet可能如下所示:
public class BankAccountServlet {
@RequestMapping("/deposit")
public void deposit(double amount) {
...
}
@RequestMapping("/checkBalance")
public double checkBalance() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
如果有两个用户,foo和bar,其中foo检查他的余额和酒吧存款两笔现金10.00和5.00.我希望日志看起来像:
01/01/1970 23:59:59 - foo - checkBalance
02/01/1970 23:59:59 - bar - deposit - 10.00
02/01/1970 23:59:59 - bar - deposit - 5.00
Run Code Online (Sandbox Code Playgroud)
如果有人能提供一些建议,我真的很感激他们的帮助.
Eclipse在我的Spring的applicationContext.xml中显示以下错误:
cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'dwr:configuration'. myappservlet-servlet.xml MyApp/src/main/webapp/WEB-INF line 23 XML Problem
cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'dwr:controller'. myappservlet-servlet.xml MyApp/src/main/webapp/WEB-INF line 21 XML Problem
cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'dwr:remote'. myappservlet-servlet.xml MyApp/src/main/webapp/WEB-INF line 41 XML Problem
Run Code Online (Sandbox Code Playgroud)
当我将鼠标悬停在订单项错误上时,它还会说:
- schema_reference.4: Failed to read schema document 'http://www.directwebremoting.org/
schema/spring-dwr-3.0.xsd', because 1) could not …Run Code Online (Sandbox Code Playgroud) 在Intranet中使用DWR时,会出现性能或安全问题等缺点吗?直接Web远程处理是一种使用Ajax请求从js文件联系服务器的工具.
我希望浏览器保持页面打开,直到发送ajax请求.这就是我想象的样子
var requestsPending = 0;
window.onbeforeunload = function() {
showPleaseWaitMessage();
while(requestsPending > 0);
}
// called before making ajax request, atomic somehow
function ajaxStarted() {
requestsPending++;
}
// called when ajax finishes, also atomic
function ajaxFinished() {
requestsPending--;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,JS不做多线程.根据我的理解,回调(ajaxFinished)永远不会被执行,因为浏览器会尝试等到while循环结束执行它,因此它将永远循环.
这样做的正确方法是什么?有没有办法强制JS评估其待办事项列表中的下一个东西,然后回到while循环?或者使用ajax调用"加入"一些语法?我正在使用DWR作为我的ajax.
谢谢,-Max