http://topic.csdn.net/u/20081213/22/3b882bd9-31e3-4108-84c2-adcea27e9adf.html?seed=724907633  
看这个帖子去吧

解决方案 »

  1.   

        request.setAttribute()   设置reqeust范围中的属性值
      内部跳转:
      request.getRequestDispatcher("index.jsp").forward(request, resposne);
      外部跳转:
      response.sendRedirect("index.jsp");
      内部跳转是一次请求和一次响应
      外部跳转是两次请求和两次响应
      

  2.   

    request.setAttribute(name) :
    获得由指定的属性的值,如果不存在指定的属性,返回NULL
    request.getRequestDispatcher() :
    跳转页面
      

  3.   

    request.setAttribute(name, value)   设置一个name的value并保存于request范围中  如有这个name存在则覆盖
    request.getRequestDispatcher("页面").forward(request, response);带上原有的request response实现页面转发
    response.sendRedirect("页面");没有带request response参数    这个是重定向   原来的request.setAttribute的值都无法获取到了
      

  4.   

    request.getAttribute():用来在同一个request周期中保存变量使用。比如servlet调用后,推出JSP页面,这是一个request周期,如果在Jsp页面需要servlet中的一些 处理结构,就从request.getAttribute中获取。request.getRequestDispatcher("url").forword(request,response):request.getRequestDispatcher("url").forword(request,response)是请求转发,也就是说,一个Servlet向当前的Servlet发出请求后,经过这个方法后,请求会继续转发到请求的URL,在这个过程中,只向服务器发出一次请求.效率当然也就高了.
    从在浏览器地址栏中显示的URL来看,response.sendRedirect("url"),地址栏中的URL会发生变化,会显示重定向的这个URL的地址,而request.getRequestDispatcher("url").forword(request,response)这种方法,地址栏中的地址是不变的forward():forward()是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。