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请求的应用的更多相关文章

  1. springMVC中 request请求数据绑定到Controller入参 过程剖析

    前言:Controller方法的参数类型可以是基本类型,也可以是封装后的普通Java类型.若这个普通Java类型没有声明任何注解,则意味着它的每一个属性都需要到Request中去查找对应的请求参数.众 ...

  2. iOS开发之Socket通信实战--Request请求数据包编码模块

    实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...

  3. Java中request请求之 - 带文件上传的form表单

    常用系统开发中总免不了显示图片,保存一些文件资料等操作. 这些操作的背后,就是程序员最熟悉的 enctype="multipart/form-data"类型的表单. 说起file类 ...

  4. Servlet的学习之Request请求对象(3)

    本篇接上一篇,将Servlet中的HttpServletRequest对象获取RequestDispatcher对象后能进行的[转发]forward功能和[包含]include功能介绍完. 首先来看R ...

  5. Servlet的学习之Request请求对象(2)

    在上一篇<Servlet的学习(十)>中介绍了HttpServletRequest请求对象的一些常用方法,而从这篇起开始介绍和学习HttpServletRequest的常用功能. 使用Ht ...

  6. 关于微信小程序的Request请求错误处理

    在学微信小程序的request请求的时候,一开始报“不在以下合法域名列表中,请参考文”的错误,后来又莫名其妙的报“400 Bad Request”错误,经过半天的研究,终于搞定了,把遇到的错误给大家分 ...

  7. javaWeb中request请求转发和response重定向

    1.访问资源 运用forward方法只能重定向到同一个Web应用程序中的一个资源. 而sendRedirect方法可以让你重定向到任何URL.  2.request.get Forward代码中的&q ...

  8. 【安卓网络请求开源框架Volley源码解析系列】定制自己的Request请求及Volley框架源码剖析

    通过前面的学习我们已经掌握了Volley的基本用法,没看过的建议大家先去阅读我的博文[安卓网络请求开源框架Volley源码解析系列]初识Volley及其基本用法.如StringRequest用来请求一 ...

  9. PHP Request请求封装

    /** * Request请求封装 * Class Request * @package tool */ class Request { // curl 请求错误码 protected static ...

  10. 微信小程序wx.request请求用POST后台得不到传递数据

    微信小程序的wx.request请求,method设为POST并向后台传递数据,但从后台返回的信息来看后台并没有获得传递的数据 wx.request({              url: 'url' ...

随机推荐

  1. 5、数组的复制(test2.java、test3.java)

    对于数组的复制,在最开始的时候最容易犯的一个错误,那就是自己认为的申请一个数组,然后将已存在的数组赋值到新申请数组名上,这样是错误的,这样仅仅是将数组的地址复制了过去,并不是,将数组内的元素拷贝过去, ...

  2. ccf 201809-4 再卖菜

    这题一开始不知道剪枝这种操作,只会傻傻地dfs. 然后dfs递归写80分超时,非递归写70分超时(纳尼?我一直以为非递归算法在时间上会更优秀一些,为什么会这样?!!) 剪一下枝就都能过了 #inclu ...

  3. selenium中的setUp,tearDown与setUpClass,tearDownClass的区别

    def setUpClass(cls): cls.driver = webdriver.Chrome() cls.driver.maximize_window() def setUp(self): s ...

  4. javaScript基础-0 javascript概述

    一.简介 javaScript一种面向web的编程语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早 ...

  5. Json对象转Ts类

    一 目标 推荐一款在线将Json对象转换为Ts类的工具:https://apihelper.jccore.cn/jsontool 可以帮助前端开发人员提高开发效率. 二 背景 Json是一种轻量级的数 ...

  6. 使用docker快速搭建本地环境

    在平时的开发中工作中,环境的搭建其实一直都是一个很麻烦的事情 特别是现在,系统越来越复杂,所需要连接的一些中间件也越来越多. 然而要顺利的安装好这些中间件也是一个比较费时费力的工作. 俗话说" ...

  7. 集合系列 List(二):ArrayList

    ArrayList 是 List 集合的列表经典实现,其底层采用定长数组实现,可以根据集合大小进行自动扩容. public class ArrayList<E> extends Abstr ...

  8. 实战redhat6.5离线升级openssl&openssh

    记录一次RedHat6.5升级openssl&openssh踩坑填坑.由于机房信息安全员用绿盟扫描出服务器openssh有8个重要的安全漏洞,最好的解决方式就是升级版本. 注意事项: 先升级o ...

  9. ABAP实现Geohash

    前几天群里有人问ABAP有没有Geohash函数,用来帮助SAP存储门店位置.实现对附近门店查找的功能.因为没有查到,所以我动手写了一个. Geohash是什么 Geohash是一种公共域地理编码系统 ...

  10. 设计模式(C#)——02简单工厂模式

    推荐阅读:  我的CSDN  我的博客园  QQ群:704621321       工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来.通俗来说,你只关心怎么用,不用关心怎么做 ...