在主面中包含<jsp:include page="head.jsp" /> head页面也有一个独立的servlet 
head.jsp页面
<%
if(request.getAttribute("callBack")==null)
{
request.getRequestDispatcher("/Head").forward(request,response);

}
else
{
 out.print(request.getAttribute("callBack"));
}
%>
Head的servlet:
/*
* 属性
*/
request.setAttribute("callBack", "000");====================================
问题疑惑:
out.print(request.getAttribute("callBack")); 这一句总是输出 null
这是什么原因,难道主页包含了head.jsp ,head.jsp中的request和response 这两个对象是index中的吗?怎么才能用到head.jsp中自已的request,response

解决方案 »

  1.   

    “head页面也有一个独立的servlet”
    这句话是什么意思?
    <jsp:include page="head.jsp" />
    JSP的Include是在服务器端执行的包含,类似于函数调用,某个JSP去调用另一个JSP,在此过程中,request和response都是相同的;head.jsp执行完毕后,类似函数调用执行完毕,回返回主调JSP中继续执行后续代码。
    “怎么才能用到head.jsp中自已的request,response”
    不存在这个概念,request和response都是针对浏览器端请求来的,浏览器仅就请求了一次,所以这些对象也就只有一份。
      

  2.   

    “head页面也有一个独立的servlet”
    这句话是什么意思?意思是
    index.jsp------Index(servlet)处理数据后返回给index.jsp显示head.jsp-------Head(servlet)处理数据后返回head.jsp显示这两个页都有自已对应的一个servlet处理数据比如head.jsp里有一些导航菜单是从数据库中读取的,head.jsp是要被每个页面都包含的,Head(servlet)这里进行读取数据库内容后 request.setAttrubute();request.getrequestdispatcher("/head.jsp").forward(request,response) 转向到head.jsp,,,但是在head.jsp中request.getAttribute();得到的都是null,,显示/Index中的request.getAttribute("index")正常这证明用的request对象是index.jsp中的直接在地址栏中输入http://....../head.jsp这样没有问题可以得到值,这证明是用的head.jsp自已的request这个对象head.jsp中得到request跟index.jsp一样的话,我在head.jsp中已经通过request.getrequestdispatcher(/Head).forward(request)传给了Head(servlet)Head(servlet)处理完数据后返回给head.jsp,还是显示不出数据,,,,
      

  3.   


    那么,include 那个 servlet,而不是jsp。
      

  4.   

    问题找到了问题一:head.jsp,与index.jsp两个页面中都相同的判断条件if(request.getAttribute("callBack")==null)
    {
      request.getRequestDispatcher("servlet").forward(request, response);
    }我用这个判断原因是 jsp model2这个模式,JSP页面只做显示结果的作用,大家都知道,,所以每次页显示的数据都先经过servlet,servlet经过各种操作后再服务器内部转向JSP,这应该就是jsp model2 的基本流程吧,目前不会去采用第三方框架的想法,第三方的框架无非也是这个流程就是使用方式变了。在index.jsp中包含了head.jsp所以head.jsp中的request跟index.jsp是一样的,所以在head.jsp中的判断就没有作用了 所以head.jsp也没有去执行与head.jsp对应的servlet所以head.jsp中显示数据时都是显示成了null解决方法不用我说大家也应该知道了把head.jsp中的判断属性名修改一下就可以了 request.getAttribute("callBack")修改成request.getAttribute("headcallBack") 问题二:head.jsp与对应的servlet执行了但整个主面显示时,只显示了head.jsp的内容这是什么问题经本人的不断摸索与出错,当最后一次出的一个错误时,终于找到了解决方法head.jsp中的判断语句if(request.getAttribute("headcallBack")==null)
    {
      request.getRequestDispatcher("servlet").forward(request, response);
    }中的request.getRequestDispatcher("servlet").forward(request, response);这一句修改成request.getRequestDispatcher("servlet").include(request, response);直接用include不要使用forward
    在head.jsp对应的servlet中不要再写任何,转向语句了,直接写的你的操作就可以了到些此问题解决呀, 特些分享心得,希望到大家有用吧!!!!