一、HttpServletRequest介绍

  HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。

二、Request常用方法

2.1、获得客户机信息

  getRequestURL方法返回客户端发出请求时的完整URL。
  getRequestURI方法返回请求行中的资源名部分。
  getQueryString 方法返回请求行中的参数部分。
  getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。
  getRemoteAddr方法返回发出请求的客户机的IP地址。
  getRemoteHost方法返回发出请求的客户机的完整主机名。
  getRemotePort方法返回客户机所使用的网络端口号。
  getLocalAddr方法返回WEB服务器的IP地址。
  getLocalName方法返回WEB服务器的主机名。

范例:通过request对象获取客户端请求信息

package com.request.study;import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*** @author* https://www.cnblogs.com/xdp-gacl/p/3798347.html* 通过request对象获取客户端请求信息*/
public class RequestDemo01 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {/*** 1.获得客户机信息*/String requestUrl = request.getRequestURL().toString();//得到请求的URL地址String requestUri = request.getRequestURI();//得到请求的资源String queryString = request.getQueryString();//得到请求的URL地址中附带的参数String remoteAddr = request.getRemoteAddr();//得到来访者的IP地址String remoteHost = request.getRemoteHost();int remotePort = request.getRemotePort();String remoteUser = request.getRemoteUser();String method = request.getMethod();//得到请求URL地址时使用的方法String pathInfo = request.getPathInfo();String localAddr = request.getLocalAddr();//获取WEB服务器的IP地址String localName = request.getLocalName();//获取WEB服务器的主机名response.setCharacterEncoding("UTF-8");//设置将字符以"UTF-8"编码输出到客户端浏览器//通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码response.setHeader("content-type", "text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.write("获取到的客户机信息如下:");out.write("<hr/>");out.write("请求的URL地址:"+requestUrl);out.write("<br/>");out.write("请求的资源:"+requestUri);out.write("<br/>");out.write("请求的URL地址中附带的参数:"+queryString);out.write("<br/>");out.write("来访者的IP地址:"+remoteAddr);out.write("<br/>");out.write("来访者的主机名:"+remoteHost);out.write("<br/>");out.write("使用的端口号:"+remotePort);out.write("<br/>");out.write("remoteUser:"+remoteUser);out.write("<br/>");out.write("请求使用的方法:"+method);out.write("<br/>");out.write("pathInfo:"+pathInfo);out.write("<br/>");out.write("localAddr:"+localAddr);out.write("<br/>");out.write("localName:"+localName);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
  <servlet><servlet-name>RequestDemo01</servlet-name><servlet-class>com.request.study.RequestDemo01</servlet-class></servlet><servlet-mapping><servlet-name>RequestDemo01</servlet-name><url-pattern>/servlet/RequestDemo01</url-pattern></servlet-mapping>

2.2、获得客户机请求头

  getHeader(string name)方法:String
  getHeaders(String name)方法:Enumeration
  getHeaderNames()方法

范例:通过request对象获取客户端请求头信息

package com.request.study;import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*** @author gacl* 获取客户端请求头信息* 客户端请求头:**/
public class RequestDemo02 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setCharacterEncoding("UTF-8");//设置将字符以"UTF-8"编码输出到客户端浏览器//通过设置响应头控制浏览器以UTF-8的编码显示数据response.setHeader("content-type", "text/html;charset=UTF-8");PrintWriter out = response.getWriter();Enumeration<String> reqHeadInfos = request.getHeaderNames();//获取所有的请求头out.write("获取到的客户端所有的请求头信息如下:");out.write("<hr/>");while (reqHeadInfos.hasMoreElements()) {String headName = (String) reqHeadInfos.nextElement();String headValue = request.getHeader(headName);//根据请求头的名字获取对应的请求头的值out.write(headName+":"+headValue);out.write("<br/>");}out.write("<br/>");out.write("获取到的客户端Accept-Encoding请求头的值:");out.write("<hr/>");String value = request.getHeader("Accept-Encoding");//获取Accept-Encoding请求头对应的值out.write(value);Enumeration<String> e = request.getHeaders("Accept-Encoding");while (e.hasMoreElements()) {String string = (String) e.nextElement();System.out.println(string);}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

2.3、获得客户机请求参数(客户端提交的数据)

  • getParameter(String)方法(常用)
  • getParameterValues(String name)方法(常用)
  • getParameterNames()方法(不常用)
  • getParameterMap()方法(编写框架时常用)

比如现在有如下的form表单

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>Html的Form表单元素</title>
</head>
<fieldset style="width:500px;"><legend>Html的Form表单元素</legend><!--form表单的action属性规定当提交表单时,向何处发送表单数据,method属性指明表单的提交方式,分为get和post,默认为get--><form action="${pageContext.request.contextPath}/servlet/RequestDemo03" method="post"><!--输入文本框,SIZE表示显示长度,maxlength表示最多输入长度-->编  号(文本框):<input type="text" name="userid" value="NO." size="2" maxlength="2"><br><!--输入文本框,通过value指定其显示的默认值-->用户名(文本框):<input type="text" name="username" value="请输入用户名"><br><!--密码框,其中所有输入的内容都以密文的形式显示-->密  码(密码框):<!-- 表示的是一个空格--><input type="password" name="userpass" value="请输入密码"><br><!--单选按钮,通过checked指定默认选中,名称必须一样,其中value为真正需要的内容-->性  别(单选框):<input type="radio" name="sex" value="男" checked>男<input type="radio" name="sex" value="女">女<br><!--下拉列表框,通过<option>元素指定下拉的选项-->部  门(下拉框):<select name="dept"><option value="技术部">技术部</option><option value="销售部" SELECTED>销售部</option><option value="财务部">财务部</option></select><br><!--复选框,可以同时选择多个选项,名称必须一样,其中value为真正需要的内容-->兴  趣(复选框):<input type="checkbox" name="inst" value="唱歌">唱歌<input type="checkbox" name="inst" value="游泳">游泳<input type="checkbox" name="inst" value="跳舞">跳舞<input type="checkbox" name="inst" value="编程" checked>编程<input type="checkbox" name="inst" value="上网">上网<br><!--大文本输入框,宽度为34列,高度为5行-->说  明(文本域):<textarea name="note" cols="34" rows="5"></textarea><br><!--隐藏域,在页面上无法看到,专门用来传递参数或者保存参数--><input type="hidden" name="hiddenField" value="hiddenvalue"/><!--提交表单按钮,当点击提交后,所有填写的表单内容都会被传输到服务器端--><input type="submit" value="提交(提交按钮)"><!--重置表单按钮,当点击重置后,所有表单恢复原始显示内容--><input type="reset" value="重置(重置按钮)">
</form>
<!--表单结束-->
</fieldset>
</body>
<!--完结标记-->
</html>
<!--完结标记-->

在服务器端使用getParameter方法和getParameterValues方法接收表单参数,代码如下:

package com.request.study;import java.io.IOException;
import java.text.MessageFormat;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*** @author gacl* 获取客户端通过Form表单提交上来的参数*/
public class RequestDemo03 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//客户端是以UTF-8编码提交表单数据的,所以需要设置服务器端以UTF-8的编码进行接收,否则对于中文数据就会产生乱码request.setCharacterEncoding("UTF-8");/*** 编  号(文本框):<input type="text" name="userid" value="NO." size="2" maxlength="2">*/String userid = request.getParameter("userid");//获取填写的编号,userid是文本框的名字,<input type="text" name="userid">/*** 用户名(文本框):<input type="text" name="username" value="请输入用户名">*/String username = request.getParameter("username");//获取填写的用户名/*** 密  码(密码框):<input type="password" name="userpass" value="请输入密码">*/String userpass = request.getParameter("userpass");//获取填写的密码String sex = request.getParameter("sex");//获取选中的性别String dept = request.getParameter("dept");//获取选中的部门//获取选中的兴趣,因为可以选中多个值,所以获取到的值是一个字符串数组,因此需要使用getParameterValues方法来获取String[] insts = request.getParameterValues("inst");String note = request.getParameter("note");//获取填写的说明信息String hiddenField = request.getParameter("hiddenField");//获取隐藏域的内容String instStr="";/*** 获取数组数据的技巧,可以避免insts数组为null时引发的空指针异常错误!*/for (int i = 0; insts!=null && i < insts.length; i++) {if (i == insts.length-1) {instStr+=insts[i];}else {instStr+=insts[i]+",";}}String htmlStr = "<table>" +"<tr><td>填写的编号:</td><td>{0}</td></tr>" +"<tr><td>填写的用户名:</td><td>{1}</td></tr>" +"<tr><td>填写的密码:</td><td>{2}</td></tr>" +"<tr><td>选中的性别:</td><td>{3}</td></tr>" +"<tr><td>选中的部门:</td><td>{4}</td></tr>" +"<tr><td>选中的兴趣:</td><td>{5}</td></tr>" +"<tr><td>填写的说明:</td><td>{6}</td></tr>" +"<tr><td>隐藏域的内容:</td><td>{7}</td></tr>" +"</table>";htmlStr = MessageFormat.format(htmlStr, userid,username,userpass,sex,dept,instStr,note,hiddenField);response.setCharacterEncoding("UTF-8");//设置服务器端以UTF-8编码输出数据到客户端response.setContentType("text/html;charset=UTF-8");//设置客户端浏览器以UTF-8编码解析数据response.getWriter().write(htmlStr);//输出htmlStr里面的内容到客户端浏览器显示}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}
}

通过request对象获取客户端请求信息相关推荐

  1. JavaWeb中如何通过Request对象获取客户端IP地址

    提供一个获取ip地址的工具类 package com.leo.util; import org.apache.logging.log4j.LogManager; import org.apache.l ...

  2. Asp.net Request方法获取客户端的信息

    Response.Write("客户端计算机名:" + Request.UserHostName + "<BR />");   Response.W ...

  3. nginx获取客户端请求的真实IP

    客户端通过nginx代理访问后端jetty服务器时,后端服务器收到的请求信息中只有nginx代理的IP信息,无法看到client的真实IP, 所以nginx需要获取客户端请求头的真实IP地址进行传递, ...

  4. php如何获取客户端请求ip地址的方法

    php如何获取客户端请求ip地址的方法 获取客户端ip地址的函数 获取客户端ip地址的函数 function getip(){$ip = false;if (!empty($_SERVER[" ...

  5. Flask框架(flask中的request对象,获取请求参数,保存上传的文件)

    1.request中包含了前端发送过来的所有数据 ,请求的 request 对象中保存了一次HTTP请求的一切信息. 通过request.from可以直接发送提取请求体中的表单格式数据,是一个类字典的 ...

  6. 【Servlet】request对象获取请求头数据和用户数据

    request对象学习 /*** request对象学习:* 作用:request对象中封存了当前请求的所有请求信息* 使用:* 获取请求头数据* req.getMethod();//获取请求方式* ...

  7. python 客户端 如何获取手机_Python学习---Django的request扩展[获取用户设备信息]

    关于Django的request扩展[获取用户设备信息] settings.py INSTALLED_APPS = [ ... 'app01', # 注册app ] STATICFILES_DIRS ...

  8. 如何通过request对象获取用户IP地址

    获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了. ...

  9. Request对象获取数据

    1. Request对象 Request(.NET中的内置对象)---从客户端接收消息 获取前端的数据;比如form表单中的内容 ,cookis,表头信息,浏览器种类 2. 集合(对数据的封装) 对象 ...

最新文章

  1. 恢复Win10系统默认内置应用
  2. java 线程 状态 图_Java线程中的生命周期和状态控制图文详解
  3. SAP Fiori Elements - smart filter bar study - filter display logic
  4. python3性能还低吗_Python3 vs. Python2 大作战,谁将是性能之王?
  5. 编译rocksdb源码导致的部署失败
  6. 年薪 50w+ 的程序员,是这样写代码的?
  7. 【报告分享】2020年重点行业薪酬趋势指南.pdf(附下载链接)
  8. [读码时间] 自定义右键菜单
  9. java web 开发需要用到的技术
  10. 将Python文件打包成so文件
  11. 有什么好用的windows PDF阅读器?答案在这里面
  12. 中小型园区网典型配置
  13. 中国万网CEO张向东解读被阿里收购幕后
  14. 【Winform-右下角弹窗】实现右下角弹窗,提示信息
  15. 联想m5服务器管理口远程重启,服务器远程管理的两个技巧|R740|SR650|SR550|2288hv5|5270m5|联想存储|联想服务器|戴尔服务器|惠...
  16. NT3H2111_2211芯片简介
  17. 幼儿园小朋友可以教创业者的事
  18. 柳絮纷飞的日子——CSS笔记之四
  19. sklearn 数据加载工具(1)
  20. 前嗅ForeSpider教程:验证码设置

热门文章

  1. C# Owin快速搭建网站(免IIS),一个.exe文件即是一个服务器
  2. opencv中图像处理油画特效
  3. 编写一段程序,为一个文本文件的每一行前面添加行号,并以一个新的文件保存添加 了行号的文本
  4. vm下载与安装ubuntu系统
  5. 人群标签、手淘流量之间的关系,如何提高手淘流量?
  6. java中数学公式要引用什么包_五、java数学函数
  7. rkhunter(Rootkit猎手)安装使用
  8. jstack命令应用
  9. html5果树,农村院子里,常栽5种果树,既能观赏,又能吃水果
  10. 毕业论文开题报告---范文---基于Android的学生考勤管理系统的设计与实现