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

2024-12-03 21:33:37
推荐回答(4个)
回答(1):

把所有的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):

<%=%>和out.print()没有谁对谁错,也就是说前面列子中如果一开始我在jsp中写的是<%=%>同样会发生这个问题,而且解决方法居然是相反的把<%=%>改为out.print()就可以了。

回答(3):

//这么写
<%@ page contentType="text/html;Charset=GB2312"%>


<%
String s=request.getParameter("cha");
if(s.equals("dengji"))
//out.print("");
response.sendRedirect("bylevel.jsp");
if(s.equals("xingming"))
//out.print("");
response.sendRedirect("byname.jsp");

if(s.equals("huiyuanhao"))
//out.print("");
response.sendRedirect("bynumber.jsp");

%>

回答(4):

out.print("");
不用这样了吧
if(s.equals("xingming"))
response.sendRedirect("byname.jsp");