Request 六大功能:

1.获取客户端请求信息:

  getRequestURL方法 -- 返回客户端发出请求完整URL
  getRequestURI方法 -- 返回请求行中的资源名部分
  getQueryString方法 -- 返回请求行中的参数部分
  getRemoteAddr方法 -- 返回发出请求的客户机的IP地址
  getMethod -- 得到客户机请求方式
  getContextPath -- 获得当前web应用虚拟目录名称 -- 在写路径时不要将web应用的虚拟路径的名称写死, 应该在需要写web应用的名称的地方通过getContextPath方法动态获取

  

  //将页面重定向--改写法只能是重定向到统一服务器和端口号的资源。若要要重定向到其它服务器的资源需要加上服务器地址和端口号

  response.sendRedirect(request.getContextPath()+"/index.jsp");

2.获取请求头信息(根据请求头的键获取对应的value值)
  getHeader(name)方法 --- String
  getHeaders(String name)方法 --- Enumeration<String>
  getHeaderNames方法 --- Enumeration<String>
  getIntHeader(name)方法  --- int
  getDateHeader(name)方法 --- long(日期对应毫秒)

 /*
* 获取请求头信息
*/
//获取一个头的value
String value = request.getHeader("Accept"); //获取多个头信息User-Agent的值
Enumeration values = request.getHeaders("User-Agent");
while (values.hasMoreElements()) {
//取得其中的一个值
String val = (String) values.nextElement();
System.out.println("**"+val);
}
//枚举出请求头信息的所有信息。
Enumeration headerNames = request.getHeaderNames(); //获取到头信息的所有键名
while (headerNames.hasMoreElements()) {
String headerName = (String) headerNames.nextElement();
String header = request.getHeader(headerName); //根据键名获取对应的值
System.out.println("-:"+headerName+":"+header); }

3.获取请求参数:
  getParameter(String name) --- String 通过name获得值
  getParameterValues(String name)  --- String[ ] 通过name获得多值 checkbox
  getParameterMap()  --- Map<String,String[ ]> key :name value: 多值
  getParameterNames()  --- Enumeration<String> 获得所有name

/*
* 获取请求参数信息
*/
//根据参数名获取请求参数的值(获取传入后台的值)
String username = request.getParameter("username");
String nickname = request.getParameter("nickname");
//反向解码得出username对应的二机制序列
byte[] userbytes = username.getBytes("iso8859-1");
username = new String(userbytes, "utf-8");
byte[] nickbytes = nickname.getBytes("iso8859-1");
nickname = new String(nickbytes, "utf-8");
//打印输出
System.out.println("username: "+username);
System.out.println("nickname: "+nickname); //根据前台相同的name值获取多个对应的值--返回的是一个数组不是个枚举
String[] likes = request.getParameterValues("like");
System.out.println("parameter::"+Arrays.toString(likes)); //将前台传入的和表单数据,用map结构来统一获取并分别获取各个键值对的值
//注意:Map的泛型结构是键为String 值为String[];为了防止相同name时可以得到多个值
Map<String,String[]> map = request.getParameterMap();
Set<Entry<String, String[]>> set = map.entrySet();
Iterator<Entry<String, String[]>> it = set.iterator();
while (it.hasNext()) {
Map.Entry<String,String[]> enIt = (Map.Entry<String, String[]>) it.next();
//System.out.println(enIt.getKey());
System.out.println(enIt.getKey()+"=="+Arrays.toString(enIt.getValue())); }
//返回表单中所有含有name属性的属性名称,包括按钮
Enumeration names = request.getParameterNames();
while (names.hasMoreElements()) {
    String name = (String) names.nextElement();
    String[] val = request.getParameterValues(name);
    System.out.println(name+" : "+val[0]);  //每个name值所对应的第一个值
  System.out.println(name+" : "+Arrays.toString(val));  //每个name值所对应的每个值
}

4.请求转发:

  在服务器内部进行跳转,浏览器并没有识别。所以浏览器地址栏的值也不会改变,请求的request对象也只有一个。一次请求 一次响应

  request.getRequestDispatcher(" location... ").forward(request,response);

  **在请求转发之前, 如果response缓冲区写入了数据但是还没有打给浏览器, 在请求转发时这些数据将会被清空
      **在请求转发之前, 如果response缓冲区写入了数据并且打给了浏览器, 请求转发失败抛出异常!
      **请求转发就像方法的调用, 在转发代码之后的代码将会在转发结束后继续执行
      **不能多次转发, 但是可以多重转发

5.域对象的使用:

  一个对象具有可以被看见的范围, 利用这个对象身上的map就可以实现资源的共享, 像这样的对象就称之为域对象

  request.setAttribute( String name, Object obj ); ------修改request的 "name" 的值

  request.getAttribute( String name );-------取request对象中的name值

  request.removeAttribute(String name); ---移除

    生命周期: 一次请求开始, 到一次请求结束
            作用范围: 在整个请求链上都可以看见
            主要功能: 在转发时带数据到目的地;

----配合请求转发使用就可以实现将读取的数据存入当前的request对象中通过转发即可将修改后的request的值带到另一个servlet中----

6.请求包含:

  所谓的请求包含指的是服务器内部实现资源合并的效果
     如果浏览器请求ServletA, 在A的内部可以通过
     request.getRequestDispatcher("B的虚拟路径").include(request, response);将ServletB包含进来, 这时将由A和B共同处理该请求, B处理的结果将会并入A处理的结果, 一起响应给浏览器

  (类似于jsp页面的head、index、foot的三个部分进行整合的效果)

Request 部分功能的更多相关文章

  1. NodeJS系列~第一个小例子,实现了request.querystring功能

    返回目录 百度百科上: Node.js是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始,在Node中,Http是首要的.Node为创建http服务器作了优化,所以在网上 ...

  2. Git工作流指南:Pull Request工作流

    参考地址:http://blog.jobbole.com/76854/ Pull Requests是Bitbucket上方便开发者之间协作的功能.提供了一个用户友好的Web界面,在集成提交的变更到正式 ...

  3. [AX 2012] Woker user request

    在HR模块和System administrator模块下都能找到Woker user request这个功能,它的作用是为员工创建一个AX账号.比如我们创建一个这样的user request: 注意 ...

  4. response和request

    请求响应流程图 response response是用来向客户端响应的对象! 需要回忆一下http响应内容: l  首行:状态码 l  响应头: 1头1值,1头多值: l  响应体(正文):html ...

  5. response与request回顾学习

    一.response response是servlet.service方法的一个参数,它的类型是javax.servlet.http.HttpServletResponse,在客户端每发出一个请求时, ...

  6. 为SRS流媒体服务器添加HLS加密功能(附源码)

    为SRS流媒体服务器添加HLS加密功能(附源码) 之前测试使用过nginx的HLS加密功能,会使用到一个叫做nginx-rtmp-module的插件,但此插件很久不更新了,网上搜索到一个中国制造的叫做 ...

  7. 创建 Pull Request

    Pull Request 是开发者使用 GitHub 进行协作的利器.这个功能为用户提供了友好的页面,让提议的更改在并入官方项目之前,可以得到充分的讨论. 最简单地来说,Pull Request 是一 ...

  8. Git - Pull Request工作流

    Pull Requests是Bitbucket上方便开发者之间协作的功能.提供了一个用户友好的Web界面,在集成提交的变更到正式项目前可以对变更进行讨论. 开发者向团队成员通知功能开发已经完成,Pul ...

  9. 超全面的JavaWeb笔记day10<Response&Request&路径&编码>

    1.Response 2.Request 3.路径 4.编码 请求响应流程图 response 1.response概述 response是Servlet.service方法的一个参数,类型为java ...

随机推荐

  1. Hibernate关联映射之_一对多

    domain: package org.zln.hibernate.domain; import java.util.Set; /** * 部门Domain对象 * Created by sherry ...

  2. BZOJ4361 isn(动态规划+树状数组+容斥原理)

    首先dp出长度为i的不下降子序列个数,显然这可以树状数组做到O(n2logn). 考虑最后剩下的序列是什么,如果不管是否合法只是将序列删至只剩i个数,那么方案数显然是f[i]*(n-i)!.如果不合法 ...

  3. win8.1 host被删,host无法修改,host无法复制进去解决方案

    1.C:\Windows\System32\drivers\etc\hosts  复制到桌面 2.删除C:\Windows\System32\drivers\etc\hosts 3.右键编辑文本--& ...

  4. 【ZJ选讲·BZOJ 5073】

    小A的咒语 给出两个字符串A,B (len<=105) 现在可以把A串拆为任意段,然后取出不超过 x 段,按在A串中的前后顺序拼接起来 问是否可以拼出B串. [题解]       ①如果遇 ...

  5. Java中中英文对齐输出问题,以及Java中的格式化输出

    一 中英文对齐输出问题 问题,要求控制台输出如下: abcefg  def 森林 阿狗 其实就是要求对齐输出,各种查找java的格式化输出,然后发现只要一个简单的“\t”就可以实现. 代码如下: Sy ...

  6. PowerDesigner使用教程(转)

    PowerDesigner是一款功能非常强大的建模工具软件,足以与Rose比肩,同样是当今最著名的建模软件之一.Rose是专攻UML对象模型的建模工具,之后才向数据库建模发展,而PowerDesign ...

  7. Spring 学习笔记(三)之注解

    一.在classpath下扫描组件 •组件扫描(component scanning):  Spring 能够从 classpath 下自动扫描, 侦测和实例化具有特定注解的组件. •特定组件包括: ...

  8. [洛谷P2730] 魔板 Magic Squares

    洛谷题目链接:魔板 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 我们知道魔板的每一个方格都 ...

  9. 在Unity(C#)下实现Lazy Theta*寻路

    在上篇文章中我们介绍了Lazy Theta*.本篇中我会演示一下我实现的Lazy Theta*. 先上代码 //在一个点被expand时是否调用DebugOnExpanded事件,用于debug查看e ...

  10. Intellij IDEA创建spring MVC项目

    相信各位未来的Java工程师已经接触到了spring MVC这个框架的强大之处,看了很多的教程,都是eclipse的,在intellij IDEA这个强大的工具面前居然不能很顺畅的,今天我就带领大家用 ...