`
_Yggd
  • 浏览: 89144 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Servlet中HttpServletResponse的应用

阅读更多
源:http://blog.csdn.net/zhcj3672/article/details/6944968



一  回顾HttpServletRequest对象
1.服务端和客户端
(1)服务器端servlet程序中的servic产生应答信息HttpServletReasponse对象
(2)客户端浏览器向web服务器发送请求httpServletRequset对象
2.Request对象的回顾
(1)请求行GET/demo/test?usename=xxxHTTP/1.1
(2)请求消息头:getHeader(”头字段的名称”)
(3)获取所需要的参数  getParameter(”参数名”) 参数
(4)消息实体的内容
通过输入输出流获取 :getInputStream() 和 getReader()
在读取的时候通过流对象.read()方法读取
二  介绍HttpServletResponse对象
   1.状态行http/1.1  200  OK  
         可设置状态码,但是一般不需要
   2.响应消息的消息头 
(1)页面的设置文本类型
response.setContentType(“text/html“);
(2)页面的刷新
response.setHeader(“Refresh”,”2;url=”http://www.baidu.com”);
(3)设置浏览器不缓存的三种方法,是为了避免不同版本的浏览器。
           response.setDateHeader("Expires", 0);
           response.setHeader("Cache-Control", "no-cache");
   response.setHeader("pragma","no-cache");
  使用<meta>标签设置响应消息头 ---在静态页面中设置
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">

   3.消息实体内容
         通过输出流对象进行设置,用以下两个方法:
           Response.getOutputStream()  字节输出流对象
           Response.getWriter()   字符的输出流对象

    4.getOutputStream和getWriter方法的比较
(1)getOutputStream方法用于返回Servlet引擎创建的字节输出流对象,Servlet程序可以按字节形式输出响应正文。
(2)getWriter方法用于返回Servlet引擎创建的字符输出流对象,Servlet程序可以按字符形式输出响应正文。
(3)getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。
要不会出现错误java.lang.IllegalStateException
(4)getOutputStream方法返回的是字节输出流对象的类型
为ServletOutputStream,它可以直接输出字节数组中的二进制数据。
(5)getWriter方法将Servlet引擎的数据缓冲区包装成PrintWriter类型的字符输出流对象后返回,PrintWriter对象可以直接输出字符文本内容。
(6)Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。
(7)Serlvet的service方法结束后,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象。
         注:out.close();系统会自己释放,但一般写上

5. 选择getOutputStream和getWrite方法的要点
(1)PrintWriter对象输出字符文本内容时,它内部还是将字符串转换成了某种字符集编码的字节数组后再进行输出,使用PrintWriter对象的好处就是不用编程人员自己来完成字符串到字节数组的转换。
(2)使用ServletOutputStream对象也能输出内容全为文本字符的网页文档,但是,如果网页文档内容是在Servlet程序内部使用文本字符串动态拼凑和创建出来的,则需要先将字符文本转换成字节数组后输出。
(3)如果一个网页文档内容全部为字符文本,但是这些内容可以直接从一个字节输入流中读取出来,然后再原封不动地输出到客户端,那么就应该使用ServletOutputStream对象直接进行输出,而不要使用PrintWriter对象进行输出。   

三  出现乱码的原因和解决
    1. java程序中默认的是中文字符----unicode
   2.字符输出流对象----out.println()的字符编码的转变
         系统会把在java程序中的unicode字符按照某种字符集编码的方式转换成字节数组,再通过浏览器输出,浏览器在输出的时候要进行解码,只有在这两种方式一样的情况下,才不会出现乱码。
      注:(1)某种字符编码是用reponse对象去设置的,而且必须是在out.println之前使用,要不会出现错误,会抛找不到设置的字符编码而出错。
         设置编码的两种方式:
        response.setContentType("text/html;charset=utf-8");
          request.setCharacterEncoding("utf-8");
         (2)浏览器会把字节数组转换成字符
3. 系统默认的编码方式为ISO8859-1,如果没有指定字符编码,则输出的都是乱码,而且ISO8859-1不支持中文,所以不管浏览器在解码的时候用的是什么字符集编码,在浏览器上的都是乱码。
4.补充PrintWriter
PrintWriter不管是多个对象,都是一样的,举例:
      PrintWriter out = response.getWriter();
      PrintWriter out1 =response.getWriter();
      if(out==out1){
         out.print("同一个输出流对象");
      }
5.print和println方法的不同
      (1)Println和print的不同是println有换行的作用    
(2)Print和println的换行的作用只对源文件有作用,而对浏览器没有作用,要在浏览器中换行,要用<br/>标签换行。

四  输出缓冲区
1.输出缓冲区的介绍
(1)Servlet程序输出的HTTP消息的响应正文首先被写入到Servlet引擎提供的一个输出缓冲区中,直到输出缓冲区被填满或者Servlet程序已经写入了所有的响应内容,缓冲区中的内容才会被Servlet引擎发送到客户端。
(2)使用输出缓冲区后,Servlet引擎就可以将响应状态行、各响应头和响应正文严格按照HTTP消息的位置顺序进行调整后再输出到客户端。
(3)如果在提交响应到客户端时,输出缓冲区中已经装入了所有的响应内容,Servlet引擎将计算响应正文部分的大小并自动设置Content-Length头字段。
(4)如果在提交响应到客户端时,输出缓冲区中装入的内容只是全部响应内容的一部分,Servlet引擎将使用HTTP1.1的chunked编码方式(通过设置Transfer-Encoding头字段来指定)传输响应内容。

2.输出缓冲区的有关方法 
      //读取缓存区的大小
      System.out.println(response.getBufferSize());
      //设置缓冲区的的大小,会小与你设置的值
      response.setBufferSize(1024);
      System.out.println(response.getBufferSize());

      //填满缓冲区
      int len=response.getBufferSize();
      //System.out.println(len);
      for(int i =0;i<len;i++){
         System.out.println("w");
      }

3.实例----动态文件内容的下载
      //动态的文件的下载
     response.setContentType("application/x-msdownload");
       //Content-Disposition文件的位置response.setHeader("Content-Disposition","attachment;filename=aa.txt");
      ServletOutputStream sos =response.getOutputStream();
     sos.write("hello".getBytes());//动态的生成下载的内容
      sos.close();
分享到:
评论

相关推荐

    《JSP+Servlet+Tomcat应用开发从零开始学》PDF

    在实际项目中,开发者通常会结合使用JSP、Servlet和一些框架,如Spring MVC或Struts,以提高开发效率和应用的可维护性。这些框架提供了更高级别的抽象,使开发者能够专注于业务逻辑,而不是底层的HTTP请求处理和页面...

    HttpServletResponse对象、HttpServletResponse应用、请求重定向

    二、HttpServletResponse应用 在实际开发中,`HttpServletResponse`常用于以下场景: 1. 返回HTML页面:在Servlet中,可以通过`getWriter()`写入HTML代码,构建动态网页。 2. 文件下载:设置合适的响应头,如...

    servlet在web项目中的应用

    在这个主题中,我们将深入探讨Servlet在Web项目中的应用。 ### 1. Servlet生命周期 Servlet的生命周期包括三个主要阶段:加载、初始化和服务。当Web容器启动或第一次接收到对Servlet的请求时,它会加载Servlet类并...

    servlet 中文帮助文档

    Listener监听Web应用中特定事件,如Session创建、销毁、请求到达等。 八、Servlet 3.0新特性 自Servlet 3.0版本起,引入了注解配置,允许直接在Servlet类上声明映射和初始化参数,减少了`web.xml`的依赖。例如: ``...

    ajax+servlet+json应用

    2. **Servlet**:Servlet是Java Web应用中的一个组件,由服务器调用以响应客户端(通常是Web浏览器)的请求。Servlet可以处理HTTP请求,执行业务逻辑,访问数据库,然后生成响应内容。在Ajax应用中,Servlet通常作为...

    JSON servlet实例 Ajax应用

    总结起来,"JSON Servlet实例 Ajax应用"是一个教学案例,展示了如何在Java Web应用中使用Servlet处理JSON数据,并通过Ajax实现客户端与服务器的异步通信。这个实例有助于开发者理解和掌握Web开发中的关键技术和工具...

    Servlet中文API文档 servlet

    9. **监听器Listener**:Servlet API中的监听器(如ServletRequestListener、ServletContextListener)可以在特定事件(如请求到达、应用启动/停止)发生时执行代码,增强了应用程序的灵活性。 10. **会话管理**:...

    servlet高级应用

    在"Servlet高级应用"这个主题中,我们将深入探讨Servlet的一些高级特性和实践技巧,这些内容将帮助开发者更好地构建高效、可扩展的Web应用程序。 1. **生命周期管理**: Servlet的生命周期包括初始化、服务和销毁...

    servlet-api中文文档

    在这个压缩包中,包含的是对Servlet API的中文文档,可能是作者因为无法找到官方的源码和javadoc而自行整理的笔记。 首先,我们来看看servlet的概念。Servlet是一个Java类,它扩展了服务器的功能,可以处理来自...

    Java servlet-api应用文档.rar

    通过这个接口,Servlet可以获取Web应用的部署描述符(web.xml)中的参数。 另一个关键组件是`javax.servlet.ServletContext`,它代表整个Web应用的上下文。ServletContext提供了访问应用级初始化参数、加载资源、...

    Servlet简单应用示例

    4. **Json处理**:在现代Web应用中,Json常用于数据交换。如果示例涉及到Json,可能有将Java对象转换为Json字符串的逻辑,这通常通过使用如Jackson或Gson这样的库完成。例如,将一个User对象转换为Json字符串,然后...

    Java servlet-api应用文档

    Java Servlet API 是 Java 平台上用于开发Web应用程序的核心接口和类集合,它是Java EE(Enterprise Edition)的一部分。这个API允许开发者编写服务器端的Java代码,这些代码能够接收和响应来自Web客户端(如浏览器...

    servlet中文乱码问题

    通过修改Tomcat配置文件中的`URIEncoding`属性以及在Servlet中通过`response.setContentType()`和`request.setCharacterEncoding()`方法来设置字符编码,可以有效解决中文乱码问题。此外,还可以通过字符集转换的...

    Servlet API中文文档

    Servlet API中文文档是Java Web开发中的重要参考资料,它详尽地解释了Servlet技术的各种接口、类和方法,为开发者提供了全面的理解和使用指南。Servlet API是J2EE平台的一部分,主要用于构建动态Web应用程序,它是...

    jsp页面中获取servlet请求中的参数的办法详解

    但是,在实际应用中,应根据HTTP方法的语义分别处理不同的操作。 总结一下,要在JSP页面中获取Servlet请求中的参数,需要: 1. 在Servlet中使用`request.getParameter()`获取请求参数。 2. 将参数存储在请求作用域...

    Servlet API(中文)

    Servlet API是Java Web开发中的核心组件,主要用于构建动态web应用程序。这个中文版文档是为了帮助那些在英语学习上有困难的朋友更好地理解和应用Servlet技术。在本文中,我们将深入探讨Servlet API的关键概念、功能...

    JasperReport+Servlet Web应用之:打印

    综上所述,这个主题涵盖了使用JasperReport生成报表并与Servlet结合在Web应用中进行打印的核心技术。由于原始资源没有提供具体的jar包,学习者需要自行搭建环境并参考提供的教程进行实践。通过理解和掌握这些知识点...

    servlet中文帮助文档CHM格式

    Servlet是Java Web开发中的核心组件,它用于扩展服务器的功能,处理来自客户端(通常是Web浏览器)的请求,并向客户端发送响应。...通过深入学习和实践,开发者能够有效地利用Servlet构建动态、交互式的Web应用程序。

    HttpServletResponse对象的应用

    在Java Web开发中,`HttpServletResponse`对象是Servlet API中的核心组件之一,它扮演着服务器向客户端发送响应的重要角色。本篇文章将深入探讨`HttpServletResponse`对象的应用,以及请求重定向与请求转发的区别。 ...

Global site tag (gtag.js) - Google Analytics