tomcat

1.public class ChatServlet
2.    extends HttpServlet implements CometProcessor {
3.
4.    protected ArrayList<HttpServletResponse> connections =
5.        new ArrayList<HttpServletResponse>();
6.    protected MessageSender messageSender = null;
7.
8.    public void init() throws ServletException {
9.        messageSender = new MessageSender();
10.        Thread messageSenderThread =
11.            new Thread(messageSender, "MessageSender[" + getServletContext().getContextPath() + "]");
12.        messageSenderThread.setDaemon(true);
13.        messageSenderThread.start();
14.    }
15.
16.    public void destroy() {
17.        connections.clear();
18.        messageSender.stop();
19.        messageSender = null;
20.    }
21.
22.    /**
23.     * Process the given Comet event.
24.     *
25.     * @param event The Comet event that will be processed
26.     * @throws IOException
27.     * @throws ServletException
28.     */
29.    public void event(CometEvent event)
30.        throws IOException, ServletException {
31.        HttpServletRequest request = event.getHttpServletRequest();
32.        HttpServletResponse response = event.getHttpServletResponse();
33.        if (event.getEventType() == CometEvent.EventType.BEGIN) {
34.            log("Begin for session: " + request.getSession(true).getId());
35.            PrintWriter writer = response.getWriter();
36.            writer.println("<!doctype html public \"-//w3c//dtd html 4.0 transitional//en\">");
37.            writer.println("<head><title>JSP Chat</title></head><body bgcolor=\"#FFFFFF\">");
38.            writer.flush();
39.            synchronized(connections) {
40.                connections.add(response);
41.            }
42.        } else if (event.getEventType() == CometEvent.EventType.ERROR) {
43.            log("Error for session: " + request.getSession(true).getId());
44.            synchronized(connections) {
45.                connections.remove(response);
46.            }
47.            event.close();
48.        } else if (event.getEventType() == CometEvent.EventType.END) {
49.            log("End for session: " + request.getSession(true).getId());
50.            synchronized(connections) {
51.                connections.remove(response);
52.            }
53.            PrintWriter writer = response.getWriter();
54.            writer.println("</body></html>");
55.            event.close();
56.        } else if (event.getEventType() == CometEvent.EventType.READ) {
57.            InputStream is = request.getInputStream();
58.            byte[] buf = new byte[512];
59.            do {
60.                int n = is.read(buf); //can throw an IOException
61.                if (n > 0) {
62.                    log("Read " + n + " bytes: " + new String(buf, 0, n)
63.                            + " for session: " + request.getSession(true).getId());
64.                } else if (n < 0) {
65.                    error(event, request, response);
66.                    return;
67.                }
68.            } while (is.available() > 0);
69.        }
70.    }
71.
72.    public class MessageSender implements Runnable {
73.
74.        protected boolean running = true;
75.        protected ArrayList<String> messages = new ArrayList<String>();
76.
77.        public MessageSender() {
78.        }
79.
80.        public void stop() {
81.            running = false;
82.        }
83.
84.        /**
85.         * Add message for sending.
86.         */
87.        public void send(String user, String message) {
88.            synchronized (messages) {
89.                messages.add("[" + user + "]: " + message);
90.                messages.notify();
91.            }
92.        }
93.
94.        public void run() {
95.
96.            while (running) {
97.
98.                if (messages.size() == 0) {
99.                    try {
100.                        synchronized (messages) {
101.                            messages.wait();
102.                        }
103.                    } catch (InterruptedException e) {
104.                        // Ignore
105.                    }
106.                }
107.
108.                synchronized (connections) {
109.                    String[] pendingMessages = null;
110.                    synchronized (messages) {
111.                        pendingMessages = messages.toArray(new String[0]);
112.                        messages.clear();
113.                    }
114.                    // Send any pending message on all the open connections
115.                    for (int i = 0; i < connections.size(); i++) {
116.                        try {
117.                            PrintWriter writer = connections.get(i).getWriter();
118.                            for (int j = 0; j < pendingMessages.length; j++) {
119.                                writer.println(pendingMessages[j] + "<br>");
120.                            }
121.                            writer.flush();
122.                        } catch (IOException e) {
123.                            log("IOExeption sending message", e);
124.                        }
125.                    }
126.                }
127.
128.            }
129.
130.        }
131.
132.    }
133.
134.}
135.
时间: 2024-10-28 13:57:46

tomcat的相关文章

配置-apache和tomcat整合的问题

问题描述 apache和tomcat整合的问题 一台服务器,配置完成以后,实现效果是www.xxx.com访问php项目,www.xxx.com/demo访问java项目,windows系统... 解决方案 apache不会用,Nginx实现起来比较容易.

web service-axis2处理webServices在was环境下报错,tomcat下正常

问题描述 axis2处理webServices在was环境下报错,tomcat下正常 关键代码如下 /** * 申诉请求 */ public static String appealRequest(String requestXML, ImageFileData[] file) { String result = ""; try { // 使用RPC方式调用WebService RPCServiceClient serviceClient = new RPCServiceClient(

tomcat 和 jboss的热部署(热发布)问题

所谓的热部署(热发布)(下面称为"热部署"),就是说,在web工程发布之后,不可避免的,会遇到修改BUG的问题.现在的热部署就是为了解决这个问题,其功能就是说:在不停止web服务的同时,对jsp和java类进行修改,修改后的效果同时还能够在页面上显示出来.节省了调试时间,提高了效率.不过,修改配置文件是个例外,如果对配置文件做修改,一定要重启web服务.         常用的web服务器一般为tomcat和jboss,现一一做介绍.         1.tomcat热部署      

怎么将域名直接指向阿里云服务器上tomcat服务器下的应用

问题描述 怎么将域名直接指向阿里云服务器上tomcat服务器下的应用 而不是通过www.xxx.com:8080/webapp,不用nginx可以吗,新手求教........ 解决方案 域名指向阿里服务器的公网ip 你的tomcat配置使用80端口(而不是8080端口),如果有iis等别的web server占用了端口,先禁用它们. 防火墙允许80端口 域名和服务器备案 其它问题,可以问阿里的客服. 解决方案二: 可以啊,,直接用域名绑定你的阿里云服务器的公网ip就好了

通向架构师的道路(第四天)之Tomcat性能调优-让小猫飞奔

一.总结前一天的学习 从"第三天"的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是: ü   吞吐量 ü   Responsetime ü   Cpuload ü   MemoryUsage 我们也在第三天的学习中对Apache做过了一定的优化,使其最优化上述4大核心指标的读数,那么我们的Apache调优了,我们的Tomcat也作些相应的调整,当完成今的课程后,到时你的"小猫"到时真的会"飞"起来的,所以请用心看完,这篇文章一方面用

学习tomcat之tomcat单机多实例部署

想要获得更多的文章,可以关注我的微信ilanniweb 为了有效的利用服务器的资源,我们现在需要在一台服务器上部署多个tomcat,这也就是我们经常所说的tomcat单机多实例部署. PS:本次实验的测试OS为centos6.5 64bit. 一.配置JAVA_HOME路径 要配置JAVA_HOME路径,我们就要首先安装jdk.jdk的安装在此我们使用的是yum方式,没有使用源码方式安装. 1.1 yum安装jdk jdk我们现在是使用的yum方式进行安装的,首先我们先来查看能够安装的jdk版本

tomcat启动的问题,报异常

问题描述 tomcat启动的问题,报异常 解决方案 和tomcat没关系.是你web.xml中的配置的servlet加载的时候报错了 解决方案二: 采用flex+struts+spring+hibernate框架,启动tomcat出现异常,寻求解决方法中..... 严重: StandardWrapper.Throwablejava.lang.NullPointerException?at flex.management.BaseControl.getObjectName(BaseControl.

tomcat启动报错-eclipse 启动 tomcat 异常

问题描述 eclipse 启动 tomcat 异常 tomcat: apache-tomcat-7.0.54-windows-x86 绿色版 eclipse: eclipse-jee-luna-R-win32 . eclipse-jee-indigo-SR2-win32 直接在 ${TOMCAT_HOME}/bin 下双击 startup.bat 可以正常启动,无任何问题, 但是在 eclipse 中配置好之后,加入web工程,启动tomcat,就出现了下面的错误信息: Error occurr

tomcat启动报错-同一项目在我的电脑上启动报错(缺少jar包,其实是有的),但在别人的电脑上却能正常启动,请求帮助

问题描述 同一项目在我的电脑上启动报错(缺少jar包,其实是有的),但在别人的电脑上却能正常启动,请求帮助 解决方案 如果是这样,那说明你引入的有问题啊, 1. 重新引入jar一下!!!对着jar右键add- 2. clean一下!!! 3. 重新发布项目 解决方案二: web项目直接放在lib文件夹下,就不需要add了吧, 此外,这项目在别的电脑可以正常运行 解决方案三: 有可能是jar包没有引入,在build path 把项目所有jar包都引进去 解决方案四: 谢谢各位,问题已解决.缘由是t

tomcat-为什么我的myeclipse2014使用自己配置的Tomcat时,无法部署项目

问题描述 为什么我的myeclipse2014使用自己配置的Tomcat时,无法部署项目 配置文件和错误信息如上,尝试百度的好多方法,都得不到解决,谁能帮我看看,谢谢啦. 解决方案 感谢大家,我找到问题了,myeclipse2014配置自己安装的tomcat要把tomcat安装在某盘(我安装在C盘)根目录,如:C:Tomcat 7.0.以前安装在默认路径下,老出错.现在好啦,如果还有其他朋友遇到这个问题,就试试重新安装tomcat到根目录吧. 解决方案二: tomcat中无法部署myeclips