JSP中out对象的print()跟println()方法

JSP中out对象的print()和println()方法
[b][b]在JSP中,通常在页面中显示结果,用的最多的非out.print()或者out.println()莫属了,这两种方式输出的结果一样吗?答案是否定的。
在没学Ajax之前,我也和大多数学Java的JSP程序员一样,认为print()和println()是一样的作用,因为在JSP页面中分别用这两个方法输出的结果是一样的呀!另外在用Java写的应用程序中System.out.print()不换行地输出结果, System.out.println()是换行地输出要输出的结果呀
从表面上来看,确实是这样的。在JSP网页中,用out.print()或者out.println()输出的结果显示在JSP页面上是一样的。事实上,他们两个输出的结果是不一样的,下面看两个实例来证明:
[/b][/b]
View.jsp页面:
  <%@ page c language="java"%>
<html>
<head>
<title>Print()和Println()的输出验证</title>
<script language="javascript" type="text/javascript">
<!--
var xmlHttp;
function createXMLHttpRequest(){
  if(window.ActiveXObject){
  xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  else if(window.XMLHttpRequest){
  xmlHttp = new XMLHttpRequest();
  }
}
function getData()
{
createXMLHttpRequest();
var url = "showdata.jsp";
  xmlHttp.open("GET",url,true);
  xmlHttp.onreadystatechange = showResult;
  xmlHttp.send(null);
}
function showResult(){
  if(xmlHttp.readyState == 4){
         if(xmlHttp.status == 200){
         var result = xmlHttp.responseText;
         alert(result);
//在这里弹出一个对话框,草榴社区显示返回的结果。在这里就可以看出,print()和println()的不同。
         }
  }
}
//-->
</script>
</head>
<body >
</body>
< ml>
Showdata.jsp页面:
<%@ page  c language="java" %>
<%@ page import="java.sql.*"%>
<%
ResultSet  rs = null;
Connection con = null;
PreparedStatement ps = null;
try
{
   Class.forName("com.mysql.jdbc.Driver");
   String url ="jdbc:mysql://localhost:3306/ajax";
   con = DriverManager.getConnection(url,"root","tdy218");
  String sql = "select * from  printtest";
  ps = con.prepareStatement(sql);
  rs = ps.executeQuery();
  while(rs.next())
  {
   out.println("<res>"+rs.getString("major")+"</res>");  //妞妞基地输出方式一、换行输出。
  // out.print("<res>"+rs.getString("major")+"</res>"); //输出方式二、不换行输出。
  }
  con.close();
}
catch(Exception e)
{
System.out.print(e.getMessage());
}
%>

方式一的输出结果:

   方式二的输出结果:

  
为了进一步证明我的结论,你也可以这样做(把上面那个Showdata.jsp的输出页面的输出对象改为System,在控制台输出,这样应该更有说服力):
<%@ page  c language="java" %>
<%@ page import="java.sql.*"%>
<%
ResultSet  rs = null;
Connection con = null;
PreparedStatement ps = null;
try
{
//此教程来源于97xxoo教程网(www.97xxoo.org)\
//查看完整的教程请点:http://www.97xxoo.org/article/3/2008/20081114334.shtml
   Class.forName("com.mysql.jdbc.Driver");
   String url ="jdbc:mysql://localhost:3306/ajax";
   con = DriverManager.getConnection(url,"root","tdy218");
  String sql = "select * from  printtest";
  ps = con.prepareStatement(sql);
  rs = ps.executeQuery();
  while(rs.next())
  {
   System.out.println("<res>"+rs.getString("major")+"</res>");  //输出方式一、换行输出。
  // System.out.print("<res>"+rs.getString("major")+"</res>"); //输出方式二、不换行输出。
  }
  con.close();
}
catch(Exception e)
{
System.out.print(e.getMessage());
}
%>

System.out.print()和System.out.println()的两种输出方式的输出结果:

  
      总结:在JSP页面中,用out.println()这种方式输出结果本质上会换行,但是是写在程序片中输出的。JSP程序片又是可以写在HTML标签中的,这样就等于程序片中的内容以无标签(这里指的是html标签)的格式(纯文本格式)输出。所以输出的内容就没换行,要换行也得加html标签中的<p></p>或者<br>之类的标签。试验证明:以contentType设置成:text/xml(以XML格式显示数据)也一样满足我的结论。时间关系,就写这么多了。下面我简单的把XML格式的显示写法提一下:
        JSP页面中这样写:写在while(rs.next())的上面。
              response.setContentType("text/xml; charset=gbk");  
              response.setHeader("Cache-Control","no-cache");
              out.println("<?xml  version=\"1.0\"  encoding=\"gbk\"?>");
       Servlet里这样写:同样写在while(rs.next())的上面。
              response.setContentType("text/xml; charset=gbk");  
              response.setHeader("Cache-Control","no-cache");
              response.getWriter().write("<?xml  version=\"1.0\"  encoding=\"gbk\"?>");