티스토리 뷰
먼저 Eclipse에서 Dynamic Web Service 프로젝트를 생성합니다.
아래의 그림같이 java 파일과 html 파일을 생성합니다.
TailorWebSocketServlet.java
1: package de.devsurf.html.tail;
2:
3: import java.io.IOException;
4: import java.util.Date;
5: import java.util.Set;
6: import java.util.concurrent.CopyOnWriteArraySet;
7: import java.util.concurrent.Executors;
8: import java.util.concurrent.ScheduledExecutorService;
9: import java.util.concurrent.TimeUnit;
10:
11: import javax.servlet.ServletException;
12: import javax.servlet.http.HttpServletRequest;
13: import javax.servlet.http.HttpServletResponse;
14:
15: import org.eclipse.jetty.websocket.WebSocket;
16: import org.eclipse.jetty.websocket.WebSocketServlet;
17:
18: public class TailorWebSocketServlet extends WebSocketServlet {
19: private static final long serialVersionUID = -7289719281366784056L;
20: public static String newLine = System.getProperty("line.separator");
21:
22: private final Set<TailorSocket> _members = new CopyOnWriteArraySet<TailorSocket>();
23: private ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
24:
25: @Override
26: public void init() throws ServletException {
27: super.init();
28: executor.scheduleAtFixedRate(new Runnable() {
29: @Override
30: public void run() {
31: System.out.println("Running Server Message Sending");
32: for(TailorSocket member : _members){
33: System.out.println("Trying to send to Member!");
34: if(member.isOpen()){
35: System.out.println("Sending!");
36: try {
37: member.sendMessage("Sending a Message to you Guys! "+new Date()+newLine);
38: } catch (IOException e) {
39: e.printStackTrace();
40: }
41: }
42: }
43: }
44: }, 2, 2, TimeUnit.SECONDS);
45:
46: }
47:
48: protected void doGet(HttpServletRequest request,
49: HttpServletResponse response) throws ServletException, IOException {
50: getServletContext().getNamedDispatcher("default").forward(request,
51: response);
52: }
53:
54: public WebSocket doWebSocketConnect(HttpServletRequest request,
55: String protocol) {
56: return new TailorSocket();
57: }
58:
59: class TailorSocket implements WebSocket.OnTextMessage {
60: private Connection _connection;
61:
62: @Override
63: public void onClose(int closeCode, String message) {
64: _members.remove(this);
65: }
66:
67: public void sendMessage(String data) throws IOException {
68: _connection.sendMessage(data);
69: }
70:
71: @Override
72: public void onMessage(String data) {
73: System.out.println("Received: "+data);
74: }
75:
76: public boolean isOpen() {
77: return _connection.isOpen();
78: }
79:
80: @Override
81: public void onOpen(Connection connection) {
82: _members.add(this);
83: _connection = connection;
84: try {
85: connection.sendMessage("Server received Web Socket upgrade and added it to Receiver List.");
86: } catch (IOException e) {
87: e.printStackTrace();
88: }
89: }
90: }
91: }
test.html
1: <html>
2: <head>
3: <title>Tail-based by Web Sockets</title>
4: <script type='text/javascript'>1:
2: if (!window.WebSocket)3: alert("WebSocket not supported by this browser");4:
5: function $() {6: return document.getElementById(arguments[0]);7: }
8: function $F() {9: return document.getElementById(arguments[0]).value;10: }
11:
12: function getKeyCode(ev) {13: if (window.event)14: return window.event.keyCode;15: return ev.keyCode;16: }
17:
18: var server = {19: connect : function() {20: var location = document.location.toString().replace('http://',21: 'ws://').replace('https://', 'wss://').replace('test.html','servlet/WebSocket');22: alert(location);
23: this._ws = new WebSocket(location);24: this._ws.onopen = this._onopen;25: this._ws.onmessage = this._onmessage;26: this._ws.onclose = this._onclose;27: },
28:
29: _onopen : function() {30: server._send('websockets are open for communications!');31: },
32:
33: _send : function(message) {34: if (this._ws)35: this._ws.send(message);36: },
37:
38: send : function(text) {39: if (text != null && text.length > 0)40: server._send(text);
41: },
42:
43: _onmessage : function(m) {44: if (m.data) {45: var messageBox = $('messageBox');46: var spanText = document.createElement('span');47: spanText.className = 'text';48: spanText.innerHTML = m.data;
49: var lineBreak = document.createElement('br');50: messageBox.appendChild(spanText);
51: messageBox.appendChild(lineBreak);
52: messageBox.scrollTop = messageBox.scrollHeight
53: - messageBox.clientHeight;
54: }
55: },
56:
57: _onclose : function(m) {58: this._ws = null;59: }
60: };
61:
</script>1:
2: <style type='text/css'>3: div {
4: border: 0px solid black;
5: }
6:
7: div#messageBox {
8: clear: both;
9: width: 40em;
10: height: 20ex;
11: overflow: auto;
12: background-color: #f0f0f0;
13: padding: 4px;
14: border: 1px solid black;
15: }
16:
17: div#input {
18: clear: both;
19: width: 40em;
20: padding: 4px;
21: background-color: #e0e0e0;
22: border: 1px solid black;
23: border-top: 0px
24: }
25:
26: div.hidden {
27: display: none;
28: }
29:
30: span.alert {
31: font-style: italic;
32: }
33: </style>
34: </head>
35: <body>
36: <div id='messageBox'></div>37: <div id='input'>38: <div>
39: <input id='connect' class='button' type='submit' name='Connect'40: value='Connect' />41: </div>
42: </div>
43: <script type='text/javascript'>44: $('connect').onclick = function(event) {45: server.connect();
46: return false;47: };
48:
</script>
5:
6: <p>
7: This is a demonstration of the Jetty websocket server.
8: </p>
9: </body>
10: </html>
WebContent/WEB-INF/web.xml 을 생성하고 아래와 같이 입력합니다.
1: <?xml version="1.0" encoding="UTF-8"?>
2: <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
3: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4: xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
5: http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
6: <display-name>tailor</display-name>
7: <servlet>
8: <servlet-name>WebSocket</servlet-name>
9: <servlet-class>de.devsurf.html.tail.TailorWebSocketServlet</servlet-class>
10: </servlet>
11: <servlet-mapping>
12: <servlet-name>WebSocket</servlet-name>
13: <url-pattern>/servlet/*</url-pattern>
14: </servlet-mapping>
15:
16: <welcome-file-list>
17: <welcome-file>test.html</welcome-file>
18: </welcome-file-list>
19: </web-app>
WebContent/WEB-INF/lib 에 아래 두 라이브러리를 추가해줍시다.
jetty-util-8.1.3.v20120416.jar
jetty-websocket-8.1.3.v20120416.jar
위 두 파일은 제티를 다운 받으면 lib 폴더에 있습니다.
실행 결과
'[Web]' 카테고리의 다른 글
Jetty, JSP, Eclipse 연동 (0) | 2012.04.08 |
---|