DWR이 서버에서 클라이언트로 메시지 푸시

6469 단어 DWR메시지 전달
구현 단계:
첫째, 프로젝트에dwr를 도입한다.jar, 그리고 웹에서.xml에서 다음과 같이 구성됩니다.
<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>

둘째:웹.xml 동급목 증가 dwr.xml, 내용은 다음과 같습니다
<!DOCTYPE dwr PUBLIC  
     "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"  
     "http://getahead.org/dwr/dwr30.dtd">  
<dwr>  
     <alow>  
          <create creator="new" javascript="MessagePush">  
            <param name="class" value="com.pcitc.lw.service.MessagePush"/>  
         </create>  
          <create creator="new" javascript="TestPush">  
            <param name="class" value="com.pcitc.lw.service.Test"/>  
         </create>  
     </alow>  
</dwr>

dwr의 기본 설정은 구체적인 실현 클래스를 가리키며,MessagePush는 페이지의javascript에서 사용(전송된 사람),Test 전송자
셋째, 밀린 페이지
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
  <head>
    <meta http-equiv="cache-control" content="no-cache">  
  </head>  
  <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/MessagePush.js"></script>  
  
  <script type="text/javascript">
         function onPageLoad(){  
            var userId = '${userinfo.id}';  
            MessagePush.onPageLoad(userId);
          }  
         //   
         function showMessage(mgs){  
                alert(mgs);  
         }
  </script>  
  <body onload="onPageLoad();dwr.engine.setActiveReverseAjax(true);dwr.engine.setNotifyServerOnPageUnload(true);">
    <div id="DemoDiv">hello world</div>  
  </body>  
</html>

주의: 페이지를 불러올 때 불러오는 함수 setActive Reverse Ajax와 setNotify ServerOnPageUnload는 dwr의 함수입니다. onPageLoad는 로그인한 사용자와scriptSession을 연결하여 향후 전송을 준비합니다.
네 번째 MessagePush 클래스:
 public void onPageLoad(String userId) {  
       ScriptSession scriptSession = WebContextFactory.get().getScriptSession();  
       scriptSession.setAttribute(userId, userId);  
       DwrSSessionUtil ss = new DwrSSessionUtil();
       try {  
              ss.init(); 
       } catch (ServletException e) {  
              e.printStackTrace();  
       }  
}

다섯째: DwrSsessionUtil:
public class DwrSSessionUtil extends DwrServlet{
    public void init()throws ServletException {  
           Container container = ServerContextFactory.get().getContainer();  
           ScriptSessionManager manager = container.getBean(ScriptSessionManager.class);  
           ScriptSessionListener listener = new ScriptSessionListener() {  
                  public void sessionCreated(ScriptSessionEvent ev) {  
                         HttpSession session = WebContextFactory.get().getSession();  
                         String userId =((User) session.getAttribute("userinfo")).getId()+"";  
                         System.out.println("a ScriptSession is created!");  
                         ev.getSession().setAttribute("userId", userId);  
                  }  
                  public void sessionDestroyed(ScriptSessionEvent ev) {  
                         System.out.println("a ScriptSession is distroyed");  
                  }  
           };  
           manager.addScriptSessionListener(listener);  
    }  
}

다섯 번째 JSP 페이지:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
  <head>
    <meta http-equiv="cache-control" content="no-cache">  
    <meta http-equiv="expires" content="0"
    <script type="text/javascript" src="js/jquery-2.1.js"></script>  
    <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/TestPush.js'></script>
    <script type="text/javascript">
        function test() {  
            var msg = document.getElementById("msgId").value;
            TestPush.sendMessageAuto(msg," ");
        }  
    </script>  
  </head>
  <body>  
    id:<input type="text" name="msgId" id="msgId" /> <br />
    <input type="button" value=" " onclick="test()"  /> 
  </body>  
</html>

여섯째: 코드 푸시:
public class Test{  
    public void sendMessageAuto(String userid, String message){  
        final String userId = userid;  
        final String autoMessage = message;  
        Browser.withAllSessionsFiltered(new ScriptSessionFilter() {  
            public boolean match(ScriptSession session){  
                if (session.getAttribute("userId") == null){
                    return false;  
                }else{
                    return (session.getAttribute("userId")).equals(userId);  
                }
            }  
        }, new Runnable(){
            private ScriptBuffer s = new ScriptBuffer();
            public void run(){
                s.appendCall("showMessage", autoMessage); 
                Collection<ScriptSession> sessions = Browser.getTargetSessions(); 
                for (ScriptSession scriptSession : sessions){  
                    scriptSession.addScript(s);  
                }  
            }  
        });  
    }  
}

좋은 웹페이지 즐겨찾기