request对象是JSP中重要的对象,每个request对象封装着一次用户的请求,并且所有的请求参数都被封装在request对象中,因此request对象是获取请求参数的重要途径。

一、获取请求头与请求参数

web应用是请求/响应架构的应用,浏览器发送请求时通常总会附带一些请求头,还可能包含一些请求参数发送给服务器,服务器端负责解析请求头/请求参数的就是JSP或Servlet,而JSP和Servlet取的请求参数的途径就是request。request是httpServletRequest接口的实例,它提供了如下方法来获得请求参数:

    • String getParameter(String paramName) :获取paramName请求参数的值。
    • Map getParameterMap() :获取所有请求参数名和参数值所组成的Map对象。
    • Enumeration getParameterNames() :获取所有请求参数名所组成的Enumeration对象。
    • String[] getParameterValues(String name) : paramName请求参数的值,当该请求参数有多个值时,该方法将返回多个值所组成的数组。

httpSevletRequest提供如下方法来访问请求头:

    • String getHeader(String name): 获取指定请求头的值
    • java.util.Enumeration<String> getHeaderNames(): 获取所有请求头的名称
    • java.util.Enumeration<String> getHeaderNames(String name):获取指定请求头的多个值
    • int getIntHeader(String name):获取指定请求头的值,并将其转化为整数。

请求头通常由浏览器自动添加,因此一次请求总是包含若干请求头;请求参数通常需要开发人员控制添加,客户端发送请求参数通常分为两种情况:

1、GET方式请求:直接在浏览器地址栏输入所发送的请求;提交表单时,该表单对应的form元素没有设置method属性,或设置method属性为get,这几种请求都是GET方式的请求。GET方式请求会将请求参数的名和值转换成字符串,并附加在原URL之后,因此可以在浏览器的地址栏上看到请求参数名和值,GET请求传输的数据量较小,不能大于2KB。

2、POST方式请求:这种方式通常使用提交表单的方式来发送,且需要设置form元素的method属性为post。POST传输的数据量较大,请求参数大小通常受服务器的限制。POST方式发送的请求参数以及对应的值放在HTML HEADER中传输,用户不能在地址栏上看到请求参数的值,安全性较高。

代码示例:

  表单页面:form.jsp

 <%@ page language="java" import="java.util.*" pageEncoding="utf-8" %>
<%@ page contentType="text/html; charset=utf-8" language="java" errorPage="" %>
<!DOCtype html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>收集参数的表单页</title>
</head>
<body>
<form id="form1" method="post" action="request.jsp">
用户名:<br/>
<input type="text" name="name"><hr />
性别:<br />
男:<input type="radio" name="gender" value="男">
女:<input type="radio" name="gender" value="女"><hr />
喜欢的颜色:<br />
红:<input type="checkbox" name="color" value="红">
蓝:<input type="checkbox" name="color" value="蓝">
绿:<input type="checkbox" name="color" value="绿">
来自的国家:<br />
<select name="country">
<option value="中国">中国</option>
<option value="美国">美国</option>
<option value="俄罗斯">俄罗斯</option>
</select><hr />
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</body>
</html>

  request.jsp

 <%@ page contentType="text/html; charset=UTF-8" language="java" errorPage="" %>
<%@ page import="java.util.*" %>
<!DOCtype html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> 获取请求头/请求参数</title>
</head>
<body>
<%
//获取所有请求头的名称
Enumeration<String> headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()){
String headerName = headerNames.nextElement();
//获取每个请求、及其对应的值
out.println(headerName+"-->"+ request.getHeader(headerName) +"<br />");
}
out.println("<hr />");
request.setCharacterEncoding("utf-8");
//下面依次获取表单域的值
String name = request.getParameter("name");
String gender = request.getParameter("gender");
//如果某个请求参数有多个值,将使用该方法获取多个值
String[] color = request.getParameterValues("color");
String national = request.getParameter("country");
%>
您的名字: <%=name%> <hr />
您的性别: <%=gender%> <hr /> 您喜欢的颜色: <%for(String c :color)
{out.println(c+"");} %> <hr />
您来自的国家:<%=national%> <hr />
</body>
</html>

  使用GET方式获得请求参数

  GET请求的获取方式与POST方式一样,不过需要注意的是,页面发送请求时在地址栏增加的请求参数值都是由英文字符组成的,如果请求参数值中包含非西欧字符,需

  要将请求参数重新编码。

  获得GET请求里的中文字符:

 <%@ page language="java" import="java.util.*" pageEncoding="utf-8" %>
<%@ page contentType="text/html; charset=utf-8" language="java" errorPage="" %>
<!DOCtype html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> 获取包含非西欧字符的GET请求参数 </title>
</head>
<body>
<%
//获取请求里包含的查询字符串
String rawQueryStr = request.getQueryString();
out.println("原始查询字符串:"+ rawQueryStr+"<hr />");
//使用URLDecoder解码字符串
String queryStr = java.net.URLDecoder.decode(rawQueryStr,"utf-8");
out.println("解码后查询字符串为:"+queryStr+"<hr />");
//以&符号分解查询字符串
String[] paramPairs = queryStr.split("&");
for (String paramPair : paramPairs){
out.println("每个请求参数名、值对为:"+paramPair+"<hr />"); String[] nameValue = paramPair.split("=");
out.println(nameValue[0] +"参数的值是:"+nameValue[1]+"<hr />");
}
%>
</body>
</html>

  当然,你也可以在获取请求参数值之后对请求参数值重新编码。

    //获得原始的请求参数
String rawName = request.getParameter("name");
//将请求参数值使用ISO-8895-1字符串分解成字节数组
byte[] rawBytes = rawName.getBytes("ISO-8859-1");
//将字节数组重新解码成字符串
String name = new String(rawBytes, "utf-8")

  2、操作request范围的属性

  HttpServletRequest还包含如下两种方法,用于设置和获取request范围的属性。

  •   setAttribute(String attName,Object attValue);
  •   Object getAttribute(String attName);

  3、执行forward或include

  request还有一个功能就是执行forward和include,也就是代替JSP所提供的forward和include动作指令

  getRequestDispatcher(String path).include(ServletRequest request,ServletResponse response);

  getRequestDispatcher(String path).forward(SevletRequest request,ServletResponse response);

  注意:使用request的getRequestDispatcher(String path)方法时,该path字符串必须以斜线开头。

JSP内置对象之request对象【学习笔记】的更多相关文章

  1. Python两个内置函数——locals 和globals (学习笔记)

    这两个函数主要提供,基于字典的访问局部和全局变量的方式.在理解这两个函数时,首先来理解一下python中的名字空间概念.Python使用叫做名字空间的东西来记录变量的轨迹.名字空间只是一个字典,它的键 ...

  2. JavaWeb——JSP内置对象request,response,重定向与转发 学习总结

    什么是JSP内置对象 九大内置对象 requestJSP内置对象 request对象常用方法 request练习 responseJSP内置对象 response练习 response与request ...

  3. JavaWeb学习----JSP内置对象详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  4. JSP内置对象-request

    JSP内置对象即无需声明就可以直接使用的对象实例,在实际的开发过程中,比较常用的JSP对象有request,response,session,out和application等,笔者在本文章中将简单介绍 ...

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

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

  6. JSP内置对象——out对象/request对象

    在这个科技高速发展的时代,迫使我们的脚步一刻都不能停下. 在这个for循环语句当中,我们可以直接使用jsp内置对象中的out对象来给浏览器打印输出,那么这个out对象就是一个内置对象, 在这里,我们使 ...

  7. JavaWeb之 JSP:内置对象,EL表达式,JSP标签基础

    JSP的内置对象 什么是JSP的内置对象呢? 在JSP页面进行编程的时候,如果我们要使用一些对象,如:HttpSession,ServletConfig,ServletContext这些对象,如果每次 ...

  8. jsp内置对象和el表达式

    九个内置对象 *out jsp的输出流,用来向客户端响应 *page 当前jsp页面, 它的引用数据类型是Object,即真身中有如下代码 Object page=this; *config 它对应真 ...

  9. JSP运行过程 JSP脚本 静态动态包含 jsp指令 jsp内置对象jsp四大作用域 jsp动作元素 EL表达式 JSTL 设计模式 JSP开发模式 EL内置对象

    Day38 JSP JSP的运行过程具体如下: (1)客户端发出请求,请求访问JSP文件. (2)JSP容器先将JSP文件转换成一个Java源文件(Java Servlet源程序),在转换过程中,如果 ...

  10. jsp内置对象浅谈

    jsp内置对象浅谈 | 浏览:1184 | 更新:2013-12-11 16:01 JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对 ...

随机推荐

  1. 如何快速清除ZBrush画布中多余图像

    ZBrush是一款数字雕刻与绘画软件,它以强大的功能和直观的工作流程彻底改变了整个三维行业.它的简洁化.智能化和人性化的设计无不让众多用户所折服.刚接触它的用户可能会因为找不到相关命令或不熟悉而觉得它 ...

  2. 前端自动化测试 —— TDD环境配置(React+TypeScript)

    欢迎讨论与指导:) 前言 TDD -- Test-Drive Development是测试驱动开发的意思,是敏捷开发中的一项核心实践和技术,也是一种测试方法论.TDD的原理是在开发功能代码之前,先编写 ...

  3. ios应用程序结构

    MVC开发模式 什么是mvc,相信有一定开发经验的程序员都应该知道. M —— 模型,为程序提供数据 V —— 视图,为用户提供界面 C —— 控制器,用来控制程序视图,即上面的V 在ios程序中,一 ...

  4. MySQL性能优化

    当今数据库的操作越来越成为整个应用的性能瓶颈,特别是Web应用更加明显.当我们设计数据库和对数据库操作时,都要考虑到性能. 1.优化查询语句,方便查询缓存 大多数MySQL服务器都开启了查询缓存,这是 ...

  5. Git原理及常用操作命令总结

    git原理介绍及操作 git 原理——

  6. How to Disable Strict SQL Mode in MySQL 5.7

    If your app was written for older versions of MySQL and is not compatible with strict SQL mode in My ...

  7. 【原】mysql5.6 split函数_字符串的分割

    DROP FUNCTION IF EXISTS `getSplitName`$$ )) RETURNS text BEGIN /* 对逗号进行分离的字符串,分割出'登陆名_用户名/部门名'中的_后部门 ...

  8. 自定义UIBarButtonItem

    如果是通过UIButton自定义UIBarButtonItem,那么通过如下这个方式设置title是无效的.必须要直接给button设置title. self.navigationItem.right ...

  9. 两个坑-Linux下Network-Manager有线未托管-DNS resolv.conf文件开机被清空

    Linux里面有两套管理网络连接的方案: 1./etc/network/interfaces(/etc/init.d/networking) 2.Network-Manager 两套方案是冲突的,不能 ...

  10. 【bzoj1941】 Sdoi2010—Hide and Seek

    http://www.lydsy.com/JudgeOnline/problem.php?id=1941 (题目链接) 题意 给出n个二维平面上的点,求一点使到最远点的距离-最近点的距离最小. Sol ...