关于forward(html/jsp)解析......

    无论是RequetDispatcher.forward还是HttpServletResponse.sendRedirrect()在调用它们之前都不能有内容已经被实际输出到客户端!!如果缓冲区中已有一些内容,这些内容将被清除!!

JspFractory  
_jspxFactory.releasePageContext(_jspx_page_context)


有多个PrintWriter或者JspWriter对象时  先把内容输出到缓冲区!到jsp页面结束时才把内容输出!!


  在jsp页面中调用pageContext.forward()进行页面转向!Servlet
如果转向html静态文件!因为这是市转向default servlet 没有PrintWriter对象产生 所以在default
serlet会调用getServletOutputStream!然后返回jsp页面!继续完成剩下的页面!!这时又向缓冲区打印!这时就报错   !1
如果要想不报错!只能在jsp页面调用response.getWriter显式的产生PrinterWriter对象!!这样在default servlet 中才会使用这个printWriter对象!输出页面内容!!


     <%
     response.getWriter();
   
     pageContext.forward("test.html");
    %>

 

   html常常出现缓存页面的情况!如果你这次访问成功!下次访问的页面应该失败!但还是正确的页面!这是因为缓存的结果!!

 

如果转向Servlet 但 Servlet中打开了OutputStream流!则会报错!!与jsp页面的out冲突!!
  <%
     pageContext.forward("servlet/testForward");
  
    %>

testForward Servlet
public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException
{
ServletOutputStream sos=response.getOutputStream();
}

再看
<body>
1
<%
      PrintWriter pw= response.getWriter();
      pw.print("3");
   
 %>
 2
</body>
打印出  312

编译的Servlet代码为JspWriter out = null;

 

JspWriter  和 PrintWriter关系!!

JspWriter继承了java.io.Writer
同样 PrintWriter也是其子类!!也就是在jsp页面输出时  只要是Writer子类!则把内容输出到一个缓冲区内!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值