JSP隐含对象 request(2)
程序员文章站
2022-04-06 12:41:08
三.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方式提交参数的中文乱码问题。
上一篇: Toolkit tool 获取屏幕、显示在屏幕中心
下一篇: jsp生成word文档格式数据代码