在本篇中开始对Servlet中的HttpServletRequest请求对象进行学习,请求对象同响应对象一样,我们可以根据该对象中的方法获取例如请求行,请求头和请求实体数据的方法。

  在本篇中先对HttpServletRequest对象中的常用方法进行介绍和学习:

  通过getMethod方法获得的是客户端访问该web应用的Http请求方式。

代码和结果如下:

     String requestMethod = request.getMethod();
System.out.println(requestMethod);

  

  想获取客户端发来的HTTP请求头中的内容可以使用如下方法:

getDateHeader()

getHeader(String)

getHeaderNames()

getHeaders(String)

getIntHeader(String);

这些方法在各个特定的情况下能有不同的用途,体现出获取客户端请求头方式的多样性。

  如通过getHeader(String)可以获取指定请求头的数据内容:

     String connectionState = request.getHeader("Connection");
System.out.println(connectionState);

而通过getHeaderNames()可以获取发送的所有请求头,例:

     Enumeration e = request.getHeaderNames();
while(e.hasMoreElements()) {
   String headerName = (String) e.nextElement();
   String headerValue = request.getHeader(headerName);
   System.out.println(headerName+":"+headerValue);
}

  

而通过getHeaders(String)方法获取的是某个同名头的内容,适用于当某个请求头有多个内容时使用。

介绍完获取请求行和请求头,下面介绍获取请求数据中内容的方法:

getPatameter(String)

getParameterNames()

getParameterValues(String)

getParameterMap()

和getInputStream()

  使用getPatameter(String)方式可以获取请求数据中指定的数据值

代码如下:

     String value = request.getParameter("username");
System.out.println(value);

通常可以在浏览器地址URL后直接写入参数数据来模拟GET方式:

  

最终在控制台得到:

  

  通过getParameterNames()可以获取多个参数:

     Enumeration e = request.getParameterNames();
while(e.hasMoreElements()) {
String paramName = (String)e.nextElement();
String paramValue = request.getParameter(paramName);
System.out.println(paramName+":"+paramValue);
}

  

  

  使用getParameterValues(String)有助于获取当请求数据参数名有相同时的情况:

比如下面这种情况:

  

代码:

     String[] values = request.getParameterValues("username");
for(int i=0;i<values.length;i++) {
System.out.println(values[i]);
}

在控制台观察:

  

(注意:像getPatameter(String)、getParameterValues(String)等等这样的方法,都要小心空指针异常,可能的原因在于并没有这样的参数,还有一种就是在URL后没有任何参数传入,所以要特别注意,应该加入健壮性判断。这也是编程过程中会碰到传入参数都应该注意的问题。)

  使用getParameterMap()可以获取以请求数据中参数和参数值作为的键值对的Map集合。这样我们就能同时获取键值对。假设有如下情况:

  

代码为:

1   Map<String,String[]> map = request.getParameterMap();
2   for(Map.Entry<String, String[]> entry :map.entrySet()) {
String paramName = entry.getKey();
for(int i=0;i<entry.getValue().length;i++){
String paramValue = entry.getValue()[i];
System.out.println(paramName+":"+paramValue);
}
}

如果请求数据参数为:

  

那么在控制台上看到的则是:

  

  以上说明了常用的获取数据的方式,还有一种属于request响应对象的getInutStream方法,而这个方法一般只用于大容量的数据获取,比如文件上传,将在之后的篇章中介绍。

下面介绍其他常用方法

  通过getRequestURI方法和getRequestURL可以获取http请求服务器资源的URI和URL,关于URI和URL的区别可以通过获取后的字符串来查看:

代码:

     String fileURI = request.getRequestURI();
System.out.println("URI: "+fileURI); StringBuffer fileURL = request.getRequestURL();
System.out.println("URL: "+fileURL.toString());

访问该Servlet,得到:

  

可以看出URI只包括在服务器中的web应用名和资源对外访问路径(虚拟目录)。

 

  通过getQueryString()方法可以获取URL上由GET方式带来的参数:

若代码为:

     System.out.println(request.getQueryString());

而我在访问这个Servlet的URL上添加:“?username=fjdingsd&password=123”:

  

那么当访问这个Servlet之后,在MyEclipse的控制台将看到:

  

  通过getRemoteAddr方法可以获取访问该web应用的客户端IP地址。

代码:

 System.out.println(request.getRemoteAddr());

  而通过getRemoteHost方法获取的是访问该web应用的客户端主机名,如果没有在DNS服务器上注册的则是获取IP地址。这里说的主机名是指在DNS上注册的,比如www.baidu.com,那么通过该方法如果从该主机上来访问,则获取到的是:baidu.com。

Servlet的学习之Request请求对象(1)的更多相关文章

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

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

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

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

  3. Servlet的学习之Response响应对象(3)

    本篇来说明响应对象HttpServletResponse对象的最后一点内容. 首先来看响应对象控制浏览器定时刷新,在我的web应用[myservlet]中创建Servlet,在该Servlet中设置响 ...

  4. Servlet的学习之Response响应对象(2)

    本篇接上一篇<Servlet的学习之Response响应对象(1)>,继续从HttpServletResponse响应对象来介绍其方法和功能. 使用setHeader方法结合HTTP协议的 ...

  5. JSP内置九个对象Request请求对象

    jsp内置对象是什么呢? 例如Java语言使用一个对象之前需要实例化(也就是所说的new一个对象),创建对象这个过程有点麻烦,所以在jsp中提供了一些内置对象,用来实现很多jsp应用.在使用内置对象时 ...

  6. opa gatekeeper笔记:AdmissionReview input.request请求对象结构

    官方:https://v1-17.docs.kubernetes.io/zh/docs/reference/access-authn-authz/extensible-admission-contro ...

  7. Servlet的学习之Response响应对象(1)

    在之前学习了Servlet中的主体结构,包括Servlet的生命周期方法,和非生命周期方法能获取的一些非常重要的对象如ServletConfig.ServletContext对象等,而从这篇开始我们将 ...

  8. request请求对象实例

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DemoRequest.as ...

  9. FastAPI(54)- 详解 Request 请求对象

    背景 前面讲了可以自定义 Response,那么这里就讲下请求对象 Request 可以通过 Request 来获取一些数据 获取请求基础信息 @app.get("/base") ...

随机推荐

  1. oracle常见问题

    1.无效的月份,一个可能是字符集的问题, alter session set nls_language=american alter session set nls_language='SIMPLIF ...

  2. C# 网络编程 Part.1

    本人也是新手,对网络编程一窍不通,所以从今天开始我将学习网络编程的基础知识,在此一一贴出来,编辑成一个系列! 1.为自己复习巩固用 2.可以找到同时在学习网络编程的同学,一起讨论交流,促进学习效率及其 ...

  3. ZOJ 3490 String Successor 字符串处理

    一道模拟题,来模拟进位 暴力的从右往左扫描,按规则求后继就好了.除了Sample已给出的,还有一些需要注意的地方: 9的后继是10,而不是00: (z)的后继是(aa),而不是a(a): 输入虽然最长 ...

  4. 在线QQ客服

    代码一: <a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=451314789&si ...

  5. 设计模式(六)桥连模式Bridge(结构型)

      设计模式(六)桥连模式Bridge(结构型) 1. 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够 ...

  6. 保护DNS服务器3大方法

    保护DNS服务器3大方法       DNS全称DomainNameSystem域名解析系统,通俗地说,DNS就是帮助用户在Internet上寻找名称与IP对应的解析服务.为了更方便使用网络资源,DN ...

  7. HDU 2040:亲和数

    亲和数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  8. windows phone7开发环境配置错误

    遇到下面这样一个问题:在配置windows phoe7开发环境的时候出现如下错误,以及相应的解决方案,希望对大家有所帮助. 装完环境后出现下面错误: [caption id="attachm ...

  9. Codeforces 468D Tree

    题目 给出一棵带边权的树,求一个排列\(p\),使得\(\sum_{i=1}^{n}{dis(i, p_i)}\)的值最大,其中\(dis(v, u)\)表示\(v\)到\(u\)的距离. 算法 这题 ...

  10. java list三种遍历方法性能比较

    从c/c++语言转向java开发,学习java语言list遍历的三种方法,顺便测试各种遍历方法的性能,测试方法为在ArrayList中插入1千万条记录,然后遍历ArrayList,发现了一个奇怪的现象 ...