JavaWeb基础(5):Request&Response


layout: post
title: “JavaWeb基础(5):Request&Response”
categories: JavaWeb
tags: JavaWeb
author: mio4

  • content
    {:toc}

文章目录

    • layout: post title: "JavaWeb基础(5):Request&Response" categories: JavaWeb tags: JavaWeb author: mio4
  • (一)Request
    • (0)组成
    • (1)请求转发
  • (二)Response
    • (0)组成
      • (1)实现页面的跳转
      • (2)操纵相应体
      • (3)输出流
    • (1)实现文件下载
      • (1)超链接下载
      • (2)编码下载
    • (2)动态验证码

(一)Request

(0)组成

  • Request
    • 作用:获取浏览器发送过来的数据,比如请求的方法是GET还是POST,比如URL请求后面的参数
    • 组成:请求行 请求头 请求体
  • 获取请求行
    • String getMethod():获取请求方式
    • getRequestURI():获取部分路径比如/BasicDemo6/Login
    • getRequestURL(): 获取完整路径比如http://localhost/BasicDemo6/Login
    • request.getRemoteAddr(): Returns the Internet Protocol (IP) address of the client or last proxy that sent the request.
  • 操作请求参数
    • getParameter():比如可以用来得到表单提交的数据或者地址栏提交的数据
    • getParameterMap()
  • 编码问题
    • 了解原理:出现乱码是因为客户端和服务器之间的编码方式不同导致的
    • 对于get请求:参数追加到地址栏之后,会使用utf-8编码提交到服务器,而服务器会使用iso-8859-1进行解码
    • 对于post请求:参数放在请求体中,同样服务器使用iso-8859-1进行解码
  • 针对POST请求下表单乱码的问题:request.setCharacterEncoding("utf-8");

(1)请求转发

  • 将发送到一个Servlet的数据转发给另外一个Servlet
    • request.getRequestDispatcher("/servlet2").forward(request,response);
  • 重定向和请求转发的去呗
    • 重定向发送两次请求,请求转发发送一次请求
    • 重定向由浏览器发起,请求转发是在服务器内部进行
    • 重定向是response对象的方法,请求转发是request对象的方法

(二)Response

(0)组成

  • Response组成
    • 响应行
    • 相应头
    • 相应体
  • 相应行
    • setStatus(int state)方法:设置HTTP请求的状态码
  • 相应头Response Header
    • setHeader(String key, String value):比如设置相应的编码方式以及返回方式(“text/html”)
    • addHeader():添加字符串形式的响应头
    • 常见的相应头:
    • location 重定向
    • refresh 定时刷新
    • content-type
    • response.sendRedirect("/BasicDemo6/Loc2"):重定向(到另一个地址,Status Code 302)
  • 相应体

(1)实现页面的跳转

  • response.sendRedirect("/BasicDemo6/Loc2")
  • 使用HTML中meta的http-equiv标签

(2)操纵相应体

  • response.setContentType(“text/html;charset=UTF-8”); //避免写回HTML页面时的中文乱码
    • 等价于 response.setHeader(“content-type”,“text/html;charset=UTF-8”);

(3)输出流

  • 互斥的输出流
    • Writer getWriter() 字符流
    • ServletOutputStream getOutputStream() 字节流

(1)实现文件下载

  • 文件下载:从服务器发送数据到浏览器

(1)超链接下载

  • 在HTML中直接插入下载链接,使用较少
<a href="/BasicDemo6/download/headShot.png">下载这张图片a> //直接使用资源地址进行下载

(2)编码下载

  • 使用Servlet进行文件的下载
	//1.得到文件的mime类型
	String mimeType = context.getMimeType(文件名);
	response.setContentType(mimeType);
	//2.设置下载的头信息
	response.setHeader("content-disposition","attachment;filename=" + fileName);
	//3. 提供流
	InputStream is = servletContext.getResourceAsStream("/download/" + fileName);
	ServletOutputStream os = response.getOutputStream();
	int len = -1;
	byte[] b = new byte[1024];
	while((len=is.read(b)) != -1){
		os.write(b,0,len);
	}

(2)动态验证码

  • 使用awt库绘制验证码图片
  • 鼠标点击图片会触发事件
    • 修改图片的src,让每次传参不同,防止缓存不能及时刷新图片
    <script>
        function changeImg(obj){
            obj.src="/BasicDemo6/Code?i=" + Math.random();
        }
    script>
	
    <img src="/BasicDemo6/Code" alt="验证码" onclick="changeImg(this)"/>

你可能感兴趣的:(JavaWeb)