请求与响应

学习目标

1.HttpServletResponse对象
2.HttpServletResponse 应用
3.HttpServletRequest 对象
4.HttpServletRequest 应用
5.RequestDispatcher 对象的应用

学习内容

1.HttpServletResponse对象

在Servlet API中,定义了一个HttpServletResponse接口,它继承自ServletResonse接口,专门用来封装HTTP响应消息。由于HTTP响应消息分为状态行、响应消息头、消息体三部分。因此在HttpServletResponse接口中定义了向客户端发送响应状态码、响应消息头、响应消息体的方法。
1.1 发送状态相关的方法
当Servlet向客户端回送响应消息时,需要在响应消息中设置状态码。为此,在HttpServletResponse接口中,定义了两个发送状态码的方法,具体如下。

  1. setStatus(int status)方法
    该方 法用于设置HTTP响应消息的状态码,并生成响应状态行。由于响应状态行中的状态描述信息直接与状态码相关,而HTTP版本由服务器确定,因此,只要通过setStatus(int status)方法设置了状态码,即可实现状态行的发送。需要注意的是,正常情况下,Web服务器会默认产生一个状态码为200的状态行。

  2. sendError(int sc)方法
    该方法用于发送表示错误信息的状态码,例如,404状态码表示找不到客户端请求的资源。在response对象中,提供了两个重载的sendError(int sc)方法,具体如下。

public void sendError(int code) throws java.io.IOException
public void sendError(int cide, String message) throws java.io.IOException

1.2发送响应消息头相关的方法
需要注意的是,addHeader()、selHeader()、addiIntHeader()、setlnHeader()方法都是用于设置各种头字段的,而setContentType()、setLocale()和selCharacterEncoding()方法用于设置字符编码,这些设置字符编码的方法可以有效解决乱码。
1.3发送响应消息体相关的方法
由于在HTTP响应消息中,大量的数据都是通过响应消息体传递的,因此, ServletResponse遵循以10流传递大量数据的设计理念。在发送响应消息体时,定义了两个与输出流相关的方法,具体如下。
1.getOutputStream()
该方法所获取的字节输出流对象为ServletOutputStream 类型。由于ServletOutputStream是OutputStream的子类,它可以直接输出字节数组中的二进制数据。因此,要想输出二进制格式的响应正文,就需要使用getOutputStream()方法。
2. getWriter()方法
该方法所获取的字符输出流对象为PrintWriter类型。由于PrintWriter类型的对象可以直接输出字符文本内容, 因此,要想输出内容全为字符文本的网页文档, 需要使用getWriter()方法。
了解了response对象发送响应消息体的两个方法后,接下来,通过一个案例来学习这两个方法的使用。

2.HttpServletResponse 应用

一:解决中文乱码

  1. 创建ChineseServlet
  2. 配置映射信息,查看运行结果
    方式一:
//设置HttpServletResponse使用utf-8编码
  response. setCharacterEncoding ("utf-8") ;
//通知浏览器使用utf-8解码
  response . setHeader ("Content-Type", "text/html; charset=utf-8")

在这里插入图片描述
方式二:

//包含第一种方式的两个功能
   response. setContentType (" text/html;charset=utf-8");

通常情况下,为了使代码更加简洁,会采用第2种方式。使用HttpServletResponse对象的第2种方式来解决乱码问题,修改后的代码。
二:实现网页定时刷新并跳转

  1. 创建Servlet
  2. 配置映射信息,查看运行结果

在实际开发中,有时需要当前页面具有自动刷新的功能,使当前页面每隔3秒自动刷新。也可以显示当前时间。

启动Tomcal服务器,在浏览器的地批栏中输入地址"http://localhost:9999/04/fresh"访问fresh。
例:

三:实现重定向
在某些情况下,针对客户端的请求,一个Servlet类可能无法完成全部工作。这时,可以使用请求重定向来完成。所谓请求重定向,指的是Web服务器接收到客户端的请求后,可能由于某些条件限制,不能访问当前请求URL所指向的Web资源,而是指定了一个新的资源路径,让客户端重新发送请求。

为了实现请求重定向,在HttpServletResponse接口中,定义了一个sendRedirect()方法,该方法用于生成302响应码和Location响应头,从而通知客户端重新访问Location响应头中指定的URL, sendRedirect()方法的完整语法如下所示。

public void sendRedirect (java. lang.String location)

 throws java. io. IOException

在这里插入图片描述

3.HttpServletRequest 对象

获取请求行信息的相关方法
在这里插入图片描述
获取请求消息头的相关方法
在这里插入图片描述

4.HttpServletRequest 应用
5.RequestDispatcher 对象的应用
  1. 请求转发

RequestResultServlet
启动Tomcal服务器,在浏览器的地批栏中输入地址"http://localhost:9999/04/Result"访问 RequestResultServlet。
在这里插入图片描述
2 .RequestFowardServlet
启动Tomcal服务器,在浏览器的地批栏中输入地址"http://localhost:9999/04/foward"访问 RequestFowardServlet。
在这里插入图片描述
2020080605041

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值