Request请求的应用
1.通过request获得请求行
获得客户端的请求方式:String getMethod()
获得请求的资源:
String getRequestURI()
StringBuffer getRequestURL()
String getContextPath() ---web应用的名称
String getQueryString() ---- get提交url地址后的参数字符串
注意:request获得客户机(客户端)的一些信息
request.getRemoteAddr() --- 获得访问的客户端IP地址
1 //获得请求方式
2 String Method=request.getMethod();
3 System.out.println("方式"+Method);
4 //获得请求资源相关内容
5 String requestURI=request.getRequestURI();
6 System.out.println("uri:"+requestURI);
7 StringBuffer requestURL =request.getRequestURL();
8 System.out.println("url:"+requestURL);
9 //获得WEB应用名称
10 String contextPath=request.getContextPath();
11 System.out.println("WEB应用名称"+contextPath);
12 //地址后的参数字符串
13 String queryString=request.getQueryString();
14 System.out.println(queryString);
15 //获得访问者的IP地址
16 String remoteAddr=request.getRemoteAddr();
17 System.out.println("ip:"+remoteAddr);
2.通过request获得请求头
1)long getDateHeader(String name)
2)String getHeader(String name)
3)Enumeration getHeaderNames()
4)Enumeration getHeaders(String name)
5)int getIntHeader(String name)
1 //获得指定的头
2 String header=request.getHeader("User-Agent");
3 System.out.println(header);
4 //2.获得所有头的信息
5 Enumeration<String> headerNames=request.getHeaderNames();
6 while(headerNames.hasMoreElements()) { //判断是否还有更多
7 String headerName=headerNames.nextElement();
8 String headerValue=request.getHeader(headerName);//通过名获取值
9 System.out.println(headerName+" "+headerValue);
注意:referer头的作用:执行此次访问的来源做防盗链
防止其他网站盗用自家网站信息
//简单的一个获取referer头的网页
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta charset="UTF-8">
5 <title>Insert title here</title>
6 </head>
7 <body>
8 <a href="/WEB4/referer">访问HeaderServlet资源</a>
14 </body>
15 </html>
String header =request.getHeader("referer");
//判断访问的地址是否为该地址
if(header!=null && header.startsWith("http://localhost"))
{
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("啦啦啦啦啦啦啦啦");
}else {
System.out.println("fsf");
}
3.通过request获得请求体
1)String getParameter(String name);
2)String[] getParameterValues(String name);
3)Enumeration getParameterNames();
4)Map<String,String[]> getParameterMap();
注意:get请求方式的请求参数 上述的方法一样可以获得;
解决post提交方式的乱码:request.setCharacterEncoding("UTF-8");
解决get提交的方式的乱码:parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");
<form action="/WEB4/content" method="post">
<input type="text" name="username"><br>
<input type="password" name="passworld"><br>
<input type="checkbox" name="hobby" value="zq">足球
<input type="checkbox" name="hobby" value="lq">篮球
<input type="checkbox" name="hobby" value="pq">乒乓球<br>
<input type="submit" value="提交">
</form>
1 //获得单个表单值
2 String username=request.getParameter("username");
3 System.out.println(username);
4 String password =request.getParameter("passworld");
5 System.out.println(password);
6 System.out.println("-------------------");
7 //2.获得多个表单的值
8 String[] hobbys = request.getParameterValues("hobby");
9 for(String hobby:hobbys) {
10 System.out.println(hobby);
11 }
12 System.out.println("-------------------");
13 //3.获得所有请求参数名称
14 Enumeration<String> parameterNames = request.getParameterNames();
15 while(parameterNames.hasMoreElements()) {
16 System.out.println(parameterNames.nextElement());
17 }
18 System.out.println("-------------------");
19 //4.获得所有的参数,参数封装到Map<String,String[]>
20 Map<String, String[]> parameterMap = request.getParameterMap();
21 for(Map.Entry<String, String[]> entry:parameterMap.entrySet()) {
22 System.out.println(entry.getKey());
23 for(String str:entry.getValue()) {
24 System.out.println(str);
25 }
26 System.out.println("---------------");
27 }
4.request的域对象和请求转发
(1)request是一个域对象
request对象也是一个存储数据的区域对象,所以也具有如下方法:
1)setAttribute(String name, Object o)
2)getAttribute(String name)
3)removeAttribute(String name)
注意:request域的作用范围:一次请求中
(2)request完成请求转发
获得请求转发器----path是转发的地址
RequestDispatcher getRequestDispatcher(String path)
通过转发器对象转发
requestDispathcer.forward(ServletRequest request, ServletResponse response)
客户端请求forwar1,forward1又发送请求到forward2;
//向request域当中存取数据
request.setAttribute("name", "tom");
//forward1将请求转发给forward2(获得转发器)
RequestDispatcher dispatcher = request.getRequestDispatcher("/forward2");//服务器端地址
//执行转发方法
dispatcher.forward(request, response);
//从request域中取数据
Object attribute = request.getAttribute("name");
response.getWriter().write("hello haohao..."+attribute);
注意:转发与重定向的区别?
1)重定向两次请求,转发一次请求
2)重定向地址栏的地址变化,转发地址不变
3)重新定向可以访问外部网站 转发只能访问内部资源
4)转发的性能要优于重定向
Request请求的应用的更多相关文章
- springMVC中 request请求数据绑定到Controller入参 过程剖析
前言:Controller方法的参数类型可以是基本类型,也可以是封装后的普通Java类型.若这个普通Java类型没有声明任何注解,则意味着它的每一个属性都需要到Request中去查找对应的请求参数.众 ...
- iOS开发之Socket通信实战--Request请求数据包编码模块
实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...
- Java中request请求之 - 带文件上传的form表单
常用系统开发中总免不了显示图片,保存一些文件资料等操作. 这些操作的背后,就是程序员最熟悉的 enctype="multipart/form-data"类型的表单. 说起file类 ...
- Servlet的学习之Request请求对象(3)
本篇接上一篇,将Servlet中的HttpServletRequest对象获取RequestDispatcher对象后能进行的[转发]forward功能和[包含]include功能介绍完. 首先来看R ...
- Servlet的学习之Request请求对象(2)
在上一篇<Servlet的学习(十)>中介绍了HttpServletRequest请求对象的一些常用方法,而从这篇起开始介绍和学习HttpServletRequest的常用功能. 使用Ht ...
- 关于微信小程序的Request请求错误处理
在学微信小程序的request请求的时候,一开始报“不在以下合法域名列表中,请参考文”的错误,后来又莫名其妙的报“400 Bad Request”错误,经过半天的研究,终于搞定了,把遇到的错误给大家分 ...
- javaWeb中request请求转发和response重定向
1.访问资源 运用forward方法只能重定向到同一个Web应用程序中的一个资源. 而sendRedirect方法可以让你重定向到任何URL. 2.request.get Forward代码中的&q ...
- 【安卓网络请求开源框架Volley源码解析系列】定制自己的Request请求及Volley框架源码剖析
通过前面的学习我们已经掌握了Volley的基本用法,没看过的建议大家先去阅读我的博文[安卓网络请求开源框架Volley源码解析系列]初识Volley及其基本用法.如StringRequest用来请求一 ...
- PHP Request请求封装
/** * Request请求封装 * Class Request * @package tool */ class Request { // curl 请求错误码 protected static ...
- 微信小程序wx.request请求用POST后台得不到传递数据
微信小程序的wx.request请求,method设为POST并向后台传递数据,但从后台返回的信息来看后台并没有获得传递的数据 wx.request({ url: 'url' ...
随机推荐
- 【原创】JAVA进程突然消失的原因?
引言 值此七夕佳节,烟哥放弃了无数妹纸的邀约,坐在电脑面前码字,就是为了给读者带来新的知识,这是一件伟大的事业! 好吧,实际情况是没人约.为了化解尴尬,我决定卖力写文章,嗯,一定是我过于屌丝! 好了, ...
- 从零开发一款自己的小程序UI组件库(二)
写在前面:从零开发一款自己的小程序UI组件库(一) 上节我们讲到初始化组件库模板.模板文件概述.模板上传npm以及npm包文件下载至本地并运用到项目.这节我们继续,内容主要有基础UI组件库的搭建(bu ...
- 【win】【qt5打包】【qt程序打包成一个可执行文件(带图标任何win都可以运行哦)】
[前言] 业务需求将qt程序打包成win可执行文件.咱是做linux的,奈何用的麒麟系统,程序运行在win,好嘛,重新在win qtcreator编译后打包呗. [目标] 1.给qt程序添加一个图标. ...
- vue中的v-if和v-show的区别
v-if和v-show的区别是前端面试中常问的基础知识点,v-if.v-show顾名思义就是用来判断视图层展示效果的.那么具体是怎么展示呢?v-if和v-show的区别又是什么呢? 首先我们可以来看一 ...
- Python自动化开发
阅读目录 第一篇:python入门 第二篇:字符编码.文件处理 第三篇:函数 第四篇:迭代器.生成器.三元表达式.列表生成式 第五篇:模块.包.软件开发规范 第六篇:日志模块 第七篇:常用模块 第八篇 ...
- Python中模块与包的导入(朴实易懂版的总结)
这几天,被python包与模块的导入问题,折磨的不行,以前想的很简单,其实不然,经查资料研究,特总结如下: 基本注意点 模块:一般指一个py文件:包:含有许多py文件的文件夹,含有 或不含有(Pyth ...
- Python数据分析之numpy数组全解析
1 什么是numpy numpy是一个在Python中做科学计算的基础库,重在数值计算,也是大部分Python科学计算库的基础库,多用于大型.多维数据上执行数值计算. 在NumPy 中,最重要的对象是 ...
- 企查查app 初步探索
企查查app sign算法破解初步探索 之前有说过企查查的sign的解密,但这次是企查查app的sign算法破解,目前是初步进程. 已删除!!!! 上边一些变量已经找到了,其中就有时间戳,其余两个需要 ...
- 随笔编号-07 JS针对时间操作
//获取完整的当前日期 var date=new Date; var year=date.getFullYear(); var month=date.getMonth()+1; month =(mon ...
- 数组的方法 forEach filter map slice splice
目前一些数组的实用的方法 1 arr.splice(i,n) 删除从i(索引值)开始之后的那个元素.返回值是删除的元素,改变原数组: 参数: i 索引值 n 个数 let arr = [1, ...