当前位置: 首页 > news >正文

JSP隐含对象 request(2)

三.request隐含对象

客户端通过HTTP请求提交的信息会被servlet容器封装在request对象中,jsp页面程序通过request对象可操作客户端请求参数(parameter),属性(attribute)和客户端输入流等数据;

parameter参数一般是由客户端通过HTTP POST或GET方法提交过来的参数,一般来客来自客户端或有上一个程序转发;


attribute属性主要是服务器程序产生的数据产生的参数,一般不是来自客户端;


(1)客户端传递给服务器的参数最常见的是表单数据或附在URL中的参数,其中URL中的参数是指URL“?”后面的参数,称之为查询串(query string)参数,例如http://localhost/exam.jsp?name=tomcat中的“name=tomcat”。 

(2)用request读取单值参数
   所谓单值参数是指:一个变量最多有一个值。用request对象的getParameter()方法读取这些参数。getParameter()用于读取指定变量名的参数值,
方法的定义为:public java.lang.String getParameter(java.lang.String name)

方法的形参是参数的变量名,以String形式返回变量的值。如果request对象中没有指定的变量,则返回null。 

(3) request作用范围变量

服务器端的两个JSP/Servlet程序间要交换数据时,可通过request作用范围变量来实现。request作用范围变量也叫request属性(attributes),
是类似于“name=value”的属性对,由属性名和属性值构成,属性值一般是一个Java对象,不是Java基本数据类型数据。Servlet程序A要把数据
对象传递给Servlet程序B时,程序A通过调用request.setAttribute()把数据对象写入request作用范围,并通过request转发跳转到程序B,程序A的
request对象被转发给程序B,在程序B中通过request.getAttribute()从request作用范围读取数据对象。

通过request.setAttribute()方法将一个属性值对象写入request对象中,或者说把一个属性值对象定义为request作用范围变量,实际上是把属性值对象与
request隐含对象绑定,使属性值对象本身的生命周期和request对象的生命周期直接相关,在当前request隐含对象有效的范围内,与之绑定的属性值对象也是有效的,可通过reuqest.getAttribute()方法读取这些有效的属性值对象,当request对象生命期结束时,与之绑定的request属性变量会变成垃圾对象而被回收。

request作用范围变量的变量名可以采用Java包的命名方式,例如:com.abc.mis.login.name、com.abc.mis.login.pw等,变量名尽可能唯一,并且
不要与Java/J2EE的包名/类名相同

在JSP中,除了request作用范围变量外,还有page、session和application作用范围变量,它们的基本含义都是把属性值对象与某个有生命周期的JSP隐含对象相绑定,使属性值对象有一定的生命周期,或者说使属性值对象在一定的作用范围内有效。定义作用范围变量一般是调用JSP隐含对象中的setAttribute()方法,读取作用范围变量一般是调用getAttribute()方法。 

1、setAttribute()/getAttribute()方法
request.setAttribute()用于把一个属性对象按指定的名字写入request作用范围,它的语法为:

public void setAttribute(java.lang.String name, java.lang.Object o)


第一个形参是作用范围变量名,名字要唯一,第二个形参是属性值对象。

request.getAttribute()从request作用范围读出指定名字的属性对象,它的语法为:

public java.lang.Object getAttribute(java.lang.String name) 


形参是属性值对象的变量名,方法返回的对象是Object类型,一般要进行强制类型转换,还原属性值对象的原本数据类型。

2.getRequestDispatcher()

两个Servlet程序间要利用request作用范围变量来传递数据时,要用转发跳转操作实现从第一个Servlet程序A跳转到第二个Servlet程序B,
跳转时,程序A中的request和response隐含对象会被自动转发给程序B。

request转发器(RequestDispatcher)的作用是获得目标资源的转发器,通过转发器将当前Servlet程序的request和response对象转发给目标资源,
并跳转至目标资源上运行程序,这样,目标资源就可通过request对象读取上一资源传递给它的request属性。

equest. getRequestDispatcher()的作用是返回目标资源的RequestDispatcher对象,
形参是当前Web应用目标资源的URI,可以使用相对路径或绝对路径。
RequestDispatcher中主要的方法有:

public void forward(ServletRequest request, ServletResponse response)
             throws ServletException,java.io.IOException
该方法能够把当前Servlet程序的request和response隐含对象转发给目标资源,并跳转至目标资源运行代码。形参是当前Servlet程序的request和response隐含对象。
 forward()方法在response信息提交前调用。如果在调用forward()之前已经刷新了response输出缓冲区,那么转发会引发异常。在执行跳转动作前,当前response对象输出缓冲区中的信息将被清空。 

3、removeAttribute()
此方法的作用是从request作用范围中删除指定名字的属性,它的语法为:

public void removeAttribute(String name)
形参是属性名。例如:request.removeAttribute(“name”);

4、setCharacterEncoding()
定义request对象中的parameter参数的字符编码标准。例如,parameter参数如果有中文,在读取参数前调用此方法,设置参数的编码标准为GB2312,可以解决以POST方式提交参数的中文乱码问题。

相关文章:

  • JSP实现网页计算器
  • MySQL汇总数据
  • 如何配置Tomcat的热启动
  • vncserver
  • 项目路径配置[pageContext.request.contextPath]和c标签
  • JSP隐含对象response实现文件下载的两种方式
  • JSP动态生成验证码
  • 报表性能优化方案之多种报表服务器内存修改方法
  • JSP用过滤器解决request中文乱码问题
  • Advanced R之编程风格
  • SpringMVC实现一个controller写多个方法
  • 枚举类型的抽象方法定义实现
  • 大数据笔记07:大数据之Hadoop的HDFS(特点)
  • 【数据库学习笔记】(1)JDBC驱动程序的分类
  • 【数据库学习笔记】(2)JDBC加载并注册数据库驱动并连接数据库
  • idea + plantuml 画流程图
  • js中的正则表达式入门
  • passportjs 源码分析
  • Ruby 2.x 源代码分析:扩展 概述
  • SpingCloudBus整合RabbitMQ
  • vue-router的history模式发布配置
  • 关于Flux,Vuex,Redux的思考
  • 规范化安全开发 KOA 手脚架
  • 解决iview多表头动态更改列元素发生的错误
  • 跨域
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 删除表内多余的重复数据
  • 项目实战-Api的解决方案
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​业务双活的数据切换思路设计(下)
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2)STM32单片机上位机
  • (zhuan) 一些RL的文献(及笔记)
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (轉)JSON.stringify 语法实例讲解
  • ***原理与防范
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Micro Framework初体验
  • .NET MVC 验证码
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • @Valid和@NotNull字段校验使用
  • [1525]字符统计2 (哈希)SDUT
  • [20150904]exp slow.txt
  • [3D基础]理解计算机3D图形学中的坐标系变换
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [BZOJ 4598][Sdoi2016]模式字符串
  • [bzoj1912]异象石(set)
  • [C++]C++基础知识概述
  • [Codeforces] number theory (R1600) Part.11
  • [HOW TO]怎么在iPhone程序中实现可多选可搜索按字母排序的联系人选择器