jsp中线程输出。 错在 out.println("OK");你运行一下就知道了啊! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把out作为参数传进去,加个方法 setOut(PrintStream out) 在ChatShow 中加个PrintStream 的类成员变量就可以了 to: mem_fox(JAVA狐狸) 还是不可以啊!!!————————————————<%@ page contentType = "text/html; charSet=gb2312" %><%@ page import="javax.servlet.*,java.io.*,java.util.*,java.sql.*"%><% class ChatShow implements Runnable { int k = 0; Thread thr = null; javax.servlet.jsp.JspWriter pw; public void setOut(JspWriter out) { pw = out; } public void start() { if (thr == null) { thr = new Thread(this); thr.start(); } } public void stop() { if (thr != null) { thr.stop(); thr = null; } } public void run() { while(true) { try { k++; pw.pw.println(k + "ok"); //希望在网页上输出 } catch (Exception e) { System.out.println("Error in while:" + e.getMessage()); } try { thr.sleep(2000); } catch (InterruptedException e){} } } }// javax.servlet.jsp.PageContext pageContext; ChatShow CS = new ChatShow(); CS.setOut(out); CS.start();%> to:mem_fox(JAVA狐狸) 还是不行啊 要用内建对象Response的getWriter或者getOutputStream方法获得PrintWriter或者ServletOutputStream,然后用他们向页面上输出信息 线程启动方式这样好吗?没试过这样做。记得通常是不需要重载start方法吧?同时从线程中取得数据输出到页面方式应该是不可行的。jsp叶面接收到客户端请求后就需要马上给出响应,然后就把jsp解析成静态的页面了。而线程是不可预知合适结束、何时有返回值。所以从理论上来说,这种方法是不可行的。不知道你为什么需要在jsp中启动线程? 如果仅仅希望编译通过可以这样改: pw.println("ok");... final javax.servlet.jsp.JspWriter pw=out;让内嵌类使用局部变量 ChatShow CS = new ChatShow(); CS.setOut(pw); CS.start();但我猜想这个结果不会然你满意,正如楼上所说的"..解析成静态的页面了"你不会在一面上看看一个变动得数字,servlet在这里也帮不上忙,他和jsp本质上是一个东西.嵌入applet实现这个没有问题的. pw.pw.println(k + "ok"); ~问什么要pw.pw.xxx? [Java求助]注册成功发送短信 求助 eclipse和struts2问题 session如何保存js变量 想找个人一起学JSP 查询语句帮帮看看下~~~ 装了5.5后再装5.0的tomcat就不行了请大家帮帮忙 jsp学习新书,2005年出版之《Beginning JavaServer Pages》亚马逊书评5颗星 急啊,jsp页面跳转与换行问题 XP SP2用户帮帮忙,急急 在JSP中用<c:forEach>标签如何输出一个10行10列的表格呀? UNIX主机如何用JSP连接NT主机的ACCESS数据库? 怎样在IIS中配置JSP?
在ChatShow 中加个PrintStream 的类成员变量就可以了
还是不可以啊!!!
————————————————
<%@ page contentType = "text/html; charSet=gb2312" %>
<%@ page import="javax.servlet.*,java.io.*,java.util.*,java.sql.*"%>
<%
class ChatShow implements Runnable { int k = 0;
Thread thr = null;
javax.servlet.jsp.JspWriter pw;
public void setOut(JspWriter out)
{
pw = out;
} public void start()
{
if (thr == null)
{
thr = new Thread(this);
thr.start();
}
} public void stop()
{
if (thr != null)
{
thr.stop();
thr = null;
}
}
public void run()
{
while(true)
{
try
{
k++;
pw.pw.println(k + "ok");
//希望在网页上输出
} catch (Exception e) {
System.out.println("Error in while:" + e.getMessage());
}
try
{
thr.sleep(2000);
} catch (InterruptedException e){} }
}
}
// javax.servlet.jsp.PageContext pageContext;
ChatShow CS = new ChatShow();
CS.setOut(out);
CS.start();
%>
还是不行啊
记得通常是不需要重载start方法吧?同时从线程中取得数据输出到页面方式应该是不可行的。
jsp叶面接收到客户端请求后就需要马上给出响应,然后就把jsp解析成静态的页面了。而线程是不可预知合适结束、何时有返回值。
所以从理论上来说,这种方法是不可行的。不知道你为什么需要在jsp中启动线程?
pw.println("ok");
...
final javax.servlet.jsp.JspWriter pw=out;让内嵌类使用局部变量
ChatShow CS = new ChatShow();
CS.setOut(pw);
CS.start();
但我猜想这个结果不会然你满意,正如楼上所说的"..解析成静态的页面了"
你不会在一面上看看一个变动得数字,servlet在这里也帮不上忙,他和jsp本质上是一个东西.嵌入applet实现这个没有问题的.
~问什么要pw.pw.xxx?