新手的疑问:服务器反推

Left_you 2012-02-13 04:46:07
我根据自己的猜想和网上的资料,用Ajax和java servlet模拟了一个简单的服务器反推的过程:
(之前没研究过这个东西,所以有一些疑问,还请懂的人不吝赐教)

前台页面:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>reserver.html</title>

<meta http-equiv="content-type" content="text/html; charset=UTF-8">

<script type="text/javascript">
var req;
if(window.XMLHttpRequest){
req = new XMLHttpRequest();
}else {
//IE5.0 IE5.5 IE6.0
req = new ActiveXObject('Microsoft.XMLHTTP');
}

function listen(){
var b = Math.random();
req.open("get","reserver.servelet?a="+b,true);
req.onreadystatechange = get;
req.send(null);
}

function get(){
if (req.readyState == 4 && req.status == 200) {
document.getElementById("ina").value = req.responseText;
listen();
}
}
</script>
</head>

<body onload="listen();">
<input id="ina">
</body>
</html>




后台处理:

package reserver;

import java.io.IOException;
import java.util.Scanner;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ResAction extends HttpServlet {

private static final long serialVersionUID = -6895838476081243236L;
private int p1 = 0;

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println(this.hashCode());

//服务器的监听程序
Scanner sc = new Scanner(System.in);
String str = sc.next();

resp.setCharacterEncoding("UTF-8");
resp.getWriter().print(str);
resp.getWriter().close();
}

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("post");
}
}


首先 我开启tomcat服务器,控制台输出的哈希码是相同的。
我开两个窗口访问页面,为什么要在控制台输入两次字符服务器才发出响应?
比如我开了两个浏览器,要子服务器输入:achar 回车 ;bchar 回车 两个浏览器同时显示 achar 和 bchar

还有,servlet之间怎么通信? 放到线程里面做?
...全文
154 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Left_you 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

if (req.readyState ==3 && req.status == 200)



输出一次后flush了没有?没有就可能不会返回,服务端有长连接没?while(true){....}
[/Quote]

服务端的代码我已经贴上去了就是一个阻塞,等待控制台输入。

我开两个窗口访问页面,为什么要在控制台输入两次字符服务器才发出响应?
还有,servlet之间怎么通信? 放到线程里面做?
这三个是我的问题,其他都是一些现象描述, 凌乱了!
mngzilin 2012-03-23
  • 打赏
  • 举报
回复
readyState ==3这个只有在非ie浏览器才可以使用,ie浏览器需要

    function Change(str){ 
window.document.getElementById("div1").innerHTML=str;
}
function onload(){
var ifrpush = new ActiveXObject("htmlfile"); // 创建对象
ifrpush.open(); //打开
var ifrDiv = ifrpush.createElement("div"); //添加一个DIV"
ifrpush.appendChild(ifrDiv); //添加到 htmlfile
ifrpush.parentWindow.Change=Change; //注册 javascript 方法 搞不明白为什么还要注册
ifrDiv.innerHTML = "<iframe src='ServerPush.ashx'></iframe>"; //在div里添加 iframe$ a' }F
ifrpush.close(); //关闭
}
onload();
mngzilin 2012-03-23
  • 打赏
  • 举报
回复
readyState ==3 在接受到部分数据后的状态,readyState ==4接受到全部数据后的状态
mngzilin 2012-03-23
  • 打赏
  • 举报
回复
if (req.readyState ==3 && req.status == 200)



输出一次后flush了没有?没有就可能不会返回,服务端有长连接没?while(true){....}
josephSC 2012-03-22
  • 打赏
  • 举报
回复
不太清楚这个问题,帮顶了。版主删楼是因为灌水回复,不知道我这层会不会被删。。。
Left_you 2012-03-19
  • 打赏
  • 举报
回复
没明白为什么版主删楼。。。 真心的不明白

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧