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);
}
}
});
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
DWR에서 클래스 이름을 팝업하고 메서드에 들어가지 않는 이유입력 정보 상자를 작성하고 번호를 작성할 때 번호가 존재하는지 확인하고 DWR 테스트를 할 때 대응하는 클래스 이름을 팝업하여 클래스에 들어가는 방법이 없습니다(방법 안에 단점이 있음).어느 분께서 잘못이 어디에 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.