DWR3.0简单原理介绍和案例

DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。

DWR是一个RPC库,可以很容易地从JavaScript调用Java函数并从Java调用JavaScript函数(也称为反向Ajax)

DWR由两个主要部分组成:

  • 在服务器上运行的Java Servlet,它处理请求并将响应发送回浏览器。
  • JavaScript在浏览器中运行,可以发送请求并可以动态更新网页。

DWR通过基于Java类动态生成Javascript来工作。代码执行一些Ajax使其感觉神奇执行在浏览器上发生,但实际上服务器正在执行代码,DWR正在编组数据前后。

这种从Java到JavaScript的远程处理功能的方法使DWR用户感觉非常像传统的RPC机制,如RMI或SOAP,其好处是它可以在Web上运行而无需Web浏览器插件。

案例分析

demo下载地址:https://download.csdn.net/download/u012401711/10561121

首先我们看搭建的过程

官网下载dwr的jar包和相关的js文件

将dwr.jar引入工称中,将engine.js和util.js放入到工程的静态文件区(随意放置),创建一个dwr.xml文件和web.xml同级

DWR3.0简单原理介绍和案例_第1张图片

 首先说一下web.xml 配置



  dwr-demo
  
    index.jsp
  
  
    dwr-invoker
      
            org.directwebremoting.servlet.DwrServlet  
        
    
      crossDomainSessionSecurity
      false
    
    
      allowScriptTagRemoting
      true
    
    
      classes
      java.lang.Object
    
    
      activeReverseAjaxEnabled
      true
    
    
      initApplicationScopeCreatorsAtStartup
      true
    
    
      maxWaitAfterWrite
      3000
    
    
      debug
      false
    
    
      logLevel
      WARN
    
    1
  
  
    dwr-invoker
    /static/dwr/*
  

dwr就是通过servlet-mapping地址映射去执行相应的servlet逻辑代码,注意映射的地址就是上面提到的engine.js和util.js所在文件的地址。




	
		
		
			
		

	

dwr.xml的内容,class类就是我们需要编写的Java类,其中javaacript就是后面提到jsp页面引入的js的名称。

    
	
  	
  	
    

页面引入的js中上面那两个文件是存在的第三个文件则没有,这个就会生成的js名称就是在dwr.xml中提到的,文件夹路径固定的在dwr静态目录后面加上interface。

编写Java类

public class RequestPush{
	
    public static Map map = new HashMap();
	
    public void onPageLoad(String flag) {
    	//ScriptSession每个页面都存在一个
        ScriptSession scriptSession = WebContextFactory.get().getScriptSession();
        //如果一个页面存在多个推送模块,可以使用,隔开
        if(map.containsKey(scriptSession)){
        	String value = map.get(scriptSession);
        	map.put(scriptSession, value+","+flag);
        }else{
        	map.put(scriptSession, flag);
        }
        scriptSession.setAttribute("flag", map);
        DwrScriptSessionManagerUtil dwrScriptSessionManagerUtil = new DwrScriptSessionManagerUtil();
        try {
               dwrScriptSessionManagerUtil.init();
               System.out.println("----dwrScriptSessionManagerUtil--初始化完成---");
        } catch (ServletException e) {
               e.printStackTrace();
               System.out.println("----dwrScriptSessionManagerUtil--初始化失败---");
        }

    }
}

里面的方法名可以随意定义,里面我做了一些业务处理。这里面的方法就是相当于页面要去订阅消息,就如订报纸有很多种每个人订阅的类型不同,我们首先要告诉服务器我要订阅什么类型的数据,服务器才能将你需要的数据推送给你。

DWR3.0简单原理介绍和案例_第2张图片

我们看到js中调用的方法是 RequestPush.onPageLoad()发现有点眼熟,其实就是我们实现的Java类.方法 好像前端可以直接像后端一样直接调用Java的方法,我们都知道这是不可能的,那是怎么实现的呢?

DWR3.0简单原理介绍和案例_第3张图片

查看之前说过的前端页面引用的的不存在的js文件中的内容发现 ,通过这个文件做桥梁来实现前后端的动态的数据交互。

你可能感兴趣的:(数据推送)