javaWeb之response

Response对象,用于生成http响应信息. 对于开发人员来讲,就是 向response 对象中添加信息即可.


response协议


 响应首行

        HTTP/1.1  200 OK

        void setStatus(int sc)   //设置状态码
        void setStatus(int sc, String sm)    //Deprecated(过时)
        void sendError(int sc)

        void sendError(int sc, String msg)

例1:发送错误信息作为响应

public class AServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		response.sendError(404,"找到也不告诉你!");
		
	}

}


 响应头

        键:值
        void setHeader(String name, String value)  设置键值对.
        void setDateHeader(String name, long date) 设置键值对.
        void setIntHeader(String name, int value)  设置键值对.
        void addHeader(String name, String value) 添加键值对.
        void addDateHeader(String name, long date)添加键值对.
       void addIntHeader(String name, int value) 添加键值对.

 

例2: 访问BServlet,3秒后浏览器自动跳转到首页.
    <meta http-equiv="Refresh" content="3;url=地址" > 用于模拟响应头的

public class BServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		//添加响应头=> Refresh
		//3s之后跳转到tomCat首页
		response.addHeader("Refresh", "3;url=http://localhost:8080");
		// 让页面有倒计时的效果
		response.getWriter().write("您将在<span id='one'>3</span>秒后跳转!" +
				"<script type='text/javaScript' >" +
				"var span = document.getElementById('one');" +
				"var i =3;" +
				"function fun(){" +
				"i--;" +
				"if(i>=0){" +
				"span.innerHTML = i;" +
				"}" +
				"}" +
				"window.setInterval(fun,1000);" +
				"</script>");
		
	}

}

例3: 手动做重定向效果.

public class CServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		/*//1 添加302状态码   =>  告诉浏览器需要重定向
			response.setStatus(302);
		//2 添加Location响应头 => 告诉浏览器重定向到哪里
			response.setHeader("Location", "http://localhost:8080");*/
		
		//该方法是对上面两行代码的封装 
		response.sendRedirect("http://localhost:8080");
	}

}
例4: 向浏览器输出文字(字节流,中文)

public class EServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//2 设置解码码表 => 与setContentType效果一样,自动查找设置的码表,将解码码表设置一致 
		response.setHeader("Content-Type", "text/html;charset=GBK");
		//1 设置编码码表
		//response.setCharacterEncoding("GBK");
		
		//可以使用19行代替17行的代码.同时setContentType方法如果发现你填写码表,那么会同时自动设置编码码表
		//response.setContentType("text/html;charset=GBK");
		
		//3 输出 
		response.getWriter().write("黑马");
		
		
		//结论:
			//1 输出中文建议使用字符流
			//2 解决字符流乱码 使用setContentType放可以同时设置编码解码两端的码表.
			//3 注意: 码表的设置一定放到输出之前
			//4 注意: 字符流与字节流不能同时使用
	}
}
例6: 向浏览器输出图片.(由servlet输出).

public class FServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//判断是否有查看的权限
		
			// 1 获得图片的输入流
		InputStream is = getServletContext().getResourceAsStream("/WEB-INF/xxx1.jpg");
			// 2 获得输出到浏览器的输出流
		OutputStream os = response.getOutputStream();
			// 3 两个流对接
		byte[] buffer = new byte[1024];
		int len = -1;
		
		while((len = is.read(buffer))!=-1){
			os.write(buffer,0,len);
			os.flush();
		}
		
		os.close();
		is.close();
	}
}

例7: 文件下载(向浏览器输出内容)

public class GServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//0 原则: 凡是响应正文中需要输出内容, 一定要设置content-type头
		ServletContext sc = getServletContext();
		String type = sc.getMimeType("abc.exe");
		response.setContentType(type);
		
		//0 设置响应头=> 提示用户保存名称   =>  Http协议不支持中文码表=> %E5%C3 => URLEncoder.encode("apache-汤姆-6.0.35.exe","UTF-8");
		response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode("apache-汤姆-6.0.35.exe","UTF-8"));
		// 1 获得文件的输入流
	InputStream is = getServletContext().getResourceAsStream("/WEB-INF/apache-tomcat-6.0.35.exe");
		// 2 获得输出到浏览器的输出流
	OutputStream os = response.getOutputStream();
		// 3 两个流对接
	byte[] buffer = new byte[1024];
	int len = -1;
	
	while((len = is.read(buffer))!=-1){
		os.write(buffer,0,len);
		os.flush();
	}
	
	os.close();
	is.close();
	
	}

}

结果展示:


响应空行

响应正文

        需要给浏览器的资源
            getWriter(); 字符流.
            getOutputStream() 字节流
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值