”forward是客户端转向 sendRedirect是服务端转向 我想在服务端转“
以上语句完全理解错误!!
forward是转向,将现在的请求转交,他只能在同一个容器里使用同时保存客户的请求状态。
sendRedirect是重定向,可以在同一个容器里使用,也可以发送其他容器请求,但是会丢失请求信息。它等于重发一个请求。
request.setAttribute是在请求域里面加了一个请求的参数,所以在sendRedirect以后是无法取到request.setAttribute的请求的。
解决办法(两种):
1、如果你是在同一个服务器(容器)里做的转向工作。那么可以这样
把
request.setAttribute("cha", cha);
改成
request.getSession().setAttribute("cha", cha);
然后
<%Object a = (Object)request.getSession().getAttribute("cha");%>
其他不变。
2、你在Servlet里面这样写:
把
response.sendRedirect(“a.jsp”);
改成
response.sendRedirect("a.jsp?a=cha");
那么在a.jsp页面上直接
<%=request.getParameter("a")%>
就可以了,不用写<%Object a = (Object)request.getAttribute("cha");%>.
当然用Forward也可以实现,我就不再写了。
估计你是在servlet里面是sendRedirect的转向,还有一个是forward转向,这两个是不一样的,使用forward式一下
我觉得最没有理由就是<%Object a = (Object)request.getAttribute("cha");%>,叫人家怎么去显示个Object值呢...
<%String a=request.getAttribute("cha").toString() %>
没有理由取不到的
实在不行就放session里
request.getSession.setAttribute("cha",cha);
request.getSession.getAttribute("cha",cha);
你可以用EL表达式拿啊
${cha},器呵呵