web学习笔记-httpServletResponse一

httpServletResponse和HttpServletResquest

简单介绍

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。

request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了

HttpServletResponse

博文参考地址

javaEE API 1.7下载地址

Fields

Methods

HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法

  • 向客户端发送数据(这是servletResponse类中的方法)

  • 向客户端(浏览器)发送响应头的相关方法

  • 向客户端(浏览器)发送响应状态码的相关方法

HttpServletRespose输出中文

字节流和字符流的区别

一个字节是8位二进制。Java中的字符是unicode码,占2个字节,即16位stream结尾都是字节流,reader和writer结尾都是字符流;字符流主要是读取文本文件内容的,可以一个字符一个字符的读取,也可以一行一行的读取文本文件内容。而字节流读取单位为byte.byte作为计算机存储最基本单位,可以用字节流来读取很多其他格式的文件,比如图片视频等等;

  • 使用字符流输出中文
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        // 设置将字符以"UTF-8"编码输出到客户端浏览器
        response.setCharacterEncoding("utf-8");
        //通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码
        response.setHeader("Content-Type","text/html;charset = utf-8");
        String string = "司马啸尘";
        response.getWriter().write(string);
        System.out.println(string);
    }

在浏览器抓包如下:



使用字节流输出中文

第一种方法:

protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        response.setHeader("content-type", "text/html;charset=UTF-8");//通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码
        String string = "司马啸尘";
        System.out.println(string);
        response.getOutputStream().write(string.getBytes("utf-8"));
    }
第二种方法:
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        String string = "司马啸尘";
        System.out.println(string);
        response.setContentType("text/html;charset=utf-8") ;  //此句代码做了两件事情:1 设定服务器将数据编码时用的码表2.通知浏览器解码用的码表
        response.getOutputStream().write(string.getBytes("utf-8"));
    }

中文文件名的下载

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

        //获取文件的路径
        String path = getServletContext().getRealPath("/WEB-INF/classes/美女.jpg") ;
         //默认从工程路径开始

        //创建输入流
        InputStream is = new FileInputStream(path) ;
        byte[] bs = new byte[1024] ;
        int b = 0 ;

        //创建输出流对象
        ServletOutputStream os = response.getOutputStream() ;

        //对中文进行编码
        //拿到中文的文件名
        String name = path.substring(path.lastIndexOf("\\") + 1, path.length()) ;
        System.out.println(name);

        //对中文文件名进行编码
        name = URLEncoder.encode(name, "utf-8") ;
        System.out.println("编码后: " + name);
        //通知浏览器以下载的方式打开文件
        response.setHeader("Content-Disposition", "attachment;filename=" + name) ;
        while((b = is.read(bs)) != -1){
            os.write(bs,0,b) ;
        }

在这个过程中遇到一个错误:





解决办法:

在init方法中填上super.init()系统默认添加有这句话;或者直接删去init方法

然后我们在浏览器就可以下载,抓包如下:





注意:

字符流和字节流不能混用

esponse的输出不是直接输出到页面上,而是返回给服务器,由服务器再返回给浏览器

response产生的字符流和字节流不用关闭,Servlet引擎会帮助关闭.

时间: 2024-11-09 01:55:55

web学习笔记-httpServletResponse一的相关文章

web学习笔记-servlet

web学习笔记-servlet 概念 servlet是一个小应用程序,用于处理从客户端发送的请求及服务端的响应. 详情参见: 百度百科的定义 在idea创建servlet 在src右键新建servlet,如图所示: 然后会报异常可以下载包,也可以添加tomcat中的包,添加tomcat->lib-->servlet-api.jar作为libraries. 然后再打开web.xml此时会发现多出一个servlet标签 ServletDemo1 servelt.ServletDemo1 "

[原创]java WEB学习笔记95:Hibernate 目录

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

WEB学习笔记

第一章 ASP.NET基础介绍: 静态网页:相应速度快,主要是.html文件,维护比较麻烦,13亿人口的信息要建13亿个网页,代码是在客户端执行的,代码不需要在服务器上执行,可以包含js的代码 动态网页:页面中包含有需要在web服务器上执行的代码,将结果连同HTML代码一起发给客户端浏览器,无论以何种言语编写的动态网页,到达浏览器的时候都是HTML代码,最常见的动态网页后缀有.jsp/.asp/.php及.aspx WEB服务器主要有:IIS和Apache/  URL地址中的字母不区分大小写 网

[原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

[原创]java WEB学习笔记6:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

[原创]java WEB学习笔记08:ServletResponse & HttpServletResponse

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

[原创]java WEB学习笔记12:一个简单的serlet连接数据库实验

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

[原创]java WEB学习笔记45:自定义HttpFilter类,理解多个Filter 代码的执行顺序,Filterdemo:禁用浏览器缓存的Filter,字符编码的Filter,检查用户是否登陆过的Filter

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

[原创]java WEB学习笔记27:深入理解面向接口编程

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------