HttpServlettResponse对象

介绍

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象和代表响应的response对象,要向网页输出数据,只需要找response对象。

常用方法

方法描述
addHeader(String name, String value)添加指定的键值到响应头信息中
containsHeader(String name)判断响应的头部是否被设置
encodeURL(String url)编码指定的 URL
sendError(int sc)使用指定状态码发送一个错误到客户端
setHeader(String name, String value)设置指定响应头的值
setStatus(int sc)给当前响应设置状态
setContentType(String ContentType)设置响应的 MIME 类型
getWriter()获取输出字符流
getOutputStream()获取输出的字节流
如何查看MIME类型

找到tomcat服务器->选择web.xml->ctrt+f>输入文件类型->点击Find
在这里插入图片描述
在这里插入图片描述

刷新和页面自动跳转

所有头信息都是随着请求和回应自动发送到服务器端(客户端),在 response 中一个比较常用

的头信息就是刷新的指令,可以完成定时刷新的功能。

resp.setHeader("refresh", "2");//每2秒刷新一次

对于刷新的头信息,除了定时的功能外,还具备了定时跳转的功能,可以让一个页面定时跳转到一

个指定的页面。(已经注册成功,两秒后跳转到登陆页面)

response.setHeader("refresh","3;URL=ok.html");

但是这种跳转不是万能的,有时候根本就无法进行跳转操作,返回后刷新不会跳转;对于这种定时

跳转的头信息,也可以采用 HTML 的方式进行设置,HTML 本身也可以设置头信息。(客户端跳转)

<meta http-equiv="refresh" content="3;http://www.baidu.com" />

数据响应

接收到客户端请求后,可以通过 HttpServletResponse 对象直接进行响应,响应时需要获取输出流,有两种形式 getWriter()获取字符流(只能响应回字符)getOutputStream()获取字节流(能响应一

切数据)。响应回的数据到客户端被浏览器解析。注意:两者不能同时使用

响应图片

public class Show extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void service(HttpServletRequest req, HttpServletResponse resp) 
			throws ServletException, IOException {
		resp.setContentType("text/html;charset=utf-8");
		//通过输入流读取图片,然后通过输出流输出图片
		String imageName = req.getParameter("imageName");
		//判断是否为空
		if(imageName == null||"".equals(imageName)) {
			resp.getWriter().write("请告诉我你要看啥图片");
			return;
		}
		String realPath = req.getServletContext().getRealPath("/WEB-INF/img/");
		System.out.println(realPath);
		String Path = realPath + imageName;
		File file = new File(Path);
		if(file !=null && file.isFile()) {
			//判断用户访问的图片类型
			String imageType = imageName.split("\\.")[1];
			if("jpg".equals(imageType)) {
				resp.setContentType("image/jpeg;charset=utf-8");
			}else if("png".equals(imageType)){
				resp.setContentType("image/png;charset=utf-8");
			}else if("gif".equals(imageType)){
				resp.setContentType("image/gif;charset=utf-8");
			}
			FileInputStream in = new FileInputStream(file);
			ServletOutputStream out = resp.getOutputStream();
			byte[] car = new byte[1024];
			int len=0;
			while((len=in.read(car))!=-1) {
				out.write(car,0,len);
			}
			in.close();
			out.close();
		}else {
			resp.getWriter().write("请输入正确的图片名称");
			return;
		}
	}
}

重定向跳转

重定向是一种服务器指导客户端的行为。客户端发出第一个请求,被服务器接收,经过处理服务器

进行响应,与此同时,服务器给客户端一个地址(下次请求的地址 resp.sendRedirect(“url”);),当客

户端接收到响应后,立刻、马上、自动根据服务器给的地址进行第二个请求的发送,服务器接收请求并

作出响应,重定向完成。从描述中可以看出重定向当中有两个请求存在,并且属于客户端行为。实现方

式如下:

resp.sendRedirect();

通过观察浏览器我们发现第一次请求获得的响应码为 302,并且含有一个 location 头信息。并且地

址栏最终看到的地址是和第一次请求地址不同的,地址栏已经发生了变化。

请求转发和重定向比较:

请求转发(req.getRequestDispatcher().forward())重定向(resp.sendRedirect())
一次请求,数据在request域中共享两次请求,数据不共享
服务器端行为客户端行为
地址栏不发生改变地址栏发生改变
绝对地址定位到站点后绝对地址可写到 http://
// 请求转发跳转到 http://xxxx   HTTP Status 404 - /path/http://taobao.com
request.getRequestDispatcher("http://taobao.com").forward(request, response);
// 重定向跳转到 http://xxxx
response.sendRedirect("http://jd.com");

请求时的路径问题

在请求资源时,必须给出正确的路径,否则是找不到资源的。路径分为相对路径和绝对路径,绝对

路径可简单理解为完整路径,在 web 项目中绝对路径分两种,一种是以 http:// 开头的,该种绝对路径

已经跨域,即任何地方的资源都能访问,另一种则是从当前域名|IP|主机后的端口号开始的,不能跨

域,也属于一种绝对路径。相对路径则就是相对当前资源所在路径。

绝对路径:

使用绝对路径时则有两种方式,以 http:// 开头,或者以 / 开头,但是注意:只有客户端跳转才能

使用 http:// 这种方式,此时需要写出资源的完整路径;另一种以 / 开头的绝对路径,则是绝对到端口

后,例如本机则是:http://localhost:8080 此时则是 / 代表以上一串字符。 /helloworld/a.html → htt

p://localhost:8080/helloworld/a.html

浏览器中:“/”代表的是 http://主机|IP:端口

的绝对路径,则是绝对到端口

后,例如本机则是:http://localhost:8080 此时则是 / 代表以上一串字符。 /helloworld/a.html → htt

p://localhost:8080/helloworld/a.html

浏览器中:“/”代表的是 http://主机|IP:端口

服务器中:“/”代表的是 http://主机|IP:端口/站点名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值