servlet的输出:
两种方式:用response得到输出流即 response.getOuptStream();
返回值为ServletOutputStream 对象,即JSP的out对 象
要么用response得到输出对象PrintWriter即response.getWriter()
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter pw = response.getWriter();
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
pw.print("中文");
}
这个输出是乱码。
为什么呢?已经设置了字符编码啊。
难道设置的无效。
在API中找到方法说明:
引用
PrintWriter getWriter() throws IOException
Returns a PrintWriter object that can send character text to the client. The PrintWriter uses the character encoding returned by getCharacterEncoding(). If the response's character encoding has not been specified as described in getCharacterEncoding (i.e., the method just returns the default value ISO-8859-1), getWriter updates it to ISO-8859-1.
就是讲,在返回一个PrintWriter对象的时候,charactor encoding就已经确定了,就已经设置好了字符集了。
什么时候设置的呢?
setCharacterEncoding方法的实现时发现如下代码:
public void setCharacterEncoding(String charset) {
if (isCommitted())
return;
// Ignore any call from an included servlet
if (included)
return;
// Ignore any call made after the getWriter has been invoked
// The default should be used
if (usingWriter)
return;
coyoteResponse.setCharacterEncoding(charset);
isCharacterEncodingSet = true;
}
其中usingWriter 标志为getPrinteWriter方法中设定,可见其控制逻辑为一旦返回了PrintWriter,本函数即不再生效
ServletOutputStream out = response.getOutputStream();
out.print("中文");
//情况1:正常,浏览器按utf-8方式查看
//response.setContentType("text/html; charset=utf-8");
//情况2:浏览器缺省按简体中文查看,手动设为utf-8方式查看正常
//response.setCharacterEncoding("utf-8");
说明:这种方式不仅不需要在调用getOutputStream()之前设定字符集,甚至在print输出后设定都有效
引用
1.在servlet中输出中文,如果采用PrintWriter方式,需要在调用getPrintWriter()之前调用setContentType 或者 setCharacterEncoding;采用ServletOutputStream方式,不受此限。
2.setContentType 和 setCharacterEncoding两方法中设定characterEncoding的方法对服务器效果一致,不需要反复调用。在输出文本内容时,采用response.setContentType("text/html; charset=utf-8");似乎更为方便。
--------------------------------------------------------
读写文件时乱码解决:
http://www.java1995.cn/article/655.html
分享到:
相关推荐
1. 应答乱码处理(response输出页面时乱码) 1.1 问题: 输出到页面时中文会乱码 后端代码: PrintWriter out = response.getWriter(); out.println(你好,世界!); 前端显示: 1.2 原因 没有设置...
java 输出流中的PrintStream 和 PrintWriter有什么区别
本篇文章主要介绍了Java servlet 使用 PrintWriter 时的编码与乱码的示例代码,探讨了 PrintWriter 的缺省编码与普通字符流的缺省编码的差异,具有一定的参考价值,有兴趣的可以了解一下
Java JSP Servlet数据库连接代码,把数据库连接封装在Servlet中,可多次重复调用,另外更换数据库时候也很方便修改。//连接并查询数据库 String sqlStr="select * from users"; //SQL查询语句 Statement st=...
Java Scanner File PrintWriter使用实例
Called by the servlet container to indicate to a servlet that the servlet is being taken out of service. destroy() - Method in class javax.servlet.GenericServlet Called by the servlet container to ...
PrintWriter的用法---马克-to-win java视频 打印输出流
java写入txt:两种方法,1:利用PrintWriter 类2.FileOutputStream输出流
在Servlet中连接数据库的Java代码,主要是利用sun.jdbc.odbc.JdbcOdbcDriver驱动获得连接,然后定义SQL语句,获取PreparedStatement对象进行数据查询,最后将查询结果以PrintWriter的方式输出到网页上显示。
PrintWriter out=response.getWriter(); out.println("<html><head>简单购物车"+"Example</title></head>"); out.println("<body><table border=\"0\" width=\"100%\"><tr>"); out.println(...
PrintWriter out = response.getWriter(); // Where to output it to // Output document header and a form for entering SQL queries // When the form is submitted, this servlet is reloaded out.println...
一个简单的通过Servlet连接数据库的Java实例代码,在Servlet中连接SQLSERVER数据库的Java代码,主要是利用sun.jdbc.odbc.JdbcOdbcDriver驱动获得连接,然后定义...最后将查询结果以PrintWriter的方式输出到网页上显示。
PrintWriter out = response.getWriter(); String name=request.getParameter("uname"); String pword=request.getParameter("pword"); out.println(" <br> <hr><center><font color=red size=12><B>"); ...
Ajax的服务器端用PrintWriter out=resp.getWriter()来响应数据的时候,out.print(0)、out.print(1)来表示成功或失败,而不用out.write是有原因的,首先来看一下print和write两者的异同点。 共同点是:两者都不刷新...
主要介绍了PrintStream和PrintWriter的区别简介,具有一定借鉴价值,需要的朋友可以参考下
1. 应答乱码处理(response输出页面时乱码) 1.1 问题: 输出到页面时中文会乱码 后端代码: PrintWriter out = response.getWriter(); out.println("你好"); 前端显示: 1.2 原因 没有设置HttpServletResponse使用...
import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet....
主要介绍了浅谈PrintStream和PrintWriter的区别和联系,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧