DWR框架

现在的技术非常之多,ajax技术在页面上的使用更是非常的广泛。那么它也有许多的框架,从原来光在JavaScript中利用 httprequest现在利用配置文件在结合javabean以及DWR框架中自动生成的JS来产生新的一种ajax技术。

那么现象就介绍如何使用这个框架:

当然你必须有相关的jar包:dwr.jar 和 commons-logging 这个两个包是不能少的。

要想让DWR 进入系统首先就需要让web工程的中心web.xml知道,所以在web.xml中必须写入

在web.xml里配置

<!-- The DWR servlet. -->
<servlet>
<servlet-name>dwr-invoker</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>crossDomainSessionSecurity</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>





初始化参数还有其它参数说明:<init-param></init-param>

初始化参数还有其它:

a.allowGetForSafariButMakeForgeryEasier,解决了safari 1.x post时的bug,默认是false,避免bug改为true。

b.crossDomainSessionSecurity,默认是true,如果改为false将会能接收其它域的请求,存在安全风险。

c.allowScriptTagRemoting,页面里动态添加<scrip>标签的ajax方法,默认为true。

d.debug,是否调试,默认是false。

e.scriptSessionTimeout,设置超时时间,默认是1800000(30 minutes)。

f.maxCallCount,设置最大请求数,默认是20.

g.activeReverseAjaxEnabled,默认是false,When set to true, the polling and Comet reverse Ajax
techniques are enabled.

h.maxWaitingThreads,多少激活状态的servlet线程,默认是100.

i.maxPollHitsPerSecond,When using the polling reverse Ajax method, this is the maximum number of requests per second allowed. The default value is 40.

j.preStreamWaitTime,等待回调之前回复时间,默认是29000。

k.postStreamWaitTime,回调之后的回复时间,默认是1000

l.[Interface Name],This is used to override parts of DWR without having to build it from source. The default implementation is the default.

m.ignoreLastModified,默认是false,dwr利用缓存控制请求。当是true时,就没有这项功能了。

n.scriptCompressed,默认是false,对返回javascript压缩。才外还有一个非官方的参数是 compressionLevel ,这个参数有三个级别:none, normal,ultra。参考javadoc的JavascriptUtil类。

o.sessionCookieName,dwr使用session cookie获得url请求,一般是使用JSESSIONID,这里你可以使用不同的session名。

p.normalizeIncludesQueryString,默认是false。

q.overridePath,一些web容器修改请求路径导致dwr不能找到相关资源,设置这个参数会复写路径。默认是不使用的。





然后被配置 dwr.xml文件 这个路径在/WEB-INF/下与web.xml同级

dwr.xml 依靠dwr30.dtd

配置如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"
"http://getahead.org/dwr/dwr30.dtd">
<dwr>
<allow>
<create creator="new" javascript="mDelegate">
<param name="class" value="app.MathDelegate" />
</create>

<convert  match=” test.User” converter=” bean” JavaScript=”user”/>
</allow>
</dwr>



介绍一下.dwr一般的文件结构

<create creator=”new” javascript=” ”>

<param name=”calss”  value=”test.DWRUserAccess” >

</create>

creator的选项有不同的选项:每位访问的时候需要为访问的对象从什么地方获取

new ,最常用一般是写的新bean。

none ,不创建任何对象,一般是调用静态方法。

spring ,通过spring framwork访问bean。

jsf ,对象来自jsf。

struts ,使用struts的form bean。

pageflow ,Gives access to a PageFlow from Beehive or WebLogic.

ejb3 ,访问ejb3的sesssion bean



application ,连接application



JavaScript 是在jsp页面中调用这个的对象的名称

<param >:创建对象的是哪个类的对象

其中 name 这个表示为class

Value 这个为了说明class文件的路径



<convert  match=” test.User” converter=” bean” JavaScript=”user”/>

这个convert 标签是使用回调方法对象

match这里填写为test.User 表示返回对象是哪个类

converter 是返回对象是什么使用什么方式这里是表示:javabean



JSP如何调用呢?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>DWR HELLOWorld</title>

    <meta http-equiv="content-type" content="text/html; charset=GB18030">

   <script type='text/javascript' src='dwr/interface/Hello.js'></script>

<script type='text/javascript' src='dwr/engine.js'></script>

<script type='text/javascript' src='dwr/util.js'></script>

  </head>



  <body>

<input id="user" type="text" />

<input type="button" value="提交" onclick="hello();"/>

<div id="result"></div>

  </body>

  <script type="text/javascript">

  function hello(){ 

    var user = $('user').value; 

    Hello.sayHello(user,callback); 



function callback(msg){ 

if (typeof window['DWRUtil'] == 'undefined')

                      window.DWRUtil = dwr.util;

   DWRUtil.setValue('result',msg); 

}

  </script>

</html>

其中下面这些是需要在jsp页面中写入的,因为在运行的时候DWR会自动生成的JS

   <script type='text/javascript' src='dwr/interface/Hello.js'></script>

<script type='text/javascript' src='dwr/engine.js'></script>

<script type='text/javascript' src='dwr/util.js'></script>

而在dwr.xml中配置的class 类如何调用呢就是在function中写入

如:

  function hello(){ 

    var user = $('user').value; 

    Hello.sayHello(user,callback); 



Hello就应该是 你在dwr.xml中的 <create javaScript=”Hello”>的名称

后来.sayHello是 这个类的中的方法名;

这样就是完成了对这个类的调用,就产生了对Ajax异步的使用。

那么在运行的时候需要用的jar文件有 commons-logging.jar ,dwr.jar,log4j.jar这些文件是必须的





DWR 与 struts2.0 整合

添加DWR到web项目

   1、将DWR必要的jar包复制到web项目的WEB-INF/lib目录下;(jar包在dwr.rar中)

   2、在web.xml文件中添加dwr的加载配置,代码如下:



Xml代码

   1. <!-- DWR config --> 
   2. <servlet> 
   3.     <servlet-name>dwr-invoker</servlet-name> 
   4.     <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> 
   5.     <init-param> 
   6.         <param-name>debug</param-name> 
   7.         <param-value>true</param-value> 
   8.     </init-param> 
   9. </servlet> 
  10.  
  11. <servlet-mapping> 
  12.     <servlet-name>dwr-invoker</servlet-name> 
  13.     <url-pattern>/dwr/*</url-pattern> 
  14. </servlet-mapping> 

<!-- DWR config -->

<servlet>

<servlet-name>dwr-invoker</servlet-name>

<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>

<init-param>

  <param-name>debug</param-name>

  <param-value>true</param-value>

</init-param>

</servlet>



<servlet-mapping>

<servlet-name>dwr-invoker</servlet-name>

<url-pattern>/dwr/*</url-pattern>

</servlet-mapping>

 

    3、在WEB-INF/lib目录下新建dwr.xml文件,代码如下:



Xml代码

   1. <?xml version="1.0" encoding="UTF-8"?> 
   2. <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd"> 
   3.  
   4. <dwr> 
   5.     <allow> 
   6.           
   7.     </allow> 
   8. </dwr> 

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">



<dwr>

<allow>



</allow>

</dwr>



   4、在dwr.xml中配置要映射成js的java类,在allow标签中添加如下代码:



Xml代码

   1. <create creator="spring" javascript="loginAction"> 
   2.     <param name="beanName" value="loginAction"/> 
   3. </create> 

<create creator="spring" javascript="loginAction">

<param name="beanName" value="loginAction"/>

</create>



creator="spring"


表示要映射的java类由spring来创建

javascript="loginAction"


表示映射完后,java类在js中的引用名

name="beanName"


用spring 来创建类就用beanName这个设置

value="loginAction"


value的值对应applicationContext.xml中定义的某个bean的id值



   5、一般要在java类中写一个专门用DRW调的方法;

   6、在前台页面调时需添加如下代码:



Html代码

   1. <script type='text/javascript' src='${pageContext.request.contextPath}/dwr/interface/loginAction.js'></script> 这个就是映射后的js类ß     
   2. <script type='text/javascript' src='${pageContext.request.contextPath}/dwr/engine.js'></script>     
   3. <script type='text/javascript' src='${pageContext.request.contextPath}/dwr/util.js'></script

你可能感兴趣的:(spring,框架,Ajax,Web,DWR)