HttpServletRequest概述

request的类型是:javax.servlet.http.HttpServletRequest。request是服务器在收到客户端(浏览器)的请求后创建的对象,用来封装请求数据。

request的功能有一下几种

  • 封装请求头数据
  • 封装了请求正文数据,如果是GET请求,那么没有正文;
  • request是一个域对象,可以把它当成Map来添加获取数据
  • request提供了请求转发和请求包含的功能。

request域方法:

  • void setAttribute(String name,Object value);可以用来存储一个对象也可以用来存储一个域属性
  • Object getAttribute(String name); 用来获取存储的对象
  • void removeAttribute(String name);用来移除request域中的属性
  • Enumeration getAttributeName();获取属性所有域属性的名称

request获取请求头数据

  • String getHeader(String name);获取指定名称的请求头;
  • Enumeration getHeader();获取所有请求头名称
  • int getIntHeader(String name) 获取值为int类型的请求头

request 获取请求相关方法:

request中还提供了与请求相关的其他方法,有些方法是为了我们更加便捷的方法请求头数据而设计,有些是与请求URL相关的方法。

  • int getContentLength():获取请求体的字节数,GET请求没有请求体,没有请求体返回-1;
  • String getContentType():获取请求类型,如果请求是GET,那么这个方法返回null;如果是POST请求,那么默认为application/x-www-form-urlencoded,表示请求体内容使用了URL编码;
  • String getMethod():返回请求方法,例如:GET
  • Locale getLocale():返回当前客户端浏览器的Locale。java.util.Locale表示国家和言语,这个东西在国际化中很有用;
  • String getCharacterEncoding():获取请求编码,如果没有setCharacterEncoding(),那么返回null,表示使用ISO-8859-1编码;
  • void setCharacterEncoding(String code):设置请求编码,只对请求体有效!注意,对于GET而言,没有请求体!!!所以此方法只能对POST请求中的参数有效!
  • String getContextPath():返回上下文路径,例如:/hello
  • String getQueryString():返回请求URL中的参数,例如:name=zhangSan
  • String getRequestURI():返回请求URI路径,例如:/hello/oneServlet
  • StringBuffer getRequestURL():返回请求URL路径,例如:http://localhost/hello/oneServlet,即返回除了参数以外的路径信息;
  • String getServletPath():返回Servlet路径,例如:/oneServlet
  • String getRemoteAddr():返回当前客户端的IP地址;
  • String getRemoteHost():返回当前客户端的主机名,但这个方法的实现还是获取IP地址;
  • String getScheme():返回请求协议,例如:http;
  • String getServerName():返回主机名,例如:localhost
  • int getServerPort():返回服务器端口号,例如:8080

       

 

request获取请求参数

主要有两种:GET、POST请求

GET请求:

  • 浏览器地址栏直接输入
  • 超链接
  • 表单:<form>默认使用GET

POST请求

  • 只要当表单中method=“post”时,才是POST请求

 

GET请求和POST请求的区别:

GET请求:

  • 请求参数会在浏览器的地址栏中显示,所以不安全;
  • 请求参数长度限制长度在1K之内;
  • GET请求没有请求体,无法通过request.setCharacterEncoding()来设置参数的编码;

POST请求:

  • 请求参数不会显示浏览器的地址栏,相对安全;
  • 请求参数长度没有限制;

 

请求转发(forward)和请求包含(include):

首先两者都是由多个Servlet来处理一个请求,不同的是:请求转发前面经过的servlet只能添加请求头,不能添加请求体(加了也会被覆盖,如果过大还会报错);请求包含可以添加请求头也可以添加请求题。

       

     一句话概括:转发:留头不留体;包含:留头又流体

 

请求转发(和包含)与重定向的区别:

  • 请求转发是一个请求,重定向是两个请求;
  • 请求转发地址栏不会变化,重定向地址栏会变化
  • 请求转发的目标只能是本应用中的资源,重定向的目标可以是其他应用。
  • 请求转发对多个servlet的请求方法是相同的,要么是GET,要么是POST;重定向第二个请求一定是GET
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值