JSP内置对象之request对象【学习笔记】
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对象【学习笔记】的更多相关文章
- Python两个内置函数——locals 和globals (学习笔记)
这两个函数主要提供,基于字典的访问局部和全局变量的方式.在理解这两个函数时,首先来理解一下python中的名字空间概念.Python使用叫做名字空间的东西来记录变量的轨迹.名字空间只是一个字典,它的键 ...
- JavaWeb——JSP内置对象request,response,重定向与转发 学习总结
什么是JSP内置对象 九大内置对象 requestJSP内置对象 request对象常用方法 request练习 responseJSP内置对象 response练习 response与request ...
- JavaWeb学习----JSP内置对象详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- JSP内置对象-request
JSP内置对象即无需声明就可以直接使用的对象实例,在实际的开发过程中,比较常用的JSP对象有request,response,session,out和application等,笔者在本文章中将简单介绍 ...
- JSP内置九个对象Request请求对象
jsp内置对象是什么呢? 例如Java语言使用一个对象之前需要实例化(也就是所说的new一个对象),创建对象这个过程有点麻烦,所以在jsp中提供了一些内置对象,用来实现很多jsp应用.在使用内置对象时 ...
- JSP内置对象——out对象/request对象
在这个科技高速发展的时代,迫使我们的脚步一刻都不能停下. 在这个for循环语句当中,我们可以直接使用jsp内置对象中的out对象来给浏览器打印输出,那么这个out对象就是一个内置对象, 在这里,我们使 ...
- JavaWeb之 JSP:内置对象,EL表达式,JSP标签基础
JSP的内置对象 什么是JSP的内置对象呢? 在JSP页面进行编程的时候,如果我们要使用一些对象,如:HttpSession,ServletConfig,ServletContext这些对象,如果每次 ...
- jsp内置对象和el表达式
九个内置对象 *out jsp的输出流,用来向客户端响应 *page 当前jsp页面, 它的引用数据类型是Object,即真身中有如下代码 Object page=this; *config 它对应真 ...
- JSP运行过程 JSP脚本 静态动态包含 jsp指令 jsp内置对象jsp四大作用域 jsp动作元素 EL表达式 JSTL 设计模式 JSP开发模式 EL内置对象
Day38 JSP JSP的运行过程具体如下: (1)客户端发出请求,请求访问JSP文件. (2)JSP容器先将JSP文件转换成一个Java源文件(Java Servlet源程序),在转换过程中,如果 ...
- jsp内置对象浅谈
jsp内置对象浅谈 | 浏览:1184 | 更新:2013-12-11 16:01 JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对 ...
随机推荐
- 使用selenium编写脚本常见问题(一)
前提:我用selenium IDE录制脚本,我用java写的脚本,如果大家想看的清楚明白推荐java/Junit4/Webdriver 我用的是java/TestNG/remote control 1 ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 初入网络系列笔记(5)FTP协议
一.借鉴说明,本博文借鉴以下博文 1.锤子,FTP协议,http://www.cnblogs.com/loadrunner/archive/2008/01/09/1032264.html 2.suna ...
- Struts2中的Ognl
OGNL(Object-Graph Navigation Language)全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整 ...
- angularJS(4)
angularJS(4) 一:angulaJs的作用域scope Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带.scope 是一个 JavaScr ...
- 嵌入式Linux驱动学习之路(二十六)DM9000C网卡驱动程序
基于DM9000C的原厂代码修改dm9000c的驱动程序. 首先确认内存的基地址 iobase. 确定中断号码. 打开模块的初始化函数定义. 配置内存控制器的相应时序(结合DM9000C.C的手册). ...
- [LeetCode] Permutations II 全排列之二
Given a collection of numbers that might contain duplicates, return all possible unique permutations ...
- 【已更新】【原创】Chrome53 最新版惊现无厘头卡死 BUG!
发现问题 今天有客户向我们反馈了一个BUG:一个页面在IE.FireFox.Chrome52中能正常运行,但是在最新版的Chrome53中显示不了??? 习惯性的,我们需要客户提供页面在浏览器中的HT ...
- Spring + SpringMVC + Druid + JPA(Hibernate impl) 给你一个稳妥的后端解决方案
最近手头的工作不太繁重,自己试着倒腾了一套用开源框架组建的 JavaWeb 后端解决方案. 感觉还不错的样子,但实践和项目实战还是有很大的落差,这里只做抛砖引玉之用. 项目 git 地址:https: ...
- ASP.NET提取多层嵌套json数据的方法
本文实例讲述了ASP.NET利用第三方类库Newtonsoft.Json提取多层嵌套json数据的方法,具体例子如下. 假设需要提取的json字符串如下: {"name":&quo ...