天天看點

javaweb開發中異步ajax請求之DWR架構詳解(通過直接通路java類實作異步請求處理)

   DWR是一個開源的伺服器端ajax架構,js通過直接調用普通java類中的方法實作伺服器端資料處理。原理:架構根據配置在加載頁面的時候自動生成ajax代碼供前端調用。

        該架構隻需一個jar包 csdn有下載下傳:dwr(免費)

   web.xml

<listener><!--配置監聽器 預設啟動時加載dwr.xml(後面有配置) 路徑和web.xml一緻-->
    <listener-class>org.directwebremoting.servlet.DwrListener</listener-class>
  </listener>
  <servlet><!-- 配置servlet和映射路徑 下面有相關參數 比如fileUploadMaxBytes是允許檔案上傳的大小-->
    <servlet-name>dwr-invoker</servlet-name>
    <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
    <init-param>
      <param-name>fileUploadMaxBytes</param-name>
      <param-value>25000000000000</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>accessLogLevel</param-name>
      <param-value>runtimeexception</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>jsonRpcEnabled</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>jsonpEnabled</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>preferDataUrlSchema</param-name>
      <param-value>false</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>
           

   dwr.xml(與web.xml在同一目錄)

<?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="mytest"><!-普通java類-->
      <param name="class" value="org.ITschool.dwr.utilcontroller.mytest"/>
    </create>
    <!-- this is a bad idea for live, but can be useful in testing -->
    <!-- <create creator="spring" javascript="User_Service">
     <param name="BeanName" value="User_Service" />
     </create>-->
      <create javascript="User_Service" creator="spring"><!--使用Spring配置中的bean-->
     <param name="beanName" value="User_Service"/>
      </create>
    <create creator="new" javascript="Uploadprocess">
      <param name="class" value="org.ITschool.dwr.utilcontroller.Uploadprocess"/>
    </create>
     <create creator="new" javascript="uploadFile">
      <param name="class" value="org.ITschool.dwr.utilcontroller.uploadFile"/>
    </create>
    
    <convert converter="exception" match="java.lang.Exception"/>
    <convert converter="bean" match="java.lang.StackTraceElement"/>
   
  </allow>

</dwr>
           

   現在看下上面mytest.java檔案的代碼(以我項目中的代碼為例)

package org.ITschool.dwr.utilcontroller;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;

import net.sf.json.JSON;
import net.sf.json.JSONObject;

public class mytest {
	
  public JSON getInfo(String info1){
	    JSONObject json=new JSONObject();
	    json.put("name", "XXXX");
	    json.put("name1", info1);
	 
	  return json;
  }}
           

  最後看下前端調用了(引入必要的js)

<script type='text/javascript' src='dwr/engine.js'></script><!--必須引入的 js代碼由架構自動生成-->

<script type='text/javascript' src='dwr/util.js'></script><!--必須引入的  js代碼由架構自動生成-->

<script type='text/javascript' src='dwr/interface/mytest.js'></script><!---dwr.xml中配置的mytest java類->

   再看調用

<script type='text/javascript'>

 mytest.getInfo(“方法參數”,function(data){//前一個是方法參數 後面是回調函數

  alert(data.name)

});

</script>

運作結果:彈出 XXXX内容的提示架構。

繼續閱讀