1、DWR简介
DWR(direct web remoting):是一种改善JAVA与WEB页面之间交互的AJAX开源框架,帮助JAVA程序更好的与页面进行交互。
2、DWR推送方式
(1) 被动推送
浏览器向服务器发送请求,服务器再根据请求将相应的数据返回给浏览器。
(2)主动推送
浏览器与服务器建立连接后,服务器保存这次连接,如果服务器有新的内容需要传到浏览器,则通过这个连接返回。
3、DWR配置过程
3.1导入JAR包
dwr.jar,如果用到spring,还需要导入spring的JAR包
3.2配置web.xml
<servlet>
<servlet-name>dwr</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>disconnectedTime</param-name>
<param-value>100</param-value>
</init-param>
<init-param>
<param-name>maxWaitAfterWrite</param-name>
<param-value>500</param-value>
</init-param>
<load-on-startup>4</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
3.3配置dwr.xml
<dwr>
<allow>
<convert converter="bean" match="com.dwr.UserBean"/>
<create creator="new" javascript="userAdapter">
<param name="class" value="com.dwr.UserAdapter"/>
</create>
<create creator="spring" javascript="userAdapter2">
<param name="beanName" value="userAdapter2"></param>
</create>
</allow>
</dwr>
业务类在DWR的配置方式有两种:
一种是直接创建业务类,creator的值是new;另一种是使用spring的bean,creator的值是spring
如果要使用到用户自定义的BEAN,只需要在dwr.xml加上
<convert converter="bean" match="com.dwr.UserBean"/>
则可。
3.4主体类
public class UserBean implements Serializable {
private static final long serialVersionUID = 1L;
private String username;
private String password;
public String getUsername() {
returnusername;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
returnpassword;
}
public void setPassword(String password) {
this.password = password;
}
}
public class UserAdapter {
public UserBean getUser(String username){
UserBean userBean = new UserBean();
userBean.setUsername("li");
userBean.setPassword("111");
return userBean;
}
/**
* 向页面/Sample/dwr_test.jsp中的方法pushBySession推送数据。
*/
public void testPush(){
ScriptBuffer scriptBuffer =new ScriptBuffer();
scriptBuffer.appendScript("try{");
scriptBuffer.appendScript("if(pushBySession){");
scriptBuffer.appendScript("pushBySession");
scriptBuffer.appendScript("(");
scriptBuffer.appendData("result");
scriptBuffer.appendScript(")}");
scriptBuffer.appendScript("} catch(e){}");
Collection<ScriptSession> sessions =WebContextFactory.get().getScriptSessionsByPage("/Sample/dwr_test.jsp");
if (sessions ==null) {
return;
}
for (ScriptSession scriptSession : sessions) {
if (scriptSession !=null) {
scriptSession.addScript(scriptBuffer);
}
}
}
public static void main(String[] args){
new UserAdapter().testPush();
}
3.5页面配置
dwr_test.jsp
<!-- DWR -->
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/interface/userAdapter.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/engine.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/util.js"></script>
<script>
function getUser(){
userAdapter.getUser('me',function(userBean){
alert("username="+userBean.username+",password="+userBean.password);
});
}
function pushBySession(value){
alert("pushBySession value:"+value);
}
</script>