在本篇中开始对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. Altera FPGA中的pin简介

    第一步要看的肯定是pin planner ,这个是黑金四代EP4CE15F17C8的视图 先就是发现他们pin有不同的颜色区域,分别对应不同的bank,应该是有的设计里面要求pin在同一个bank吧( ...

  2. 如何用vs查看结构体布局

    今天遇到一个问题: 假设在每个系统的structA 结构不同,我们在windbg看了以后直接拿来用,自己定义成结构体,如何来验证这个结构体内存布局是否和windbg一致. 当然笨办法是自己一个个成员数 ...

  3. redis(四)redis与Mybatis的无缝整合让MyBatis透明的管理缓存

    redis的安装 http://liuyieyer.iteye.com/blog/2078093 redis的主从高可用  http://liuyieyer.iteye.com/blog/207809 ...

  4. 雅虎UED--无障碍网页设计

    转自:http://www.sharetk.com/html/ued/Interactive-Design/1394.html 随着web使用量的增加和人们网络意识的增强,一些特殊用户开始被我们所关注 ...

  5. Winform ErrorProvider控件使用

    要实现的功能:判断第一个文本框中输入的是不是字符 “a”. 最终效果: *当输入的不是a,控件旁会显示错误图标.当输入的是a,则错误图标会消失. 首先添加ErrorProvider控件. 代码: pr ...

  6. 输入输出函数 I/O函数之perror()

    perror()函数的函数原型 void perror(char const *message); 它会将message信息输出出来,后面再加上错误原因字符串. 下面是来自百度百科的实例: #incl ...

  7. js open() 与showModalDialog()方法

    此方法可通用,项目开发中经常要用到: //w:宽,h:高,url:地址,tag:标记 function showWin(w, h, url, tag) { var t = (screen.height ...

  8. WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇)

    原文:WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]在.NE ...

  9. 用 Eclipse 下载 Git 仓库中代码

    1. 安装 Git 插件 可以按照 通过Eclipse从subversion站点下载源码 中的方法安装,也可以在 Eclipse Marketplace 中搜索 EGit 进行安装(Help --&g ...

  10. perl中 wx返回的json需要encode_utf8($d);

    $count is 9 now not support message 51 Wide character in print at /root/scanwx/lib/synccheck.pm line ...