两次request怎么获取到同一个地址内的数据?

阳光_如此耀眼 发布于 2015/01/15 15:01
阅读 254
收藏 0
 我要做一个文件搜索的功能,页面上传递一个文件路径,和要搜索的文件名,然后servlet在这个路径下,搜索匹配的文件,我在前台怎么获取当前搜索了多少个文件了呢? 也就是说我要获取当前的搜索进度?怎么保证每次request都获取的是我正在查找文件的那个进程的数据啊?
加载中
0
纠结名字
每次都保存起来就是了,比如sessionid什么的,不就是找出一个唯一key吗。。。
0
皮蛋猫
皮蛋猫

后台开启线程进行搜索,同时记录处理进度(查找了多少个文件)保存在当前session中,前台通过setInterval访问后台方法,该方法从session中获取当前处理进度传递到前台 。前台再接收展示。

后台搜索完成后记录结束标示,前端停止Interval方法。


阳光_如此耀眼
阳光_如此耀眼
@皮蛋猫 是我逗逼了,线程我用的是.run 没用.start 改成.start就好了,大意了。。。
皮蛋猫
皮蛋猫
回复 @阳光_如此耀眼 : 你的每次请求是来自同一个浏览器么? 还有你的本地浏览器是否禁用的cookie,如果禁用了之后就会跟你说的一样每次都不一样
皮蛋猫
皮蛋猫
回复 @阳光_如此耀眼 : 你的session是怎么更新的呢,代码上上来看看呢
阳光_如此耀眼
阳光_如此耀眼
我这样试了,在线程了不断的更新session,但是我把条件填好,提交了请求后,前台获取不到session的值啊,我把session的id打印来看了一下,提交的那个session的id跟第二次我请求进度的sessionid不一样,这个我就不懂什么原因了
0
阳光_如此耀眼
阳光_如此耀眼

引用来自“皮蛋猫”的评论

后台开启线程进行搜索,同时记录处理进度(查找了多少个文件)保存在当前session中,前台通过setInterval访问后台方法,该方法从session中获取当前处理进度传递到前台 。前台再接收展示。

后台搜索完成后记录结束标示,前端停止Interval方法。


public void run(){
		for(int i=0;i<100;i++){
			System.out.println(i);
			session.setAttribute("flag", i);
			System.out.println(session.getId());
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			
		}

}

//我测试的时候就是用for循环简单的代替文件搜索,可是线程里的sessionid 跟我请求进度的sessionid是不同的



0
阳光_如此耀眼
阳光_如此耀眼

引用来自“皮蛋猫”的评论

后台开启线程进行搜索,同时记录处理进度(查找了多少个文件)保存在当前session中,前台通过setInterval访问后台方法,该方法从session中获取当前处理进度传递到前台 。前台再接收展示。

后台搜索完成后记录结束标示,前端停止Interval方法。


servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String a=request.getParameter("a");
		System.out.println(request.getSession(true).getId());
		System.out.println(request.getSession(true).getAttribute("flag"));
		if("q".equals(a)){
			System.out.println("enter");
			SessionThread se=new SessionThread(request.getSession(true));
			se.run();
		}
		//request.setAttribute("f", ccc);
		response.sendRedirect("index.jsp");
	}
//线程
public class SessionThread extends Thread{
	private HttpSession session;
	public SessionThread(HttpSession session){
		this.session=session;
	}
	public void run(){
		for(int i=0;i<100;i++){
			System.out.println(i);
			session.setAttribute("flag", i);
			System.out.println(session.getId());
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			
		}
	}

}



返回顶部
顶部