response对象

response对象

在Servlet中可以使用的内置对象主要有:request、response、application、session、out(PrintWriter)。

ServletResponse简介

​ 定义辅助 servlet 将响应发送到客户端的对象。servlet 容器创建 ServletResponse 对象,并将它作为参数传递给 servlet 的 service 方法。 要发送 MIME 正文响应中的二进制数据,请使用 getOutputStream 返回的 ServletOutputStream。要发送字符数据,请使用 getWriter 返回的 PrintWriter 对象。

HttpServletResponse介绍

扩展 ServletResponse 接口以提供特定于 HTTP 的发送响应功能。例如,该接口拥有访问 HTTP 头和 cookie 的方法。 客户端向服务器发起的都是HTTP协议操作,所以我们大部分使用HttpServletResponse对象作为直接操作对象!

HttpServletResponse 常用API介绍
方法名称作用
setStatus(int code)设置响应状态码:200 成功 302 临时重定向 304 处理缓存 404 Not Found没有找到资源,500 服务器错误
setHeader(name,value)设置响应信息头
setCharacterEncoding(String);设置编码格式
setContentType(String)设置返回数据mimetype
getWriter()获取字符输出流
getOutputStream()获取字节输出流
设置返回字符编码格式
  • 方案1

    response.setCharacterEncoding("utf-8");
    设置tomcat编码格式
    <html>
    	<head>
    		<meta charset="utf-8">
      		<title>xxx</title>
    	</head>
    	<body>编写返回的文本内容</body>
    </html>	
    设置浏览器解析文本内容格式  
    

    可以解决返回字符串乱码问题,但是需要将返回的字符串封装到html代码中.操作繁琐!

  • 方案2

    response.setHeader("Content-type","text/html;charset=UTF-8")
    

    方案按相对简单,通过设置响应头告知浏览器解析字符串的编码格式!

  • 方案3(推荐)

    response.setContentType("text/html;charset=UTF-8")
    

    利用setContentType这种综合性的写法解决问题!此方法也是开发中常用的方法!方便!

response练习
  1. 用户下载服务器图片

    public class DownLoadServlet extends HttpServlet {
    	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		/**
    		 * 别人访问我 我给你一张图片
    		 * 
    		 * 1.获取图片的输入流
    		 * 2.response的字节输出流
    		 */
    		//1.获取图片或者文件的输入流
    		//想要或某个文件  你必须知道绝对路径
    	    //手段: 项目中的相对路径 去获取绝对路径
    
    		//ServletContext getRealPath 相对路径转成绝对路径
    		String path = getServletContext().getRealPath("/img.jpg");
    		
    		System.out.println(path);
    		//文件输入流
    		FileInputStream stream = new FileInputStream(path);
    		String filename = path.substring(path.lastIndexOf(File.separator)+1);
    		//文件名编码
    		 filename =  URLEncoder.encode(filename,"UTF-8");
    		//设置响应头
    		//content-disposition", "attachment;filename="+filename 
    		//下载用的 attachment下载: filename下载文件的名字 
    		response.setHeader("content-disposition", "attachment;filename="+filename);
    		//根据文件名字的后缀名获取类型
    		String mimetype = getServletContext().getMimeType(filename);
    		response.setContentType(mimetype); //下载文件的类型
    		ServletOutputStream outputStream = response.getOutputStream();
    		byte [] buffer = new byte [8*1024];
    		int len = 0;
    		while((len=stream.read(buffer)) != -1){
    			outputStream.write(buffer, 0, len);
    		}
    		stream.close();
    	}
    }
    
  2. 页面中添加验证码

    1. 项目中添加第三方jar包validatecode.jar
    2. 创建返回验证码的servlet!
    public class CodeServlet extends HttpServlet {
    
    	/**
    		 * The doGet method of the servlet. <br>
    		 * This method is called when a form has its tag value method equals to get
    		 * @param request the request send by the client to the server
    		 * @param response the response send by the server to the client
    		 * @throws ServletException if an error occurred
    		 * @throws IOException if an error occurred
    		 */
    	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		//1.设置生成规则
    		/**
    		 * width:验证码的宽度  px 像素
    		 * height: px
    		 * codeCount:生成验证码有几个数
    		 * lineCount:有几根线
    		 */
    		ValidateCode code = new ValidateCode(200, 50, 6, 20);
    		//2.获取生成的验证码的字符串值
    		System.out.println(code.getCode()); //获取正确值
    		//3.响应写回验证图片
    		code.write(response.getOutputStream());
    	}
    } 
    
    1. 页面中使用当前servlet
    <!DOCTYPE html>
    <html>
      <head>
        <title>login.html</title>
        <meta name="keywords" content="keyword1,keyword2,keyword3">
        <meta name="description" content="this is my page">
        <meta name="content-type" content="text/html; charset=UTF-8">
        <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
      </head>
      <body>
          <form action="/Day11_Response1/servlet/LoginServlet"  method="post">
          	  <input type="text" name="username" placeholder="请输入账号!" />
          	  <input type="submit" value="登录"/>
          </form>
          <img src="/Day11_Response1/servlet/CodeServlet" onclick="changeCodes()" alt="验证码" title="验证码"/>
          <a href="javascript:changeCodes()" >看不清?</a>
          <script type="text/javascript">
          	function changeCodes(){
          	    var img= document.getElementsByTagName("img")[0];
          	    img.src = "/Day11_Response1/servlet/CodeServlet?r="+Math.random();
          	}
          </script>
      </body>
    </html>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值