Request

#2020云栖大会#阿里云海量offer来啦!投简历、赢阿里云限量礼品及阿里云ACA认证免费考试资格!>>> hot3.png

f991dd041aeb6603d91b09d96c93b4ef6ee.gif Request 25b4176ac3baaf76903444a6c103969d742.png

1.获取请求行

2.获取请求头

3.获取请求体

4.请求转发

ac8cd29c52013244e8f41cd446e8c0cd929.png 0 1 获取请求行

请求行信息

491e0be83c20ef847a50c4e028d6fa0fc0a.png

包含请求方式、URL、版本


获取请求方式

String method = request.getMethod();


获取请求资源(URL、URI)

// "http://localhost:8080/request/Request" StringBuffer url = request.getRequestURL();
// "/request/Request" StringBuffer url = request.getRequestURL();
/* url包含请求的从主机到当前文件 uri只包含从项目下到当前文件*/


获取项目名

//"/request"String contextPath = request.getContextPath();


获取get查询参数

//"name=hs&sex=man"String queryString = request.getQueryString();


73c11de00583a2d2449efeee7cb07b5ca44.png


0 2 获取请求头

23e0a22deb64f1bb862fa06b9bc92c0ec8b.png

请求头都是以键值对或者叫entry形式存在的信息


获取所有的请求头名称

Enumeration<String> headerNames = request.getHeaderNames();while(headerNames.hasMoreElements()) {    System.out.println(headerNames.nextElement());}


66840c0bd7d4dd663426aae241476e71426.png


获取指定请求头名称的值

String header = request.getHeader("Host");


通过上面就可以进一步打印所有请求名称并对应的值

Enumeration<String> headerNames = request.getHeaderNames();while(headerNames.hasMoreElements()) {    String headername = headerNames.nextElement();    String headvalue = request.getHeader(headername);    System.out.println(headername+":"+headvalue);}


请求头中有一个叫referer的它的值表示上一个页面的URL,当从一个页面跳转到当前页面,那么当前页面的请求头的referer的值就表示从哪个页面过来的


0 3 获取请求体

请求体包含在请求时传入的参数

e3ab61a5ff2eb1e2c5edcb7281e4be77a4f.jpg

在一些静态页面定义的参数,请求传入。在程序中获取


获取一个值

String value = request.getParameter("name");


获取多个值(当一个参数含多个值)

比如上图的like参数

String[] values = request.getParameterValues("like");


获取所有的请求参数名

Enumeration<String> names = request.getParameterNames();while(names.hasMoreElements()) {  System.out.println(names.nextElement());}


获取所有请求参数

Map<String,String[]> parameterMap = request.getParameterMap();for(Map.entry<String,String[]> entry : parameterMap.entrySet()){    System.out.println(entry.getkey()+":"+Arrays.toString(entry.getValue()));}
0 4 请求转发

请求转发与重定向的区别


重定向

  • 找servlet1,通过设置响应,告诉浏览器, 再让浏览器发送请求到servlet2

  • 发两次请求

  • 地址栏会发生变化


请求转发

  • 请求转发只需要发送一次直接,找servlet1,在servlet1当中直接转发给servlet2,不要再告诉浏览器

  • 只发送一次请求

  • 浏览器地址栏当中还是servlet1,不会发生变化


设置请求转发

//获得转发器,设置转发到哪个RequestDispatcher rd = request.getRequestDispatcher("url");//调用转发器转发,传入当前的servlet收到的请求与响应对象给转发的servlerd.forward(request,response);

并且在一个servlet中用request设置的Attribute键值对,在转发后的servlet也能获得。也就是说转发后的servlet得到的request,response对象是最开始请求创建的信息加上在之前servlet添加后的信息。而不是仅仅把它自己获得的这两个对象传给转发的

37aca6f0275b543f8cee11f50d7f5cc1e75.png ad6e2606f8c79345d8baa19cfa9794168ec.jpg

它,

不仅仅是一个码



本文分享自微信公众号 - IT那个小笔记(qq1839646816)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值