使用DWR可以很轻松的让你javascript调用java的类文件的方法,是不是觉得很兴奋呢,好,看个简单的例子
前提是你的JSP环境已经搭建好了。
第一步,首先要下载必须的东西。
http://getahead.ltd.uk/dwr/
下载dwr.jar,放到WEB-INF/lib下,这是dwr的开发包。
找不到就给你直接下载的链接你吧
https://dwr.dev.java.net/files/documents/2427/87007/dwr.jar
这是version2.0.3版本的,这是开源的项目,有兴趣的还可以拿来看看,dwr.war包里面也有一些自带的例子,这里就不说了。
第二步,配置你的DWR。
dwr要使用servlet,所以要配置web.xml
web.xml文件
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="dwr">
<display-name>DWR (Direct Web Remoting)</display-name>
<description>A Simple Demo DWR</description>
<listener>
<listener-class>org.directwebremoting.servlet.EfficientShutdownServletContextAttributeListener</listener-class>
</listener>
<listener>
<listener-class>org.directwebremoting.servlet.EfficientShutdownServletContextListener</listener-class>
</listener>
<listener>
<listener-class>org.getahead.dwrdemo.gidemo.PublisherServletContextListener</listener-class>
</listener>
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<display-name>DWR Servlet</display-name>
<description>Direct Web Remoter Servlet</description>
<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>activeReverseAjaxEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>initApplicationScopeCreatorsAtStartup</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>maxWaitAfterWrite</param-name>
<param-value>100</param-value>
</init-param>
<!--
<init-param>
<param-name>org.directwebremoting.extend.ServerLoadMonitor</param-name>
<param-value>org.directwebremoting.impl.PollingServerLoadMonitor</param-value>
</init-param>
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
</web-app>
另外dwr也有自己的dwr.xml配置文件,也是/WEB-INF/下面,这个文件配置你的javascript允许使用哪些java类文件等控制,具体就另外再看看相关文档了。
dwr.xml文件
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
<dwr>
<allow>
<create creator="new" javascript="TestClass">
<param name="class" value="cn.gzgi.test.TestClass"/>
</create>
</allow>
</dwr>
这里的红色部分就是在javascript里使用时的名称,对应的就是使用的是蓝色部分的cn.gzgi.test.TestClass的这个类了。
第三步,编写的你的DWR应用。
1.编写cn.gzgi.test.TestClass类
TestClass.java类
public class TestClass
{
public TestClass() {
}
public String sayHello(String str) {
String temp = "";
temp = "Hello:" + str;
return temp;
}
}
很简单就只有一个sayHello方法
2.html页面编写
test.html文件
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>dwr Demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<script type='text/javascript' src='/dwr/engine.js'> </script>
<script type='text/javascript' src='/dwr/util.js'> </script>
<script type='text/javascript' src='/dwr/interface/TestClass.js'> </script>
</head>
<body>
<script>
function hello() {
var user = $('user').value;
TestClass.sayHello(user, callback);
}
function callback(msg) {
var user = $('user').value;
if(user.length<=0){
DWRUtil.setValue('result', '');
}else{
DWRUtil.setValue('result', msg);
}
}
</script>
<input id="user" type="text" οnkeyup="hello()"/>
<div id="result"></div>
</body>
</html>
上面的/dwr/engine.js,/dwr/util.js,/dwr/interface/TestClass.js是系统自动生成的,只需要在页面嵌套进去就可以了。
/dwr/interface/TestClass.js就是对应你写的cn.gzgi.test.TestClass类。
是不是很简单呢