DWR是一个开放源码的使用Apache许可协议的解决方案,它包含服务器端Java库、一个DWR servlet以及 JavaScript库。虽然DWR不是Java平台上唯一可用的Ajax-RPC工具包,但是它是最成熟的,而且提供了许多有用的功能。本文介绍了如何使用Direct Web Remoting(DWR)直接把JavaBean的方法公开给 JavaScript代码并自动进行Ajax的繁重工作。...详细
如果您正在使用异步JavaScript和XML(Ajax)进行 Java™ Web开发,那么您最关心的问题可能就是把数据从服务器传递给客户机。本文介绍了Java对象序列化的五种方式,并提供了选择最适合应用程序的数据格式和技术所需要的全部信息。这篇文章侧重于可以用来生成 Java对象以数据为中心的视图的技术。演示可以把 JavaBeans变成XML文档的各种方法,并且讨论每种方法的优劣。...详细
本文中将解释Ajax背后的概念,演示为基于Java的Web应用程序创建Ajax界面的基本步骤。我将使用代码示例演示让Ajax应用程序如此动态的服务器端Java代码和客户端JavaScript。最后将指出Ajax方式的一些不足,以及在创建Ajax应用程序时应当考虑的一些更广的可用性和访问性问题。...详细
当基于Web的应用程序需要跨多个Web应用程序容器(如 IBM® WebSphere® Application Server、BEA WebLogic 和 Tomcat 等,这里仅指出三个)部署时,跨网络兼容性不够。对于Java Web服务,没有跨多个Web应用程序容器实现的标准部署的“web.xml”可用。如果您希望应用程序支持多个Web应用程序容器提供的Web服务实现,则Java Web服务应用程序的部署可能会成为一项挑战。...详细
本文中,您将开始接触最基本和基础性的有关Ajax的全部对象和编程方法:XMLHttpRequest对象。该对象实际上仅仅是一个跨越所有Ajax应用程序的公共线程,您可能已经预料到,只有彻底理解该对象才能充分发挥编程的潜力。事实上,有时您会发现,要正确地使用 XMLHttpRequest,显然不能使用XMLHttpRequest。这到底是怎么回事呢?...详细
本文结合平台内的JMX支持和jconsole JMX客户机可以提供一种向应用程序添加管理和监视功能的轻松方式。即使是没有具体管理需求的应用程序,为它们构建这些功能也会让您对程序的运行及其所处理的数据的性质获得深入了解,而且不需太多的工作和努力。如果应用程序导出管理接口,此接口可以查看它操作的内容,那么就会更加了解它的运行状态——对它是否按预期的方式工作也会更有信心--而不必求助于额外的工具。...详细
本文介绍了在大多数情况下,Java应用程序要么是J2EE应用程序、要么是J2SE应用程序,并且在这一点上是泾渭分明的。J2EE 应用程序需要J2EE容器的服务,容器要实现一长串的J2EE API。J2EE API 设计为协同工作。虽然J2EE和J2SE是用于不同工作的不同工具,但是许多开发人员发现自己必须决定各种框架服务的“轻量级”和“重量级”实现。通过使用J2EE接口的较轻量级的实现,开发人员可以在短期内得到性能和易于使用的好处,同时又具有在将来需要时,可以容易地迁移到更重量级的解决方案的灵活性。...详细
本文介绍了目前所有智能手机都苦恼的问题--有限的屏幕实际使用区。有些Web站点支持基于手机的浏览器,而且嵌入式浏览器也试图在小小的屏幕上有效地渲染页面,但是,在电话屏幕上查看典型的Web页面,就像要把一头大象强行塞进车后座一样。鉴于此,本文介绍了采用把XQuery当作屏幕搜集工具,又把它当作样式表工具。只要少量基础设施和一些非常简单的XQuery表达式,就可以从大量数据源提取出相关数据Web站点上对数据进行屏幕搜集,然后把数据重新格式化,在小屏幕上显示。 ...详细
本文介绍了动态代理为实现许多常见设计模式提供了替代的动态机制。虽然这些模式不使用动态代理,只用普通的类就能够实现,但是在许多情况下,动态代理方式更方便、更紧凑,可以清除许多手写或生成的类。动态代理是强大而未充分利用的工具,可以用于实现许多设计模式。这些模式基于代理的实现容易编写,更难出错,并且具备更好的通用性;在许多情况下,一个动态代理类可以充当所有接口的Decorator或Proxy,这样就不用每个接口都编写一个静态类。除了最关注性能的应用程序之外,动态代理方式可能比手写或机器生成stub的方式更可取。...详细
本文介绍了弱引用是对一个对象的引用的持有者。使用弱引用后,可以维持对referent的引用,而不会阻止它被垃圾收集。当垃圾收集器跟踪堆的时候,如果对一个对象的引用只有弱引用,那么这个referent就会成为垃圾收集的候选对象,就像没有任何剩余的引用一样,而且所有剩余的弱引用都被清除。弱引用对于构造弱集合最有用。弱引用和弱集合是对堆进行管理的强大工具,使得应用程序可以使用更复杂的可及性方案,而不只是由普通(强)引用所提供的“要么全部要么没有”可及性。...详细
类加载器是Java最强大的特征之一。但是开发者常常忘记类加载组件。类加载器是在运行时负责寻找和加载类文件的类。Java允许使用不同的类加载器,甚至自定义的类加载器。类加载器从源文件(通常是.class 或 .jar文件)获得不依赖平台的字节码,然后将它们加载到JVM内存空间,所以它们能被解释和执行。默认状态下,应用程序的每个类由java.lang.ClassLoader加载。因为它可以被继承,所以可以自由地加强其功能。...详细
本文将通过比较为实现同样任务所使用的不同模型的样本代码来研究易用性问题,比较几个Java文档模型的性能和功能。当选择模型时,无法做到每次都权衡得很清楚,如果以后改变主意,则需要大量编码来进行切换。本文作者将性能结果放入特性集合的上下文中并遵循标准,对所要求的正确选择给出了一些建议。...详细
在本教程的上篇里,我们讲到了使用EJB3 persistence——现在也叫做Java Persistence API(JPA)——保持对象的基础知识。我们利用Hibernate的EntityManager/Annotations实现让简单的Person和Address类保持到嵌入的HSQLDB里。但是Person和Address这两个类之间是单向关系:一个Person指向一个Address,所以让我们来看看如何实现双向映射。...详细
本文介绍了在Java理论与实践中,几种比较简单的非阻塞算法的工作方式。在不只一个线程访问一个互斥的变量时,所有线程都必须使用同步,否则就可能会发生一些非常糟糕的事情。Java语言中主要的同步手段就是synchronized关键字,它强制实行互斥,确保执行synchronized块的线程的动作,能够被后来执行受相同锁保护的synchronized块的其他线程看到。在使用得当的时候,内在锁可以让程序做到线程安全,但是在使用锁定保护短的代码路径,而且线程频繁地争用锁的时候,锁定可能成为相当繁重的操作。并把原子变量用作不使用锁的并发算法的基础。 ...详细
本文介绍了多线程和并发性并不是什么新内容,但是Java语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言。核心类库包含一个Thread类,可以用它来构建、启动和操纵线程,Java语言包括了跨线程传达并发性约束的构造--synchronized和volatile。在简化与平台无关的并发类的开发的同时,它决没有使并发类的编写工作变得更繁琐,只是使它变得更容易了。本文还简单介绍和比较了ReentrantLock和synchronized,以及在什么时候选择用ReentrantLock代替synchronized。...详细
本文介绍了开发人员在以编写高性能代码为目标的时候,常常会编写小的基准程序来度量一种方法相对于另一种方法的性能。与其他静态编译的语言相比,评论用Java语言编写的给定惯用法或结构体的性能要困难得多。并指出,应把注意力放在“微”基准上--编写一些实际的程序,用两种方法编写代码,开发一种逼真的负载生成策略,并在逼真的负载条件下和逼真的部署配置中使用这两种方法来度量应用程序的性能。这样做工作量会很大,但惟有如此才能更接近您想要的答案。...详细
XML作为全球通用的结构化语言,越来越受人们青睐 。在许多项目中利用XML数据交换信息,省去了许多麻烦事,不用制定繁锁的数据格式,利用XML数据易于表达,也利于一线开发者跟踪调试。在XML应用中,最常用也最实用的莫过于XML文件的读写。本文简单介绍了,JAVA中的XML编程方法。作者通过一个简单的XML文件读写来作简要分析。...详细
本文介绍了新方法内置了更多类型信息,减少了编程错误,提高了程序的可读性,但是确实带来了更多声明变量和方法签名方面的前期工作。类型参数在声明和初始化中的重复看起来尤其没有必要;Socket和Future
本文介绍了编写线程安全的类很难,而分析现有类的线程安全性更难,增强类使其仍然保持线程安全也很难。随着FindBugs的引入,在自动代码检测和审核工具方面已经取得重大进步。FindBugs利用字节码分析和很多内置的bug模式检测器来查找代码中的常见bug。它可以帮助找出代码的哪些位置有意或者无意地偏离了良好的设计原理。FindBugs几乎可以在任何时间找出实际的bug,它的每个检测器都已经在测试、产品、专业的开发代码中发现了bug。...详细