• 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 使用字节流发送数据:

  • 相关阅读:
    MT4 图表上设置字符
    MC- 交易并设置止损
    MC- 挂单STOP交易
    MC-设置 止盈
    MC 跨周期 画线
    美版MC 使用
    改变和恢复view的方向
    app被Rejected 的各种原因翻译。这个绝对有用。
    更改navigationController push和pop界面切换动画
    线程访问外部数据
  • 原文地址:https://www.cnblogs.com/xuyatao/p/6632193.html
Copyright © 2020-2023  润新知