DWR2一大特性就是在DWR中可以访问WEB上下文的SERVLET,REQUEST等,主要用到的类是WebContext,WebContextFactory,使用WebContextFacotry.get()方法得到当前的WebContext,原理是将WebContext与当前thread绑定,内部使用ThreadLocal来维护。

use case:
在IE中使用JAVASCRIPT来判断制定用户名经是否已经登陆。

client(index.jsp)
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%
String path 
= request.getContextPath();
String basePath 
= request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
//为演示:假设已经登录成功
request.getSession(true).setAttribute("cur_user","jack");
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  
<head>
    
<base href="<%=basePath%>">
 
    
<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/UserCheck.js'> </script>
   
    
<script language="javascript">
        function checkUserIsLogin(name) 
{
            UserCheck.checkUserIsLogin(name,function(res) 
{
                    var retMsg 
= ( true == res ) ? "已经登录" : "未登录";
                    DWRUtil.setValue(
"msg",retMsg);
                }

            );
        }

    
</script>
  
</head>
 
  
<body>
   
<input type="text" name="username" /><input type="button" value="check" onclick="checkUserIsLogin(document.all.username.value)" />当前session中保存为jack
   
<br/>
   
<div id="msg"></div>
  
</body>
</html>

服务端:UserCheckUtil.java


package com.dwr;

import javax.servlet.http.HttpSession;

import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;

public class UserCheckUtil {
    
/**
     * 
     * 
@param username
     * 
@return
     
*/

    
public boolean checkUserIsLogin(String username) {
        WebContext ctx 
= WebContextFactory.get();
        HttpSession session 
= ctx.getSession(false);
        
if (null != session && username.equals(String.valueOf(session.getAttribute("cur_user"))))
            
return true;
        
else
            
return false;
    }


}

配置文件:dwr.xml

<?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>
    
<create creator="new" javascript="UserCheck">
      
<param name="class" value="com.dwr.UserCheckUtil"/>
    
</create>

  
</allow>

</dwr>

posted on 2008-01-15 11:43  rickyxing  阅读(160)  评论(0编辑  收藏  举报