java 后台输出_将后台输出动态打输出到前台并且显示
我想把如:
for(int i,i<1000,i++)
System.out.println("內(nèi)容")
這段代碼會(huì)輸出1000個(gè)“內(nèi)容”,我想把它輸出的內(nèi)容實(shí)時(shí)的返回給ie并且顯示。也就是說客戶端調(diào)用一個(gè)action然后action會(huì)在控制臺(tái)中打印1000個(gè)“內(nèi)容”,我想要的就是:把這打印1000個(gè)“內(nèi)容”顯示的過程放到ie上去!就是我想讓ie變成和控制臺(tái)一樣!可以打印后臺(tái)的輸出,而且是實(shí)時(shí)的!
用什么技術(shù),或者是什么辦法告訴我就行!有代碼最好了!先謝謝各位了!
問題補(bǔ)充:我的意思是實(shí)時(shí)動(dòng)態(tài)的這樣還是靜態(tài)的啊!必須得等后臺(tái)執(zhí)行完畢,前臺(tái)才能顯示的 啊!!!!
高級(jí)java工程師 寫道
你把放進(jìn)request中,頁面從request獲取,你操作頁面的時(shí)候就會(huì)執(zhí)行
for(int i,i<1000,i++)
System.out.println("內(nèi)容")
System.out.println("內(nèi)容")他會(huì)被調(diào)用,打印
問題補(bǔ)充:嗯!
AngelAndAngel 寫道
我懂你意思了,你用dwr吧,在你action里面打印的時(shí)候,調(diào)用dwr的方法,可以在你指定的jsp中,打印出任何東西。你搜dwr反推技術(shù)。我這有例子,但是太大,沒有剝離,等你下載了dwr后不懂的再說
問題補(bǔ)充:后臺(tái)輸出了一條但是你取了兩次這樣你就會(huì)得到兩條相同的數(shù)據(jù)了,所以這個(gè)方法不可行!呵呵,但還是謝謝了!
FAvril 寫道
我只想到一個(gè)比較粗略的
前臺(tái)用一個(gè)定時(shí)器隔一小小段時(shí)間發(fā)Ajax請(qǐng)求到后臺(tái),然后將請(qǐng)求的內(nèi)容打印
問題補(bǔ)充:感謝大家的回答:
問題已經(jīng)解決了:
如下:
服務(wù)器代碼:
package JSocket;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Server {
private static final int PORT = 3000; // 端口號(hào)
private static List list = new ArrayList(); // 保存連接對(duì)象
private ExecutorService exec;
private ServerSocket server;
public static void main(String[] args) {
new Server();
}
public Server() {
try {
server = new ServerSocket(PORT);
exec = Executors.newCachedThreadPool();
System.out.println("服務(wù)器已啟動(dòng)!");
Socket client = null;
while (true) {
client = server.accept(); // 接收客戶連接
list.add(client);
exec.execute(new ChatTask(client));
}
} catch (IOException e) {
e.printStackTrace();
}
}
static class ChatTask implements Runnable {
private Socket socket;
private BufferedReader br;
private String msg="";
private String msg1="";
public ChatTask(Socket socket) throws IOException {
this.socket = socket;
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
public void run() {
new Thread(new Runnable() {
public void run() {
PrintWriter pw;
try {
pw = new PrintWriter(socket.getOutputStream(), true);
int i=0;
while(true){
msg="\0";
msg1=i+"你好!";
if(i==0){//如果客戶端是第一次訪問服務(wù)器那么發(fā)送,安全策略允許文件,這必須的否則其余的免談
pw.println(msg);
pw.flush();
}
else{//向客戶端發(fā)送數(shù)據(jù)
pw.println(msg1);
pw.flush();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
i++;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
}
}
客戶端代碼:
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" applicationComplete="init()">
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.HTTPService;
private var socket:Socket=new Socket();
[Bindable]
public var ip:String;
[Bindable]
public var port:int;
private function init():void{
getIpPort();
}
private function getIpPort():void{
var configService:HTTPService=new HTTPService();
configService.url="config.xml";
configService.resultFormat="e4x";
configService.addEventListener(ResultEvent.RESULT, configResult);
configService.addEventListener(FaultEvent.FAULT, configFault);
configService.send();
}
private function configResult(event:ResultEvent):void
{
var xml:XML=event.result as XML;
this.ip=xml.ip;
this.port=xml.port;
ConncetServer();
}
//config fault
private function configFault(event:mx.rpc.events.FaultEvent):void
{
Alert.show("load config.xml false!");
}
private function ConncetServer():void
{
socket.addEventListener(ProgressEvent.SOCKET_DATA,OnReceived);
socket.addEventListener(Event.CONNECT , onConnected);
socket.addEventListener(Event.CLOSE, closeHandler);
socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
socket.addEventListener(ProgressEvent.PROGRESS, progressHandler);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
this.socket.connect(this.ip,this.port);
}
private function closeHandler(event:Event):void
{
Alert.show("socket is close!");
}
private function ioErrorHandler(event:IOErrorEvent):void
{
Alert.show("socket ioError!");
}
private function progressHandler(event:ProgressEvent):void
{
trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
}
private function securityErrorHandler(event:SecurityErrorEvent):void
{
trace("securityErrorHandler: " + event);
}
private function onConnected(event:Event):void
{
Alert.show("socket connect success!");
}
private function Send():void
{
//socket.send("message from flex");
}
private function OnReceived(event:ProgressEvent):void
{
var receive:String=socket.readMultiByte(socket.bytesAvailable,"UTF-8");
ExternalInterface.call("addValue",receive);
}
]]>
js代碼:
pageEncoding="utf-8"%>
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
jsocketTestfunction addValue(value) {
//alert(value);
mySocket.innerHTML += value+"
";
}
總結(jié)
以上是生活随笔為你收集整理的java 后台输出_将后台输出动态打输出到前台并且显示的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 360安全路由2P4C体验-360安全路
- 下一篇: java util包类_java.uti