ServletResponse的一些知识点
ServletResponse
* 服务器对浏览器做出的响应,将需要发送给浏览器的所有数据全部存放在此对象上。
* 发送数据,使用流操作,将所需要的数据,存放在指定的流中,数据将显示到浏览器中
* 字符流
* response.getWriter();
* 字节流
* response.getOutputStream();
* 当使用getOutputStream时,不能使用getWriter
* getOutputStream() has already been called for this response
* 当使用getWriter时,不能使用getOutputStream
* getWriter() has already been called for this response
* 总结:两个流同时只能使用一个
* 字节流:getOutputStream,一般在程序中使用具有拷贝功能等
* 发送中文
* 不能使用out.print(data) 发送中文数据
* 异常信息:java.io.CharConversionException Not an ISO 8859-1 character: 中
*需要使用out.write(data.getBytes("UTF-8"));发送中文数据
* 字符流:getWriter,一般在程序中发送数据内容
* 发送中文
* out.println("中文");
* 乱码【****】
* response.setContentType("text/html;charset=utf-8");
* 通知tomcat和浏览器发送数据的编码
* 注意:
* 设置编码时,必须放置在需要输出语句之前,建议放置在doGet或doPost第一行
*实例:cn.itcast.response.FormServlet
请求和响应的图解
当使用getOutputStream时,不能使用getWriter 会报非法异常
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //当使用getOutputStream时,不能使用getWriter // * getOutputStream() has already been called for this response //当使用getWriter时,不能使用getOutputStream // * getWriter() has already been called for this response //总结:两个流同时只能使用一个 //字节流 ServletOutputStream out = response.getOutputStream(); out.print("abc"); //字符流 PrintWriter writer = response.getWriter(); writer.print("123"); }
response 发送中文乱码解决方法
- 确定发送数据的编码
- 通知tomcat和浏览器发送数据的编码两者统一 uTF-8
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //确定发送数据的编码,通知tomcat和浏览器发送数据的编码,两者统一 uTF-8 response.setContentType("text/html;charset=utf-8"); //将在http响应头中添加,content-type:text/html;charset=utf-8 //使用字节流 发送中文数据 ServletOutputStream out = response.getOutputStream(); String data = "中文"; // * 发送数据 out.write(data.getBytes("UTF-8")); }
使用字符流:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置响应浏览器的字符编码 : 通知tomcat和浏览器,当前servlet发送的数据的编码 response.setContentType("text/html;charset=UTF-8"); //发送中文数据 --“中文” String data = "中文"; //字节流 ServletOutputStream out = response.getOutputStream(); //out.print(data); 不能发送中文数据 java.io.CharConversionException Not an ISO 8859-1 character: 中 out.write(data.getBytes("UTF-8")); }
使用response向浏览器发送一个表单:
public class FormServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //将表单书发送给浏览器 // * 确定发送数据的编码 response.setContentType("text/html;charset=UTF-8"); // * 获得字符流 PrintWriter out = response.getWriter(); // * 发送数据 out.println("<form action=\"#\" method=\"post\">"); out.println("名称:<input type='text' name='username' value='凤姐'> <br/>"); out.println("密码:<input type='password' name='userpwd'> <br/>"); out.println("<input type='submit' value='提交' />"); out.println(" </form>"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//当使用getOutputStream时,不能使用getWriter
// * getOutputStream() has already been called for this response
//当使用getWriter时,不能使用getOutputStream
// * getWriter() has already been called for this response
//总结:两个流同时只能使用一个
//字节流
ServletOutputStream out = response.getOutputStream();
out.print("abc");
//字符流
// PrintWriter writer = response.getWriter();
// writer.print("123");
}
response中文乱码问题:
response 使用字节流发送数据: