关于jsp中out.print的一个问题

<%@ page contentType="text/html;Charset=GB2312"%>
<html>
<body>
<%
String s=request.getParameter("cha");
if(s.equals("dengji"))
out.print("<jsp:forward page=\"bylevel.jsp\"/>");
if(s.equals("xingming"))
out.print("<jsp:forward page=\"byname.jsp\"/>");
if(s.equals("huiyuanhao"))
out.print("<jsp:forward page=\"bynumber.jsp\"/>");
%>
</body>
</html>
这样写有问题,咋样改正过来呢,麻烦说明理由,谢

第1个回答  2011-04-23
把所有的print改成write,原因如下:
out:JspWriter对象表示服务器端向客户浏览器输出的流,但是这个流会在response中进行缓冲,并不是直接向客户输出。在一个servlet中,所有的流写入语句执行完后,servlet会把这些语句的缓存内容打包成http响应返回给浏览器。有一个现象不知道你注意了没?有一个方法:setHeader(还是setHead我忘了),他是设置http响应头的。不管你多晚才执行了setHeader,setHeader之前有多少个out.print,最终返回给浏览器的数据中setHeader的内容肯定在out.print内容的前面,这可以证明out的内容会被先缓存。所以out的内容会被先缓存在response中,最后再一次性给浏览器。
对于print和write。除了字符集以外。这两个是没有多大区别的,因为JspWriter继承了Writer类,而这个类就实现了这两个方法。事实上System.out这个流也是一个Writer,Writer这个设计模式是一个历史遗留,是一个不好的模式,受到很多人的批评。所以这两个方法你不用管它。print默认使用本身字符集
第2个回答  2015-10-27
<%=%>和out.print()没有谁对谁错,也就是说前面列子中如果一开始我在jsp中写的是<%=%>同样会发生这个问题,而且解决方法居然是相反的把<%=%>改为out.print()就可以了。
第3个回答  推荐于2016-09-28
//这么写
<%@ page contentType="text/html;Charset=GB2312"%>
<html>
<body>
<%
String s=request.getParameter("cha");
if(s.equals("dengji"))
//out.print("<jsp:forward page=\"bylevel.jsp\"/>");
response.sendRedirect("bylevel.jsp");
if(s.equals("xingming"))
//out.print("<jsp:forward page=\"byname.jsp\"/>");
response.sendRedirect("byname.jsp");

if(s.equals("huiyuanhao"))
//out.print("<jsp:forward page=\"bynumber.jsp\"/>");
response.sendRedirect("bynumber.jsp");

%>
</body>
</html>本回答被提问者采纳
第4个回答  2011-04-23
out.print("<jsp:forward page=\"byname.jsp\"/>");
不用这样了吧
if(s.equals("xingming"))
response.sendRedirect("byname.jsp");
相似回答