Servlet的学习之Request请求对象(1)
在本篇中开始对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)的更多相关文章
- Servlet的学习之Request请求对象(3)
本篇接上一篇,将Servlet中的HttpServletRequest对象获取RequestDispatcher对象后能进行的[转发]forward功能和[包含]include功能介绍完. 首先来看R ...
- Servlet的学习之Request请求对象(2)
在上一篇<Servlet的学习(十)>中介绍了HttpServletRequest请求对象的一些常用方法,而从这篇起开始介绍和学习HttpServletRequest的常用功能. 使用Ht ...
- Servlet的学习之Response响应对象(3)
本篇来说明响应对象HttpServletResponse对象的最后一点内容. 首先来看响应对象控制浏览器定时刷新,在我的web应用[myservlet]中创建Servlet,在该Servlet中设置响 ...
- Servlet的学习之Response响应对象(2)
本篇接上一篇<Servlet的学习之Response响应对象(1)>,继续从HttpServletResponse响应对象来介绍其方法和功能. 使用setHeader方法结合HTTP协议的 ...
- JSP内置九个对象Request请求对象
jsp内置对象是什么呢? 例如Java语言使用一个对象之前需要实例化(也就是所说的new一个对象),创建对象这个过程有点麻烦,所以在jsp中提供了一些内置对象,用来实现很多jsp应用.在使用内置对象时 ...
- opa gatekeeper笔记:AdmissionReview input.request请求对象结构
官方:https://v1-17.docs.kubernetes.io/zh/docs/reference/access-authn-authz/extensible-admission-contro ...
- Servlet的学习之Response响应对象(1)
在之前学习了Servlet中的主体结构,包括Servlet的生命周期方法,和非生命周期方法能获取的一些非常重要的对象如ServletConfig.ServletContext对象等,而从这篇开始我们将 ...
- request请求对象实例
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DemoRequest.as ...
- FastAPI(54)- 详解 Request 请求对象
背景 前面讲了可以自定义 Response,那么这里就讲下请求对象 Request 可以通过 Request 来获取一些数据 获取请求基础信息 @app.get("/base") ...
随机推荐
- oracle常见问题
1.无效的月份,一个可能是字符集的问题, alter session set nls_language=american alter session set nls_language='SIMPLIF ...
- C# 网络编程 Part.1
本人也是新手,对网络编程一窍不通,所以从今天开始我将学习网络编程的基础知识,在此一一贴出来,编辑成一个系列! 1.为自己复习巩固用 2.可以找到同时在学习网络编程的同学,一起讨论交流,促进学习效率及其 ...
- ZOJ 3490 String Successor 字符串处理
一道模拟题,来模拟进位 暴力的从右往左扫描,按规则求后继就好了.除了Sample已给出的,还有一些需要注意的地方: 9的后继是10,而不是00: (z)的后继是(aa),而不是a(a): 输入虽然最长 ...
- 在线QQ客服
代码一: <a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=451314789&si ...
- 设计模式(六)桥连模式Bridge(结构型)
设计模式(六)桥连模式Bridge(结构型) 1. 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够 ...
- 保护DNS服务器3大方法
保护DNS服务器3大方法 DNS全称DomainNameSystem域名解析系统,通俗地说,DNS就是帮助用户在Internet上寻找名称与IP对应的解析服务.为了更方便使用网络资源,DN ...
- HDU 2040:亲和数
亲和数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- windows phone7开发环境配置错误
遇到下面这样一个问题:在配置windows phoe7开发环境的时候出现如下错误,以及相应的解决方案,希望对大家有所帮助. 装完环境后出现下面错误: [caption id="attachm ...
- Codeforces 468D Tree
题目 给出一棵带边权的树,求一个排列\(p\),使得\(\sum_{i=1}^{n}{dis(i, p_i)}\)的值最大,其中\(dis(v, u)\)表示\(v\)到\(u\)的距离. 算法 这题 ...
- java list三种遍历方法性能比较
从c/c++语言转向java开发,学习java语言list遍历的三种方法,顺便测试各种遍历方法的性能,测试方法为在ArrayList中插入1千万条记录,然后遍历ArrayList,发现了一个奇怪的现象 ...