Request和Response

Request和Response

当Web容器收到客户端发送的http请求,会在Servlet初始化之后,service调用之前创建HttpServletRequest和HttpServletResponse对象。HttpServletRequest和HttpServletResponse对象分别封装了HTTP协议的请求(客户端实际请求信息)和响应信息(服务器默认响应信息)。

Request

  • 请求行

    • GET请求:

      请求行信息:
      
      GET http://localhost:8080/TomcatDemo/demo  HTTP/1.1
    • POST请求:

      请求行信息:
      
      POST http://localhost:8080/TomcatDemo/demo  HTTP/1.1
    • HttpServletRequest对象通过方法获取对应的信息。

      • getMethod():获取请求方式。
      • getRequestURL():获取请求的URL。
      • getRequestURI():获取请求的URI。
      • getContextPath():获取当前应用的虚拟目录。

      如:

      out.println("请求方式 : "+request.getMethod());
      out.println("请求URL : "+request.getRequestURL());
      out.println("请求URI : "+request.getRequestURI());
      out.println("ContextPath : "+request.getContextPath());
      
      结果显示:
      
      请求方式 : GET
      请求URL : http://localhost:8080/TomcatDemo/my
      请求URI : /TomcatDemo/my
      ContextPath : /TomcatDemo
  • 请求消息头(关于HTTP的知识)

    请求消息头的内容比较多,可以通过getHeaderNames(),获取所有消息头信息,通过getHeader(String name),获取name对应的值。

    如:

    servlet代码:
    
    Enumeration<String> headers =  request.getHeaderNames();
    String name = "";
    while (headers.hasMoreElements()){
        name = headers.nextElement();
        out.println(name+" : "+ request.getHeader(name));
    }
    
    
    显示结果:
    
    host : localhost:8080
    connection : keep-alive
    upgrade-insecure-requests : 1
    user-agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36
    accept : text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    accept-encoding : gzip, deflate, sdch, br
    accept-language : zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4
  • 请求正文

    请求正文不在GET请求方式中使用,一般是POST请求通过请求正文来传递数据。

    • 获取表单数据相关的方法
      • getParameter(String name):根据表单的属性名获取对应点数据。
      • getParameterNames():获取表单所有的属性名。
      • getParameterMap():获取所有表单数据,以Map的形式封装
      • getInputStream():获取以字节流的表单数据。
    • 获取非表单数据相关的方法
      • setAttribute():
      • getAttribute():
      • removeAttribute():
  • 与转发相关的方法:

    • getRequestDispatcher()
    • RequestDispatcher类
      • forward():转发的方法
      • include():请求包含
  • HttpServletRequest对象还可以获取客户端的ip地址,以及本机ip地址。

    如:

    servlet代码:
    
    out.println("remote address: "+request.getRemoteAddr());
    out.println("remote host:"+request.getRemoteHost());
    out.println("remote port:"+request.getRemotePort());
    
    out.println("local address: "+request.getLocalAddr());
    out.println("local name:"+request.getLocalName());
    out.println("local port: "+request.getLocalPort());
    
    
    显示结果:
    
    remote address: 192.168.2.103
    remote host:192.168.2.103
    remote port:57721
    local address: 192.168.2.103
    local name:DESKTOP-GCGM9LM
    local port: 8080
  • 除此之外,还有一个编码等信息,这里就不一一介绍了。

下面是GET和POST的请求信息的截图,如下:

GET请求:

image

POST请求:

image

Response

  • 响应行

    • setStatue(int sc) 设置响应状态码
          响应消息行:
          HTTP/1.1 200 OK
  • 响应头(关于HTTP的知识)

    • sendRedirect():请求重定向
    • setHander():设置响应头信息
      //告诉响应头的编码方式。
      response.setHeader("content-type", "text/html;charset=UTF-8");
       //告知客户端不缓存
      response.setHeader("pragma", "no-cache");
      response.setHeader("cache-control", "no-cache");
      response.setDateHeader("expires", 0);
      
      //文件下载
      response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(filename,"UTF-8"));
      
      //刷新
      response.setHeader("refresh", "3");//每3秒刷新一次
      //3秒后刷新image.html网页
      response.setHeader("refresh", "3;url=/TomcatDemo/image.html");
      
      //重定向
      response.setStatus(HttpServletResponse.SC_FOUND);//状态码302
      //设置重定向的地址
      response.setHeader("location", "/TomcatDemo/image.html");
      
      //重定向的另一种写法
      response.sendRedirect("/TomcatDemo/image.html");
      
  • 响应正文

    • getWrite():字符流传输(文本,json,html等)
    • getOutputStream():字节流传输(图片音视频等二进制文件)
    • setContentType():告诉客户端使用什么编码方式。
    • setCharacterEncoding():告诉服务端用什么编码方式。

如下图所示:响应的信息

image


URLEncoder

URLEncoder是用于转换编码方式的工具类。
详情点击此处

示例代码:

String strTest = "?=abc?中%1&2<3,4>";
strTest = URLEncoder.encode(strTest, "UTF-8");
System.out.println(strTest);
strTest = URLDecoder.decode(strTest,"UTF-8");
System.out.println(strTest);


执行结果:

%3F%3Dabc%3F%E4%B8%AD%251%262%3C3%2C4%3E
?=abc?中%1&2<3,4>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值