美文网首页
Tomcat - request 和 response对象

Tomcat - request 和 response对象

作者: sunboximeng | 来源:发表于2018-07-11 10:30 被阅读23次

Request对象

HTTP请求消息数据格式
(记忆:请求-->出门-->带上行头和身体)

请求行:方法 url 协议 (get/post方法。get方法的url可以带参数)
请求头:键:值  (客户端自己的信息:User-Agent、Referer、Cookie)
保留空行
请求体:键=值 或 客户端上传的文件(post方法才会有请求体)

request对象封装了以上字段,从而可以读取请求消息。
request对象常用方法:

  • 获取请求行的每一部分:方法、路径、路径中的请求参数。
    获取请求方法的方法在Tomcat内部已经使用了。
    获取请求参数的方法,功能简单,不能自动parse,所以不常用。
    常用获取路径的方法,用于权限控制:
    • StringBuffer getRequestURL():全路径,包含IP地址。
    • String getRequestURI():除IP地址外的部分,也就是服务器中的一个文件目录
    • String getRemoteAddr():IP地址
  • 获取请求头数据:
    获取所有的键:Enumeration<String> getHeaderNames()
    键找值:String getHeader(String name)
    应用:判断兼容性,防盗链
  • 获取请求体数据
    post方法的表单提交、文件上传就会生成请求体。
    表单就用字符流:BufferedReader getReader()。但是一样只能一行行读数据,不能自动parse,所以不常用。
    文件就用字节流:ServletInputStream getInputStream()
  • 通用的获取请求的参数的方法
    获取所有键值对:Map<String,String[]> getParameterMap()
    获取所有的键:Enumeration<String> getParameterNames()
    键找值:String getParameter(String name)、复选框:String[] getParameterValues(String name)
    乱码问题:request的编码要与html页面编码一致。html一般就是utf-8的编码。request.setCharacterEncoding("utf-8");
  • Servlet间通信
    遵循单一职责原则设计的Servlet类之间相互协作
    • 请求转发:获得转发器-->转发
      特点:1. 浏览器地址栏路径不发生变化。毕竟服务器内部的处理不需要暴露在外面
         2. 只能转发到当前服务器内部资源中。别的服务器是访问不了的
         3. 转发是一次请求。f12可查看Network,只有一个请求。
    • 共享数据:给共享的request对象设置属性即可。

Response对象

HTTP响应消息数据格式

响应行:协议 状态 (状态分5类)
响应头:键:值 (Content-Type设置编码、Content-disposition设置打开方式)
保留空行
响应体:网页文件

response对象封装了以上字段,从而可以设置响应消息。
response对象常用方法:

  • setStatus(int sc)
  • setHeader(String name, String value)
  • 利用流写出响应体。

跳转页面:js绑定点击事件、<a> 、<form>、重定向、转发。
路径写法规则:判断定义的路径是给谁用的,判断请求将来从哪儿发出

  • 给客户端浏览器使用的路径:需要加虚拟目录(项目的访问路径)
    建议虚拟目录动态获取(不写死):request.getContextPath()
    <a> , <form>, 重定向...
  • 给服务器使用:不需要加虚拟目录
    转发路径

重定向

  • 方式一:
    //1. 设置状态码为302
    response.setStatus(302);
    //2. 设置响应头location。js实现页面跳转就是设置BOM的地址栏对象
    response.setHeader("location","/day15/responseDemo2");
  • 方式二:
    //简单的重定向方法,省去了状态码
    response.sendRedirect("/day15/responseDemo2");
  • 方式三:
    response.setHeader("refresh", "3;url=")

forward 和 redirect 区别

编码问题
输出流默认的编码是拉丁的,所以需要设置。设置完还要告诉浏览器(因为响应体的数据不一定是html文件)。
貌似还有一步到位的方法。

相关文章

网友评论

      本文标题:Tomcat - request 和 response对象

      本文链接:https://www.haomeiwen.com/subject/eggcpftx.html