HttpServletRequest

1 HttpServletRequest概述

service⽅法中的request的类型是ServletRequest,⽽doGet/doPost⽅法的request的类型是
HttpServletRequest,HttpServletRequest是ServletRequest的⼦接⼝,功能和⽅法更加强⼤,所以我们学习HttpServletRequest

2 通过抓包⼯具抓取Http请求

在这里插入图片描述
因为request代表请求,所以我们可以通过该对象分别获得Http请求的请求⾏请求头请求体

3 通过request获得请求⾏

● 获得客户端的请求⽅式:String getMethod()
● 获得请求的资源:
○ String getRequestURI() – 获取请求URI
○ StringBuffer getRequestURL()
○ String getContextPath() – 获取虚拟⽬录
○ String getServletPath() – 获取Servlet路径
○ String getQueryString() – 获取get⽅式请求参数
○ username=zhangsan&password=123
○ String getRemoteAddr() – 获取客户机的IP地址

4 通过request获得请求头

long getDateHeader(String name)
String getHeader(String name)
int getIntHeader(String name)
Enumeration getHeaderNames() – 获取所有的请求头名称
常⻅的请求头:

  1. User-Agent:浏览器告诉服务器,我访问你使⽤的浏览器版本信息
    作⽤:可以在服务器端获取该头的信息,解决浏览器的兼容性问题
  1. Referer:告诉服务器,我(当前请求)从哪⾥来?

作⽤:防盗链

5 通过request获得请求体

请求体:只有POST请求⽅式,才有请求体,在请求体中封装了POST请求的请求参数。
步骤:

  1. 获取流对象
    BufferedReader getReader():获取字符输⼊流,只能操作字符数据
    ServletInputStream getInputStream():获取字节输⼊流,可以操作所有类型数据
  2. 再从流对象中拿数据

6 request的其他功能

6.1 获取请求参数通⽤⽅式

不论get还是post请求⽅式都可以使⽤下列⽅法来获取请求参数

  1. String getParameter(String name):根据参数名称获取参数值
    username=zs&password=123

  2. String[] getParameterValues(String name):根据参数名称获取参数值的数组
    hobby=xx&hobby=game

  3. Enumeration getParameterNames():获取所有请求的参数名称

  4. Map<String,String[]> getParameterMap():获取所有参数的map集合
    ● 中⽂乱码问题

            get⽅式:tomcat 8 已经将get⽅式乱码问题解决了
            post⽅式:会乱码(ISO8859-1)
    

○ 解决:在获取参数前,设置request的编码request.setCharacterEncoding(“utf-8”);

6.2 请求转发

请求转发:⼀种在服务器内部的资源跳转⽅式
5. 步骤:
1. 通过request对象获取请求转发器对象:RequestDispatcher
getRequestDispatcher(String path)
2. 使⽤RequestDispatcher对象来进⾏转发:forward(ServletRequest request,
ServletResponse response)
在这里插入图片描述

  1. 特点:
    1. 浏览器地址栏路径不发⽣变化
    2. 只能转发到当前服务器内部资源中
    3. 转发是⼀次请求

6.3 共享数据

域对象:⼀个有作⽤范围的对象,可以在范围内共享数据
request域:代表⼀次请求的范围,⼀般⽤于请求转发的多个资源中共享数据
⽅法:
7. void setAttribute(String name,Object obj):存储数据
8. Object getAttitude(String name):通过键获取值
9. void removeAttribute(String name):通过键移除键值对
注意:ServletContext域与Request域的⽣命周期⽐较?
● ServletContext
创建:服务器启动
销毁:服务器关闭
域的作⽤范围:整个web应⽤
● request
创建:访问时创建request
销毁:响应结束request销毁
域的作⽤范围:⼀次请求中

6.4repons

服务器(Servlet) -> 客户端 set方法

1. 设置响应行
 	 setStatus(int)
    302: 重定向
2.  设置响应头
    String getHeader(name) - request
    setHeader(name, value)
    addHeader(name, value)
3. 设置响应体

7.页面跳转的方式

  1. 转发: 1次请求, 地址栏不变, 服务器内部行为(提供服务器端路径)
  2. 重定向:2次请求, 地址栏改变, 服务器和客户端之间的行为(提供客户端路径)
  3. 超链接
  4. 表单提交
  5. 直接地址栏访问
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值