request.setAttribute()与request.getAttribute()取值问题

在项目的创建的过程中,我曾经想要从系统中得到一个参数,并让这个参数能够在web组件中传递使用。

以下为使用方式:

Timestamp voteTime = (Timestamp) request.getAttribute("voteTime");
		if(voteTime==null||(nowTime.compareTo(voteTime))>1){
			if(voteTime!=null)
				System.out.println("上次投票时间"+(request.getAttribute("voteTime"));
			else {
				System.out.println("voteTime==null");
			}
			request.setAttribute("voteTime", nowTime);
			System.out.println("成功投票,跳转投票处理页面"+nowTime);
			dispatcher = servletContext.getRequestDispatcher("/voteView.jsp");
		}else{
			System.out.println("距上次投票时间未超过1分钟,跳转等候页面"+voteTime);
			dispatcher = servletContext.getRequestDispatcher("/timeLoding.jsp");
		}

代码描述:先获取名为"voteTime"的参数(不论它是否已被赋值),然后在判断中对其进行处理:未赋值就先给它赋值;已经赋值的,便得到旧数据,再赋予新数据

但是却遇到一个问题:

request.getAttribute("voteTime")
不论"voteTime"是否已被赋值,获得到的永远是null。

所以查找了一下资料才知道:

request对象既是jsp的内置对象,也是jsp的作用域之一。

此处遇到的错误原因跟request的作用域有关,request只在forward跳转的前后有关。在servlet_1中使用setAttribute,在其联系的1.jsp 里可以使用getAttribute来取到其值。但在servlet_2中就不行了,因为过期了。

若想让参数在整个项目过程中前后可用,应将参数存在会话里

所以此处应改为:

Timestamp voteTime = (Timestamp) request.getSession().getAttribute("voteTime");
request.getSession().setAttribute("voteTime", nowTime);




你可能感兴趣的:(request.setAttribute()与request.getAttribute()取值问题)