欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JSP隐含对象 request(2)

程序员文章站 2022-07-09 12:55:53
三.request隐含对象 客户端通过http请求提交的信息会被servlet容器封装在request对象中,页面程序通过request对象可操作客户端请求参数(parameter),属性(attr...

三.request隐含对象

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

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


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


(1)客户端传递给服务器的参数最常见的是表单数据或附在url中的参数,其中url中的参数是指url“?”后面的参数,称之为查询串(query string)参数,例如https://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方式提交参数的中文乱码问题。