`

Servlet学习笔记之HttpServletResponse详解

 
阅读更多

对于一个Servlet在每次请求访问时,Servlet引擎都会创建一个描述请求消息和一个描述响应消息的对象。其中描述请求消息的对象实现了HttpServletRequest接口,而描述响应消息的对象实现了HttpServletResponse接口。

我们可以使用HttpServletResponse对象产生3种HTTP响应消息:状态行、响应消息头、响应正文。

Servlet引擎在创建了这2个对象之后,就会调用此Servlet对象的service方法来处理各种HHTP请求。

 

一、产生状态响应码

 

状态响应码存在于HTTP相应消息头的第一行,即状态行,如下所示:

HTTP/1.1  200  OK

 状态行分为3部分:HTTP版本、状态代码、状态消息

 

HTTP协议的状态响应码为3位整数,分为5类:

  1. 100~199:表示服务器成功接收请求,但要求客户端继续提交下一次请求才能完成全部处理过程。
  2. 200~299:表示服务端已成功接收请求,并完成了全部处理过程。
  3. 300~399:表示客户端请求的资源已经转移到了别的位置,并向客户端提供一个新的地址,这个地址由HTTP响应消息头的location字段指定。
  4. 400~499:表示客户端的请求有错误。
  5. 500~599:表示服务端出现错误。
设置状态响应码:
1、setStatus(int  sc)
sc表示状态码,它既可以直接使用整数形式,也可以使用在HttpServletResponse中定义的常量。
setStatus方法可以设置任何HTTP响应消息的状态码,并生成相应状态行。
由于响应状态行中的协议版本和状态消息是由服务器决定的,因此只需设置状态响应码就可以了。
2、sendRedirect(String  location)
location指定重定向的URL,该URL既可以是绝对的(http://www.baidu.com),也可以是相对的。
该方法用更快捷的方式来设置响应状态吗302,表示需要客户端重定向URL。
3、sendError
public  void  sendError (int  sc)  throws  IOException
public  void  sendError (int  sc, String  msg)  throws  IOException
 该方法用于发送表示错误消息的状态码(也就是400~599之间的状态码),而且还可以设置状态消息。
二、设置响应消息头
HTTP 响应消息头部实例:

Status:OK - 200 
Date:Sun, 01 Jun 2008 12:35:47 GMT
Server:Apache/2.0.61 (Unix)
Last-Modified:Sun, 01 Jun 2008 12:35:30 GMT
Accept-Ranges:bytes
Content-Length:18616
Cache-Control:max-age=120
Expires:Sun, 01 Jun 2008 12:37:47 GMT
Content-Type:application/xml
Age:2
X-Cache:HIT from 236-41.D07071951.sina.com.cn 
Via:1.0 236-41.D07071951.sina.com.cn:80 (squid/2.6.STABLE13)
Connection:close 
 1、addHeader与setHeader方法
public void addHeader(String name, String value);
public void setHeader(String name, String value);
//name表示字段名,value表示字段值
 注意:
1、如果name所指定的字段名已经存在,setHeader会用value来覆盖旧的字段值,而addHeader会      增加一个同名的字段(HTTP响应消息头允许存在多个同名的字段)。
2、name参数不区分大小写。
2、addIntHeader与setIntHeader方法
response提供了2个专门设置整形字段值的方法,这2个方法的区别与addHeader和setHeader相同。
public void addIntHeader(String name, int value);
public void setIntHeader(String name, int value);
//name表示字段名,value表示字段值
 
3、addDateHeader与setDateHeader方法
response提供了2个专门设置日期字段值的方法,这2个方法的区别与addHeader和setHeader相同。
public void addDateHeader(String name, long date);
public void setDateHeader(String name, long date);
//name表示字段名,date表示字段值
 HTTP响应头中的日期一般为GMT时间格式,这2个方法省去了将字1970年1月1日0时0分0秒开始计算的一个以毫秒为单位的长整形数值转换为GMT时间字符串的麻烦。
4、setContextType
该方法设置Content-Type字段的值。(即设置MIME类型)
public void setContentType(String type)
 如:response.setContentType("text/html;charset=GBK");
5、setCharacterEncoding
public void setCharacterEncoding(String ecode)
 这个方法实际上是设置Content-Type字段的字符集部分。
注意:
在使用这个方法之前,如果Content-Type不存在,则必须先添加Content-Type,否则该方法设置的字符集类型也不会出现在响应消息头上。
6、setContentLength
该方法用于设置相应正文的大小,单位是字节。
Servlet引擎会根据向客户端实际输出的响应正文的大小自动设置Content-Length字段的值。
7、containsHeader
public boolean containsHeader(String name)
 该方法用于检查某个字段是否在响应消息头中存在,如果存在,则返回true,否则返回false。
 
三、产生响应正文
为了向客户端返回响应正文,response提供了2个方法:getWriter()和getOutputStream()。
getWriter方法返回一个字符输出流对象,getOutputStream方法返回一个字节输出流对象。
这2个方法是互斥的,也就是说,调用一个方法后就不能再调用另一个方法。
1、getWriter
public PrintWriter getWriter() throws IOException
 如果响应正文全部是字符文本,并且需要进行编码转换,建议使用gatWriter方法。
从getWriter方法返回的PrintWriter对象不仅能很方便的向客户端返回相应正文,而且还会根据响应消息头的Content-Type所指定的字符编码格式自动转换响应正文(PrintWriter返回的响应正文是编码转换后的文本)。
//示例
response.setContentType("text/html;charser=utf-8");
PrintWriter out = response.getWriter();
out.println("中国");
 注意:
如果不指定相应正文的编码格式,PrintWriter就会按ISO8859-1字符集编码格式进行转换,而ISO8859-1无法对中文进行编码,就会导致乱码。
建议尽量手动关闭PrintWriter对象(虽然Servlet引擎会自动关闭PrintWriter对象)。
 
2、getOutputStream
public ServletOutputStream getOutputStream() throws  IOException;
 如果响应正文是非字符文本的数据或者是不需要进行编码转换的字符文本,建议使用字节输出流的方式返回响应正文。
使用ServletOutputStream返回字符文本:
1、将字符文本的响应正文转换为字节后返回
OutputStream out = response.getOutputStram();
out.write("中国".getBytes());
 如果想用其他的字符编码格式发送响应正文,需要通过getBytes方法获得字符串的相应字符编码格式的字符流。
response.setContentType("text/html;charset=utf-8");
OutputStream out = response.getOutputStream();
out.write("中国".getBytes("utf-8"));
 
2、将字节流转换为OutputStreamWriter后直接输出字符文本。
OutputStream out = response.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(out);
writer.write("中国");
writer.close();//这行必须写,否则无法输出响应正文
 
四、重定向
response.sendRedirect("http://www.baidu.com");
 
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    jsp/servlet个人学习笔记

    **JSP(JavaServer Pages)/Servlet 知识详解** JSP 和 Servlet 是 Java Web 开发中的核心组件,它们在构建动态网站时起着至关重要的作用。以下是对这两个技术及其相关概念的详细解释: 1. **JSP 基础** JSP 是一...

    Servlet学习笔记

    ### Servlet学习笔记精炼知识点 #### 一、Servlet初始化与加载机制 1. **Servlet注册与实例化**:在Web应用中,一个Servlet的生命周期始于它的注册与实例化过程。通常,这一过程是在Web服务器启动时,根据`web.xml...

    Servlet学习笔记4

    ### Servlet学习笔记4 #### 一、URL Pattern详解 在Servlet配置中,URL Pattern是非常重要的一个概念,它决定了Servlet能够响应哪些请求路径。通常来说,URL Pattern可以分为三种类型: 1. **确切路径匹配**:...

    韩顺平servlet笔记

    【标题】:“韩顺平servlet笔记”是一个关于Servlet编程技术的学习资料,主要由知名IT讲师韩顺平讲解。这个笔记涵盖了Tomcat服务器的配置、Cookie和Session的使用,是针对初学者和进阶者的一份实用教程。 【描述】...

    Struts2超详细学习笔记分享(献给自学新人)

    本篇超详细学习笔记将带你逐步深入理解Struts2的核心概念和运作机制。 首先,让我们了解Struts2的基本特性。Struts2是一个基于Servlet的框架,它通过将JSP作为视图(View),Servlet作为控制器(Controller),并将...

    jsp第七章学习笔记

    本章学习笔记重点介绍了Servlet的基本概念和生命周期管理,以及相关的寒假作业安排。对于Java Web开发者来说,掌握Servlet的工作原理及其生命周期是非常重要的。同时,按照计划完成寒假作业可以帮助巩固所学知识,并...

    servlet笔记

    ### Servlet基础知识与核心技术详解 #### 一、Servlet简介与Web服务器配置 ##### 1.1 Servlet简介 - **Servlet** 是服务器端的小程序,相对于客户端的 Applet 而言。它可以在服务器端运行,接收来自客户端的 ...

    servlet.rar

    【Servlet技术详解】 Servlet是Java Web开发中的核心组件之一,它是Java编程语言中用来扩展Web服务器功能的接口。Servlet主要用于处理HTTP请求,并返回响应数据,是动态网页开发的关键技术。在本笔记中,我们将深入...

    JavaWeb个人学习笔记

    JavaWeb是基于Java语言开发Web应用的一种技术体系,涉及众多组件和概念,包括HTTP协议、JSP、Servlet...通过这样的学习笔记,可以有效地帮助开发者对JavaWeb技术有更全面、深入的理解,从而在实际工作中更加得心应手。

    jsd1906 达内 07-Servlet.rar

    在"jsd1906 达内 07-Servlet.rar"这个压缩包中,包含了关于Servlet的学习笔记和源码,这些都是深入理解Servlet技术的重要资料。 1. **Servlet生命周期** Servlet的生命周期包括加载、初始化、服务、销毁四个阶段。...

    全方位java学习笔记

    ### 全方位Java学习笔记知识点总结 #### JSP内置对象详解 ##### 1. `page`对象 - **定义**:`page`对象是当前JSP页面本身的引用,类似于面向对象编程中的`this`关键字。 - **实现**:它是`java.lang.Object`类的...

    web学习笔记 —— jsp内置对象

    在学习JSP内置对象的过程中,阅读相关文档、实践案例以及参考博客(如《web学习笔记 —— jsp内置对象》)是非常有益的。不断实践和探索,将使你更好地理解和运用这些对象,从而在Web开发领域更加游刃有余。

    韩顺平struts视频学习笔记

    #### 三、Struts框架快速入门实例详解 ##### 1. 创建Web工程并引入依赖 - **创建Web工程**:使用Eclipse或其他IDE创建一个新的Web项目。 - **引入依赖**:在项目的`lib`目录下添加Struts框架所需的jar包,例如`...

    struts学习笔记

    ### Struts学习笔记 #### 一、Struts框架概述 Struts是一个开源的MVC(Model-View-Controller)框架,用于开发Java EE Web应用程序。它简化了Web应用的开发流程,提供了一种结构化的解决方案来组织代码。Struts的...

    JSP学习笔记

    ### JSP 学习笔记详解 #### 一、JSP 概述与基本结构 **JSP (JavaServer Pages)** 是一种基于 Java 的服务器端脚本技术,它允许在 HTML 页面中嵌入 Java 代码来动态生成网页内容。JSP 技术的主要优势在于能够将业务...

    java学习笔记

    ### Java学习笔记之Spring框架工作原理 #### 一、Spring框架概述 Spring框架是一个轻量级的开源框架,主要用于简化企业级应用开发。它通过提供一种简单的方式来管理对象的生命周期和依赖关系,使得开发者能够更加...

    webwork学习笔记

    ### WebWork学习笔记知识点 #### 一、WebWork框架简介 - **定义**: WebWork是一个由OpenSymphony组织开发的MVC(Model-View-Controller)框架,专注于组件化和代码重用,适用于J2EE应用程序开发。 - **最新版本**:...

    JSP-:内部有个人关于servlet的学习经历(2019年完成,现在上传)

    "JSP--main"可能是包含学习资料的主目录,可能包含了JSP和Servlet的实例代码、笔记、教程等资源。 **JSP和Servlet详解** JSP是Java平台上的一个标准,用于创建动态web应用。它允许开发者在HTML页面中嵌入Java代码...

    springboot课堂笔记,如果觉得好给我留言要教学视频

    ### Spring Boot 快速入门与实战详解 ...以上就是 Spring Boot 的快速入门与实战详解,通过本文的学习,你不仅能够了解 Spring Boot 的发展历程,还能掌握如何使用 Spring Boot 构建高效的 Web 应用程序。

    jsp learn

    【JSP学习详解】 在Java Web开发领域,JSP(JavaServer Pages)是一种动态网页技术,它允许开发者将HTML代码与Java代码结合在一起,以创建交互式的网页应用。本资料集合了作者在深入学习JSP过程中的心得体会,旨在...

Global site tag (gtag.js) - Google Analytics