jsp中内置对象详解

在jsp技术中,有些变量是需要声明之后才能应用的,而有些变量不需要在jsp的脚本语言里声明就能够使用的,被称为jsp页面的内置对象,内置对象有request、response、session、application;下面逐个进行介绍。

一、request对象

顾名思义,request是处理请求信息的对象;用户和服务器之间进行交互是通过遵守“http协议”进行的,“http协议”又叫“请求与响应”协议,当用户通过在浏览器地址栏里输入服务器的地址和页面的名字来请求该页面时,就向服务器发送了一个请求,这个请求里包含了客户的请求信息,被封装在request对象里,通过request对象的响应方法来调取信息;

(1)、request对象获取用户的提交信息

当用户用form表单向服务器提交信息时,该信息会被tomcat封装在request对象里;request通过getRequest()方法来获取这些信息,getRequest()也是request对象许多方法中最常用的方法,下面用例子来进行说明:

request.getParameter()方法


首次打开结果

注意:此处代码的第18行必须加入异常处理,因为当第一次打开页面时变量str1为空值,此时不能作类型转换;

(2)、处理汉字信息

当用request对象获取信息时可能出现中文乱码问题,这里可以采用以下办法:对获取的信息作重新编码,如:Stinger str=request.getParameter("name");Byte b[]=str.getByte("ISO-8859-1");str=new String(b);另外对于jsp通过另两种办法处理post方式和get方式提交的中文乱码问题的对应解决方案请点击链接:解决jsp页面中文乱码问题;例子如下:

exzample4_2
showMessage4_2

(3)、request对象的常用方法

getProtocol():获取请求使用的通信协议;

getServletPath():获取请求的jsp页面所在的目录;

getContentLength():获取http请求的长度;

getmethod():获取表单提交信息的方式;

getHeader(String s):获取请求中头的一个值;

getHeaderNames():获取头名字的一个枚举;

getRemoteAddr():获取客户的IP地址;

getRemoteHost():获取客户机的名称(如果获取不到就获取IP地址);

getServerName():获取服务器的名称;

getServerPort():获取服务器的端口号;

getParameterNames():获取表单提交的信息体部分中name参数值的一个枚举;

二、response对象

和request对象相对应的是response对象,这个对象用来设置服务器对用户的回应信息;

(1)、改变contentType属性的值

在page指令中,contentType属性只能被赋值一次,但在动态的回应用户这方面是极不方便的,而通过response对象的setContentType(String s)方法就可以实现这一点,其中s可以取值为text/html,text/plain,image/gif,image/jpeg,image/x-xbitmap,image/pjpeg,application/x-shockwave-flash,application/vnd.ms-powerpoint,application/vnd.ms-excel,application/msword等,实例如下:

response.setContType()
点击按钮1结果

(2)、设置响应的http头

在对用户进行响应时,可以设置响应头以便控制响应;response对象可以使用addHeader(String head,String value);setHeader(String head,String nalue)进行添加,如果添加之前已经添加过则先前添加的将被覆盖;下面例子将实现使用户的浏览器5秒钟刷新一次的功能:

refresh代码
显示结果

(3)、重定向

response对象的sendRedirect()方法可以把客户机从当页面引导到另一页面,示例如下:

sendRedirect()方法

三、session对象

上面的request对象和response对象的信息在一个页面的一次请求和响应有效,而在用户和服务器进行连接和多个页面之间进行跳转时就不能共享request信息和response信息,这就需要使用session对象;

(1)、session对象的id

服务器通过session对象来实现一个用户的多个页面之间进行共享信息,当用户和服务器进行一次连接,服务器将对该用户分配一个唯一的id,当用户提交信息时,服务器可以使用session对象的相应方法把信息存储下来,以便用户在在同一服务器的其他页面使用;只要用户不关闭浏览器或者session对象的生存空间没有达到最大,用户的id就不会改变,用户保存的信息就能够一直保存下去;session可以通过getId()方法得到服务器为用户分配的id;

(2)、session对象存储数据

public void setAttribute(String key,Object obj):该方法将指定的obj对象存储在session对象中,并为该对象提供key索引,如果两次添加的对象的索引相同则第一次添加的对象将被覆盖;

public Object getAttribute(String key):该方法通过查找索引来获取存储在session对象中的object对象,注意获得的对象要通过强制类型转换转换为原来的数据类型;

public Enumeration getAttributeNames():该方法获得一个枚举对象,该枚举对象使用nextElemets()方法遍历session保存的各个对象对应的关键字;

public void removeAttribute(String name):该方法移掉name索引对应的对象;

下面通过实例来模拟购物车、存储客户姓名和购买商品功能,代码如下: 

客户登记姓名页面
food4_6.jsp
count4_6.jsp主要代码

(3)、session对象的生存期限

session对象当满足以下三种情况会失效,用户关闭浏览器,session对象的生存时间达到最大和session对象调用了invalidate()方法;失效后如果还需用到sessio对象,服务器就会重新生成不同ID号的session对象;其中session对象的生存时间可以通过修改服务器下的web.xml文件来修改,系统默认生存时间为30分钟,将30修改为想要的时间即可,修改代码段如下:

web.xml代码段

另外session对象关于生存期限的信息处理有以下常用的方法:

public long getLastAccessedTime():获取session最后被操作的时间,单位为毫秒数(从1970年7月1日午夜起至该对象最后被操作时刻所走的毫秒数);

public int getCreationTime():获取session对象被创建的时间;

public int getMaxInactiveInterval():获取对象的最大生存时间;

public void setMaxInactiveInterval():设置对象的最大生存时间;

public boolean isNew():判断当前session是否是一个新建的会话;

invalidate():使session无效;

(4)、session对象与url重写;

当服务器为客户机的一个页面生成一个ID时,另一个页面是怎么得到该id并识别是同一个客户的呢?这就有必要说一下cookie的概念,当服务器为一个客户生成一个ID时会在客户的浏览器启用cookie,这个cookie在用户的浏览器上保存有生成的id,当客户再次发送请求时会验证该cookie的id,这就使得用户和服务器之间的是一一对应的关系;但是用户为了自己的隐私保密,可以在浏览器上设置禁用cookie这就使得同一个客户的同一次请求可能会有不同的id,导致session信息的不共享,为此,可以使用response的encodeURL()或者encodeRedirectURL()方法进行定向页面时在URL上保存session对象的id;例如上述food4_6.jsp代码可作如下修改:

url重写

`五、application对象

上面已经介绍了request、response、session对象,上面的三个对象的作用范围只能局限在同一个页面或者是同一个客户,但是有时候不同客户需要共享一些信息,这就需要一个作用范围在服务器上的对象,这个对象就是application对象,由服务器启动时生成且被所有客户共享;application对象的常用方法有下面几个:

public void setAttribute(String key,Object obj):该方法将指定的obj对象存储在application对象中,并为该对象提供key索引,如果两次添加的对象的索引相同则第一次添加的对象将被覆盖;

public Object getAttribute(String key):该方法通过查找索引来获取存储在application对象中的object对象,注意获得的对象要通过强制类型转换转换为原来的数据类型;

public Enumeration getAttributeNames():该方法获得一个枚举对象,该枚举对象使用nextElemets()方法遍历application保存的各个对象对应的关键字;

public void removeAttribute(String name):该方法移掉name索引对应的对象;

public String getServletInfo()该方法获取当前编译器的版本信息;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,198评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,334评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,643评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,495评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,502评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,156评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,743评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,659评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,200评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,282评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,424评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,107评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,789评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,264评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,798评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,435评论 2 359

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,693评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,657评论 18 399
  • 景点推荐 霍顿平原 Horton's Plain(霍顿平原)是个美丽、安静、奇特的地方。所谓的“平原”,本身也是一...
    i小魔女琦琦阅读 368评论 0 0
  • 如果说起来我玩游戏的历史,可能就有点暴露年龄了,简书上恐怕没有几个人用过386电脑玩游戏吧。 那时甚至还没有网游,...
    章非阅读 324评论 0 2
  • 这两天用零零散散的时间看完了《一个叫欧维的男人决定去死》。 欧维一生循规蹈矩,秉持着坚不可摧的原则。在妻子死后,他...
    我的艾达阅读 149评论 0 0