DWR的简单理解与实现(一)

1>:DWR的原理:

首先,你安装DWR时会配置一个servlet,这个servlet记得吧?他就是负责把前台的JS参数封装成JAVA,去调用你的JAVA类,然后将返回结果(JAVA类型)再翻译成JS生成到你的JSP页面上,给你的错觉就是你用JS直接调用了JAVA方法

2>:DWR框架的搭建:

1:首先去http://directwebremoting.org/dwr/下载所需要的engine.js和util.js,下载DWR.jarjar包。

2:配置web.xml文件

<servlet>
   <display-name>dwr</display-name>
   <servlet-name>dwr</servlet-name>
   <!-- 这个其实和Struts的一样,在服务器启动时加载这个Servlet -->
   <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
   <!-- 这个是用来查看我们DWR下可以允许调用的java类,可以输如://http://localhost:8080/工程名/dwr/查看 -->
   <init-param>
    <param-name>debug</param-name>
    <param-value>true</param-value>
   </init-param>
<!-- 可能有时我们需要配置多个dwr.xml可以采用如下所示-->
   <init-param>   
      <param-name>config-dwr</param-name>       
      <param-value>WEB-INF/dwr.xml,WEB-INF/dwr1.xml,WEB-INF/dwr2.xml</param-value>   
   </init-param>
   <!-- 
   <init-param>   
      <param-name>config-dwr1</param-name>       
      <param-value>WEB-INF/dwr1.xml</param-value>   
   </init-param> 
   <init-param>   
      <param-name>config-dwr2</param-name>       
      <param-value>WEB-INF/dwr2.xml</param-value>   
   </init-param> 
    -->       
</servlet>
<servlet-mapping>
   <servlet-name>dwr</servlet-name>
   <url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

3:编写我们的类

public class Student {
	public String say(String str)
	{
		return str+"I'm a Student";
	}
}
public class Teacher {
	public String say()
	{
		return "I'm a teacher";
	}
}


public class Score {
public String say()
		{
			return "I'm a Score";
		}
	

}

4:在WEB-INF下建立我们自己的dwr.xml

对于Teacher类和Score类的DWR.xml与这个一样,大家感兴趣可以自几建。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC    "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"    "http://www.getahead.ltd.uk/dwr/dwr20.dtd">

<dwr>
	<allow>
	<!-- creator 对象创建方式通常有四种:new 、spring、null、script下面的就是new的方式 -->
		<create creator="new" javascript="DWRStudent">
			<param name="class" value="Student"/>
		</create>
	   <create creator="new" javascript="JDate">
	    <param name="class" value="java.util.Date" />
	   </create>
	</allow>
	<dwr>


5:建立我们的index.jsp

<!--  <url-pattern>/dwr/*</url-pattern> -->
	<!-- 对应html中这个路径,很多例子都是dwr,开始很不很明白,还以为放置的engine.js的路径 -->
	<script type='text/javascript' src='/Test/dwr/engine.js'></script>
	<script type='text/javascript' src='/Test/dwr/interface/DWRStudent.js'></script>
	<script type='text/javascript' src='/Test/dwr/interface/DWRScore.js'></script>
	<script type='text/javascript' src='/Test/dwr/interface/DWRTeacher.js'></script>
    <script type='text/javascript' src='/Test/dwr/interface/JDate.js'></script>
    <script type='text/javascript' src='/Test/dwr/engine.js'></script>
   <script type='text/javascript'>
    function displayDate()
    { 
     var str = JDate.toString();
     alert(str);
    } 
    function displaySay()
    {
     var str=DWRStudent.say("Hello",callback);
     var str1=DWRScore.say(callback);
     var str2=DWRTeacher.say(callback);
     //关于回调函数其实在你调用callback时,其实就是又调用了say(),这个方法。
     //data用来接收say方法的返回值,当然你也只可在回调方法时给他传参,其实我感觉真正的调用java方法执行是在回调函数使用时。
     //否则返回值是“undefined”未定义的
    }
    function callback(data)
    {
     alert(data);
    }
   
</script>
</head>
<body>
   <input  type="button" id="date" value=" 日期 " οnclick="displayDate()">
    <input  type="button" id="content" value="say" οnclick="displaySay()">
</body>
</html>

这样简单地DWRk框架就是搭建好了。

3>:关于convert的一些知识

DWR帮助我们将本地的javascript脚本函数调用转变成对远程java对象函数的调用。在函数的调用过程中我们需要传递参数,这样我们就需要将本地的javascript变量转变成对应的java类型变量。这个就是Convertor的作用。DWR内部为我们编写了一些JAVA主要类型的Convertor.默认下面的数据类型会自动转换:boolean, byte, short, int, long, float, double, char, java.lang.Boolean, java.lang.Byte, java.lang.Short, java.lang.Integer, java.lang.Long, java.lang.Float, java.lang.Double, java.lang.Character, java.math.BigInteger, java.math.BigDecimal and java.lang.String.但是假如我们有这样一个方法A.setB(B b),现在我们要在javascript脚本中调用该方法,我们需要传递java类型为B的参数,这个时候我们就需要配B配置Convertor

如果大家对这个convert还不是很理解请到http://blog.youkuaiyun.com/xwdengjie/article/details/2867908查看。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值