1、request对象
request对象是jsp中重要的对象,每个request对象封装着一次用户请求,并且所有的请求参数都被封装在request对象中,因此,request对象是获取请求参数的重要途径。
除此之外,request课代表本次请求的范围,所以还可用于操作request范围的属性。
1、获取请求头/请求参数
web应用是请求/响应架构的应用,浏览器发送请求时通常会附带一些请求头,还可能包含一些请求参数发送给服务器,服务器端负责解析请求头/请求参数的就是jsp或servlet,而jsp和servlet获取请求参数的途径就是request。request是httpservletrequest接口的实例,它提供了如下的方法获取请求参数。
①string getparameter(string paramname):获取paramname请求参数的值。
②map getparameter():获取所有请求参数名和参数值所组成的map对象。
③enumeration getparameternames():获取所有请求参数名所组成的enumeration对象。
④string 【】 getparametervalues(string name):paramname请求参数的值,当该请求参数有多个值时,该方法将返回多个值所组成的数组。
httpservletrequest提供了如下方法来访问请求头
①string getheader(string name):根据指定请求头的值。
②java.util.enumeration<string> getheadernames():获取所有请求头的名称
③java.util.enumeration<string> getheaders(string name):获取指定请求头的多个值
④int getintheader(string name):获取指定请求头的值,并将该值转为整数值
请求参数和请求头都是由用户发送到服务器的数据,区别在于请求头通常由浏览器自动添加,因此一次请求中总是包含若干请求头;而请求参数需要进行手工添加。客户端发送请求参数通常分为两种情况。
①get请求:get方式的请求会将请求参数的名和值转换成字符串,并附加在原url之后,因此可以在地址栏看到请求参数的名和值。而且get请求传送的数据量较小,已办不能大于2kb。
②post请求:post方式通常使用提交表单的方式来发送。post方式传输的数据量较大,通常认为post请求参数的大小不受限制,但取决于服务器的限制,post请求传输的数据量比get大,而且请求参数及对应的值放在html deader中传输,用户不能在地址栏中看到请求参数值。
并不是每个表单域都会生成请求参数的,而是有name属性的表单域才会生成请求参数。请求参数和表单域的关系如下:
①每个有name属性的表单域对应一个请求参数
②若果有多个表单域有相同的name属性,则多个表单域只生成一个请求参数,只是该参数有多个值
③表单域的name属性指定请求参数名,value指定请求参数值。
④如果某个表单域设置了disabled = “disabled”属性,则该表单不在生成请求参数。
2、操作request范围的属性
httpservletrequest包含2个方法,用于设置和获取request范围的属性。
setattribute(string attname, object attvalue):将attvalue设置成request范围的属性。
object getattribute(string attname):获取request范围的属性,
当forward用户请求时,请求的参数和请求的属性都不会丢失。
3、执行forward或include
request还有一个功能就是执行forward和include,也就是代替jsp所提供的forward和include动作指令。
httpservletrequest类提供了一个getrequestdispatcher(string path)方法,其中path就是希望forward或include的目标路径,该方法返回requestdispatcher,该对象提供了如下两个方法:
①forward(servletrequest request ,servletresponse response):执行forward
②include(servletrequest request ,servletresponse response):执行include
使用request的getrequestdispatcher(string path)方法时,该path字符串必须以斜线开头。
2、response对象
response代表服务器对客户端的响应。
out是 jspwriter的实例,jspwriter是writer的子类,writer是字符流,无法输出非字符内容,例如在jsp动态生成一副位图、或者一个pdf文档,则需要使用response作为响应输出。
1、response响应生成非字符响应
使用这种方式可以实现图形验证功能,还可以直接生成pdf文件、excel文件等。
2、重定向
重定向会丢失所有的请求参数和request范围的属性,因为重定向会生成第二次请求。
httpservletresponse提供了一个sendredirect(string path)方法,该方法用于重定向到path资源,即重新向path资源发送请求。
3、增加cookie
cookie通常用于网站记录客户的某些信息。cookie与session的不同在于:session会随浏览器的关闭而失效,但cookie会一直存放在客户端的机器上,除非超出cookie的生命期限。
增加cookie使用response内置对象完成的,response对象提供的方法:
void addcookie(cookie cookie):增加cookie
增加cookie按如下进行:
①创建cookie实例,cookie的构造器为cookie(string name,string value)
②设置cookie的生命期限,即cookie在多长时间内有效
③向客户端写cookie
3、session对象
session对象代表一次用户回话,一次会话为:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开为止,这个过程就是一次会话。
session通常用于跟踪用户的回话信息。
session对象时httpsession的实例,httpsession有如下的方法:
①setattribute(string attname,object attvalue):设置session范围内的attname属性的值为attvalue。
②getattribute(string attname):返回session范围内attname属性的值。