疑问和杂记
Js的兼容问题
DOC = document,
isStrict = DOC.compatMode == "CSS1Compat",
isOpera = check(/opera/),
isChrome = check(/chrome/),
isWebKit = check(/webkit/),
isSafari = !isChrome && check(/safari/),
isSafari2 = isSafari && check(/applewebkit\/4/), // unique to Safari 2
isSafari3 = isSafari && check(/version\/3/),
isSafari4 = isSafari && check(/version\/4/),
isIE = !isOpera && check(/msie/),
isIE7 = isIE && check(/msie 7/),
isIE8 = isIE && check(/msie 8/),
isIE6 = isIE && !isIE7 && !isIE8,
isGecko = !isWebKit && check(/gecko/),
isGecko2 = isGecko && check(/rv:1\.8/),
isGecko3 = isGecko && check(/rv:1\.9/),
isBorderBox = isIE && !isStrict,
isWindows = check(/windows|win32/),
isMac = check(/macintosh|mac os x/),
isAir = check(/adobeair/),
isLinux = check(/linux/),
isSecure = /^https/i.test(window.location.protocol);
// remove css image flicker
if(isIE6){
try{
DOC.execCommand("BackgroundImageCache", false, true);
}catch(e){}
}
W3cschool
http://www.w3school.com.cn/jquery
58同城不错的网站
关键词
VPN虚拟专用网络(Virtual Private Network ,简称VPN)指的是在公用网络上建立专用网络的技术。其之所以称为虚拟网,主要是因为整个VPN网络的任意两个节点之间的连接并没有传统专网所需的端到端的物理链路,而是架构在公用网络服务商所提供的网络平台,如Internet、ATM(异步传输模式〉、Frame Relay (帧中继)等之上的逻辑网络,用户数据在逻辑链路中传输。它涵盖了跨共享网络或公共网络的封装、加密和身份验证链接的专用网络的扩展。
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。JNDI在满足了数据源配置的要求的基础上,还进一步扩充了作用:所有与系统外部的资源的引用,都可以通过JNDI定义和引用。详见http://blog.csdn.net/zhaosg198312/article/details/3979435
Prototype 是一个纯粹的javascript代码库很好的支持Ajax。在JavaScript中,prototype对象是实现面向对象的一个重要机制。每个函数就是一个对象(Function),函数对象都有一个子对象 prototype对象,类是以函数的形式来定义的。prototype表示该函数的原型,也表示一个类的成员的集合。
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。
ibatIS是Clinton Begin开发,现在由APACHE基金会支持的用于加快JDBC编程的经过泛化的框架,是一个持久化框架。
DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。
EL表达式非常简单,在前面已经介绍过EL的运算符。所有的EL表达式都是以“${”开始“}”为结尾的。如:“${applicationScope.user.userName}”。
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。
利用ognl表达式取值(例如:取值堆栈中的username值)
<s:property value="username"/>
<s:propertyvalue=””> 注意: value里的内容称为ognl表达式
User.xxx 只有传入参数,才会构造对象,或者直接在action中new也可以,但是User对象必需具有无参数的构造方法。
{}大括号 在OGNL中可以表示一个集合
POJO(Plain Old Java Objects)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类,没有业务逻辑,有时可以作为VO(value -object)或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法。
Jquery
P209
插件工具p22
jQuery_API.mxp
目前有几个比较流行的持久化框架,如:Hibernate、iBATIS以及最新的EJB 3版本。其中iBATIS框架并没有实现真正的O/R Mapping框架,严格来讲它只是对象和SQL之间的映射,适合于对已有项目的改造。而EJB 3框架是重量级开发框架,不适合轻量级开发。
事件
bind为每个匹配元素的特定事件绑定事件处理函数。
live jQuery 给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的也有效。
这个方法是基本是的 .bind() 方法的一个变体。使用 .bind() 时,选择器匹配的元素会附加一个事件处理函数,而以后再添加的元素则不会有。为此需要再使用一次 .bind() 才行。
delegate指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。
hover一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法。这是一个自定义的方法,它为频繁使用的任务提供了一种“保持在其中”的状态。
toggle用于绑定两个或多个事件处理器函数,以响应被选元素的轮流的 click 事件。s如果元素是可见的,切换为隐藏的;如果元素是隐藏的,切换为可见的。
trigger在每一个匹配的元素上触发某类事件。
blur当元素失去焦点时触发 blur 事件。
dblclick 当双击元素时,会发生 dblclick 事件。
keypress 事件与 keydown 事件类似。当按钮被按下时,会发生该事件。它发生在当前获得焦点的元素上。不过,与 keydown 事件不同,每插入一个字符,就会发生 keypress 事件。注释:如果在文档元素上进行设置,则无论元素是否获得焦点,该事件都会发生。
keyup当按钮被松开时,发生 keyup 事件。它发生在当前获得焦点的元素上。
注释:如果在文档元素上进行设置,则无论元素是否获得焦点,该事件都会发生。
mouseenter 当鼠标指针穿过元素时,会发生 mouseenter 事件。该事件大多数时候会与mouseleave 事件一起使用。
与 mouseover 事件不同,只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件。如果鼠标指针穿过任何子元素,同样会触发 mouseover 事件。
mouseleave 当鼠标指针离开元素时,会发生 mouseleave 事件。该事件大多数时候会与mouseenter 事件一起使用。
与 mouseout 事件不同,只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件。如果鼠标指针离开任何子元素,同样会触发 mouseout 事件。
mouseup 当在元素上放松鼠标按钮时,会发生 mouseup 事件。
与 click 事件不同,mouseup 事件仅需要放松按钮。当鼠标指针位于元素上方时,放松鼠标按钮就会触发该事件。
resize 当调整浏览器窗口的大小时,发生 resize 事件。
select当 textarea 或文本类型的 input 元素中的文本被选择时,会发生 select 事件。
这个函数会调用执行绑定到select事件的所有函数,包括浏览器的默认行为。可以通过在某个绑定的函数中返回false来防止触发浏览器的默认行为。
插件编写p241
第五章很实用 用到时参考
剩下的以后再看
jquery.jqzoom.js类似于淘宝上面查看商品更大的图片
iBATIS
相对于hibernate和apache ojb等“一站式”orm解决方案而言,ibatis是一种“半自动化”的orm实现。
sql maps:是整个ibatis database layer的核心价值所在。通过使用sql maps你可以显著的节约数据库操作的代码量。sql maps使用一个简单的xml文件来实现从javabean到sql statements的映射。跟其他的框架或者对象映射工具相比,sql maps最大的优势是简单。
iBATIS需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。同样的需求,iBATIS的工作量比Hibernate要大很多。类似的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sql mapping的地方一一修改。
可维护性方面,iBatis 更好一些。因为 iBatis 的 sql 都保存到单独的文件中。而 Hibernate 在有些情况下可能会在 java 代码中保sql/hql。
<properties>主配置文件之外提供一个名值对列如:
<properties resource=“db.properties” />
<settings> 添加各种属性如:延迟加载,使用限定名等。
<transactionManager>用于指定使用什么事物管理器等功能。
<typeAlias> 已经内置的类型别名定义
<typeHandler>:将数据从数据库特定的数据类型转换为应用程序中的数据类型。
<sqlMap>
sqlmapconfig.xml
它是使用iBATIS的起点,负责把所有的SQL映射文件组合在一起。用于配置文件中告诉iBATIS如何连接数据库,以及获取哪些SQL映射文件。
sqlmap.xml
包含了我们将要运行的SQL语句。
<select> 查询
<insert> 插入数据
<update> 更新数据库中信息
<delete> 删除
<procedure> 存储过程
<statement>
<sql> select * from a where name=“aaa”
<include>
ExtJs
P64
Ext.onReady:这个函数用来判断页面已经准备好来执行Ext的内容,即用来判断页面是否加载完全;
Ext.Msg:用来产生一个有固定样式的消息窗口;
configuration objects(配置对象):这个函数定义控件将如何展示和工作;
Ext.get:这个函数用来访问和控制DOM中的而元素。
首先,我们建立一个使用本地数据的combo。为了实现这个功能,我们需要建立一个data store(数据集合)。data store的种类有许多种,每一种可以被用在特定的情况下。但是对于这个例子,我们使用一个simple store:
21天学通java-web开发
<jsp:include>动作元素和<%@ include%>指令元素的区别如下。使用<%@ include%>指令元素是将所以的被包含文件包含进来之后,然后再进行编译等处理,可以简单的称其为先包含再处理。而使用<jsp:include>动作元素是先将所以的代码处理完成之后,再将处理完成的代码的结果包含进行,可以简单的称其为先处理再包含。
<jsp:forward>动作元素用来转移用户的请求,使得用户请求的页面从一个页面跳转到另一个页面。这种跳转为服务器端跳转,所以用户的地址栏不会发生任何的变化。
<jsp:plugin>、<jsp:params>和<jsp:fallback>三个动作元素,一般都是搭配起来使用。其中<jsp:plugin>动作元素用来在JSP中嵌入Java插件;<jsp:params>动作元素用来给Bean或者Applet传递参数;<jsp:fallback>动作元素用来指定当浏览器不支持或无法启动Bean或者Applet时,在页面上打印输出的错误提示信息。
request对象不但可以用来设置和取得request范围变量,还可以用来获得客户端请求参数、请求的来源、表头、cookies等等。其中常用方法如下。
•获得客户端请求参数
•获得所有的参数名称
•获得参数的所有参数值
•获得封装所有参数值的Map
response对象用来给客户端传送输出信息,设置标头等等。其常用方法如下。
•实现页面跳转
•实现页面自动刷新
•实现页面自动跳转
out对象用来向网页输出信息。其常用方法如下。
•使用out对象进行页面输出
•使用out对象求得缓冲区使用大小
session对象用来表示用户的会话状况,一般用于保存用户的各种信息,直到生命周期超时或者被自动释放掉为止。其常用方法如下。
•设置并获得session生命周期
•获得session的其他信息
其中name属性使用设置实例化对象名,和<jsp:useBean>中的id属性保持一致。property属性用来指定JavaBean属性名称。param属性用来指定接受参数名称,value属性用来指定属性值。
JavaBean
<jsp:setProperty name="实例化对象名" property="*"/>
<jsp:setProperty name=“实例化对象名”property=“属性名称"/>
<jsp:setProperty name="实例化对象名" property="属性名称" param="参数名称"/>
EL表达式
EL表达式非常简单,在前面已经介绍过EL的运算符。所有的EL表达式都是以“${”开始“}”为结尾的。
如:“${applicationScope.user.userName}”。
如果按照以前的JSP Scriptlets的写法代码如下。
User user= (User)application.getAttribute(“user”);
String username = user.getUserName();
(1)applicationScope对象,用来取得application范围属性值。
(2)sessionScope对象,用来取得session范围属性值。
(3)requestScope对象,用来取得request范围属性值。
(4)pageScope对象,用来取得page范围属性值。
JSTL标签库分为五类,分别是JSTL核心标签库、数据库标签库、I18N格式化标签库、XML标签库和JSTL函数标签库。
<c:out>用来显示数据的内容,类似于<%=%>但是功能要更加强大。使用<c:out>输出内容比使用Scriptlets代码要更加简单,方便页面维护。
Filter同Servlet类似也具有生命周期。Filter从生成到销毁必须进过如下几个步骤。
(1)生成Filter,并通过调用其init()方法来进行初始化。
(2)过滤用户请求,调用其doFilter()方法。
(3)调用destroy()方法进行销毁,并通过垃圾收集器进行收集清理。
Servlet生命周期
(1) 初始化
(2) 服务
(3) 销毁
Hibernate
Hibernate中对象有三种状态,临时对象(Transient Objects)、持久化对象(Persistent Objects)和脱管对象(Detached Objects)
(1)临时状态由Java中的new命令开辟内存空间的Java对象,也就是平时所熟悉的普通Java对象。如果没有变量对它引用,它将被JVM收回。临时对象在内存是孤立存在的,它的意义仅仅是携带信息的载体,不和数据库中的数据有任何关联。通过Session的save()和saveOrUpdate()方法可以把一个瞬时对象和数据库相关联,并把临时对象携带的信息通过配置文件所做的映射插入到数据库中,这个临时对象就成为持久化对象,并拥有和数据库继续相同的id字段。
(2)持久化状态持久化对象在数据库中有相应的记录,并拥有一个持久化标识。如果使用delete()方法,持久化对象就变成临时对象,并且删除数据库中相对应的记录,这个对象和数据库不再有任何关联。当一个Session执行close()或者clear()或evict()之后,持久化对象就变为脱管对象,这时对象的id虽然拥有数据库的识别值,但已经不在Hibernate持久层的管理之下,它和临时对象基本上是一样的,只不过比临时对象多了数据库的标识id值。在没有任何变量引用此对象的情况下,JVM可能将其回收。
a) transient:内存中一个对象,没ID,缓存中也没有
b) persistent:内存中有,缓存中有,数据库有ID
c) detached:内存有,缓存没有,数据库有,ID
1.业务逻辑组件接口
2.业务逻辑组件实现类
3.业务逻辑组件工厂类
Spring
注入的三种方式
1. 通过Set方法注入依赖。
2. 引用其他的Bean。
3. 使用构造函数注入依赖。
自动装配包含如下四种类型。
•byName:在IoC容器中寻找与Bean中属性名相同的id对应的Bean,如果找不到相符合的Bean,则该属性没有被装配上。
•byType:在IoC容器中寻找与Bean中属性相同类型的Bean,如果找不到相符合的Bean,则该属性没有被装配上。如果找到多个相符合的Bean,则会抛出异常。
•constructor:在IoC容器中寻找与Bean中构造函数参数一致的一个或多个Bean。如果存在不确定的Bean,则会抛出异常。
•autodetect:自动模式,首先尝试使用constructor来自动装配,然后使用byType方式。
Struts
Strut标签库:<%@ taglib prefix="s" uri="/struts-tags" %>
$ #% 的区别
a) $ 用于i18n和Struts配置文件
b) # 取得ActionContext的值
c) % 将原本的文本属性解析为ognl,对于本来就是ognl的属性不起作用
i. 参考<s:property>和<s:include>
Action配置详见马士兵struts笔记
Ajax
AJAX 指的是异步 JavaScript 和 XML(Asynchronous JavaScript and XML)。
为了应对所有的现代浏览器,包括 IE5 和 IE6,请检查浏览器是否支持 XMLHttpRequest 对象。如果支持,则创建 XMLHttpRequest 对象。如果不支持,则创建 ActiveXObject :
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 open() 和 send() 方法:
xmlhttp.open("GET","test1.txt",true);
xmlhttp.send();
当使用 async=true 时,请规定在响应处于 onreadystatechange 事件中的就绪状态时执行的函数
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","test1.txt",true);
xmlhttp.send();
当您使用 async=false 时,请不要编写 onreadystatechange 函数 - 把代码放到 send() 语句后面即可
xmlhttp.open("GET","test1.txt",false);
xmlhttp.send();
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
如需获得来自服务器的响应,请使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性。
属性 | 描述 |
responseText | 获得字符串形式的响应数据。 |
responseXML | 获得 XML 形式的响应数据。 |
下面是 XMLHttpRequest 对象的三个重要的属性:
属性 | 描述 |
onreadystatechange | 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。 |
readyState | 存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。 · 0: 请求未初始化 · 1: 服务器连接已建立 · 2: 请求已接收 · 3: 请求处理中 · 4: 请求已完成,且响应已就绪 |
status | 200: "OK" 404: 未找到页面 |
疯狂ajax讲义
疯狂ajax讲义(很好的书包括jquery extjs ajax)
Jquery
jqueryUI对话框组件可以调用dialog方法弹出对话框
Html()/text()/val()
document.getElementsByTagName获取标签名
$() 方法是在DOM中使用过于频繁的 document.getElementById() 方法的一个便利的简写
ExtJs
1、元素选择符
*:任意元素
E:匹配所有标签为E的元素
E F:匹配E元素的所有后代元素中标签为F的元素
E>F:匹配E的所有子元素(不包括孙子等后代元素)中标签为F的元素
E+F:匹配紧跟着E元素的下一个兄弟元素且标签为F的元素
E~F:匹配E标签后面所有兄弟标签为F的元素
2、属性选择符
3、Class选择器
4、伪类选择符
5、CSS值选择符
Ext.Array Array扩展工具 Ext.Array.sun()
Ext.Date Date扩展工具 Ext.Date.format()
Number String等
Ext.extend和Ext.define作用相同表示自定义类,多用Ext.define。Ext.create创建对象
Ext.DomHelper是一个工具类,它允许开发者通过DOM或HTML字符串来创建HTML元素和HTML模板。
xtype来标识UI组件类型
inputType输入类型
fieldLabel标签
handler指定事件处理函数
tooltip提示
renderTo:Ext.getBody()是用来指明控件要渲染的节点的
@WebServlet(urlPatterns=”/pro”) Extjs中表明的url地址在servlet中引用。
ExtJs的数据中心(在实际项目中运用比较多)p332
Ext.data.Model Ext.data.Field Ext.data.Store
Ext.data.proxy.Proxy使用proxy加载远程数据
加载远程数据
proxy:{
type:'ajax',
url:'getAllBooks',
reader:{
type:'json',
root:'data'
},
}
例子:
<html>
<head>
<title>ExtJsTest</title>
<link rel="stylesheet" type="text/css" href="css/ext-all.css" />
<script src="js/ext-all.js"></script>
<script>
Ext.onReady(function(){
Ext.define('Book',{
extend:'Ext.data.Model',
feild:[
{name:'name',type:'string'},
{name:'author',type:'string'},
{name:'price',type:'float'},
{name:'publishDate',type:'date'}
]});
var bookStore=Ext.create('Ext.data.Store',{
model:'Book',
data:[
{"id":1,name:"疯狂ajax讲义1",author:"李刚1",price:1001,publishDate:'2012-2-2'},
{"id":2,name:"疯狂ajax讲义2",author:"李刚2",price:1002,publishDate:'2012-2-22'},
{"id":31,name:"疯狂ajax讲义3",author:"李刚3",price:1003,publishDate:'2012-2-3'}
]});
Ext.create('Ext.grid.Panel',{
title:'察看图书',
width:550,
renderTo:Ext.getBody(),
columns:[
{text:'书名',dataIndex:'name',flex:1},
{text:'作者',dataIndex:'author',flex:1},
{text:'价格',dataIndex:'price',flex:1},
{text:'出版时间',dataIndex:'publishDate',xtype:'datecolumn',format:'y年m月d日',flex:1},
],
store:bookStore
});
});
/*加载远程数据
proxy:{
type:'ajax',
url:'getAllBooks',
reader:{
type:'json',
root:'data'
},
},
*/
/*定义分页工具条
bbar:{
xtype:'pagingtoolbar',
store:bookStore,
displayInfo:true
}
*/
</script>
</head>
<body>
</body>
</html>
Ext.data.reader.Reader读取数据
分页工具条
bbar:{
xtype:'pagingtoolbar',
store:bookStore,
displayInfo:true
}
UI容器
Ext.container.Container
Ext.window.Window
Ext.panel.Panel
Ext.grid.Panel生成表格p338
Ext.grid.column.Action操作表格数据
使用Ext.tree.Panel生成树
Ext.data.TreeStore提供数据支持
Root:{
Children:[
{text:””,children:[
{text:””,leaf:true}]
}]
}
Prototype
是一个纯粹的javascript代码库很好的支持Ajax。
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。
prototype.js开发者手册
http://thinhunan.cnblogs.com/archive/2006/04/01/DeveloperNotesForPrototype.html
1、Prototype的工具函数
使用$()方法
$() 方法是在DOM中使用过于频繁的 document.getElementById() 方法的一个便利的简写,就像这个DOM方法一样,这个方法返回参数传入的id的那个元素。
使用$$()函数
$$()和$()函数的功能相同,只是该函数是一个或多个CSS选择器。
使用$F()函数
$F()函数是另一个大收欢迎的“快捷键”,它能用于返回任何表单输入控件的值,比如text box,drop-down list。这个方法也能用元素id或元素本身做为参数。
使用$A()函数
$A()函数能把它接收到的单个的参数转换成一个Array对象。
使用$w()函数
$w()函数用于将字符串以空格作为分隔符,将字符串分割成字符串数组。
使用 $H() 函数
$H()函数把一些对象转换成一个可枚举的和联合数组类似的Hash对象。
使用$R()函数
$R()是new ObjectRange(lowBound,upperBound,excludeBounds)的缩写。
跳到ObjectRange 类文档可以看到一个关于此类的完整描述. 此时,我们还是先来看一个例子以展示这个缩写能代替哪些方法吧。其它相关的一些知识可以在Enumerable 对象文档中找到。
使用Try.these()函数
Try.these() 方法使得实现当你想调用不同的方法直到其中的一个成功正常的这种需求变得非常容易, 他把一系列的方法作为参数并且按顺序的一个一个的执行这些方法直到其中的一个成功执行,返回成功执行的那个方法的返回值。
2、Prototype的自定义对象和类
使用Element对象
使用Element.Methods
和Element里包含的方法大致相似只是定义方法混入DOM Element
使用Enumerable
提供大量操作数组、集合和枚举的方法
使用ObjectRange
使用Form.Element操作表单控件
使用Form表单操作
和Form.Element相似,区别是Form.Element操作指定的表单控件二Form操作指定的表单
使用Hash对象
使用Event
使用Template
使用Class
两个常用监听器
Form.Observer
Form.Element.Observer
3、Prototype对ajax的支持
使用Ajax.Request类
如果你不使用任何的帮助程序包,你很可能编写了整个大量的代码来创建XMLHttpRequest对象并且异步的跟踪它的进程, 然后解析出响应 然后处理它。当你不需要支持多于一种类型的浏览器时你会感到非常的幸运。
使用Ajax.Responders对象
注册全局ajax事件处理器register
删除全局ajax事件处理器unregister
使用Ajax对象
使用Ajax.Updater类
如果你的服务器的另一端返回的信息已经是HTML了,那么使用这个程序包中 Ajax.Updater 类将使你的生活变得更加得容易。用它你只需提供哪一个元素需要被AJAX请求返回的HTML填充就可以了,例子比我写说明的更清楚。
DWR
DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。