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 发送中文乱码解决方法

  1. 确定发送数据的编码
  2. 通知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 使用字节流发送数据:

 

posted @ 2017-03-28 10:18  xuyatao  阅读(252)  评论(0编辑  收藏  举报