IT兄弟连 JavaWeb教程 JSP内置对象1

本文介绍了JSP的内置对象,其由容器实现和管理,无需实例化可直接使用。详细阐述了JSP九大内置对象,重点讲解了request、response、session对象的功能及使用方法,如request对象可处理请求参数、管理属性等,response对象能重定向网页、处理HTTP头文件等,session对象可保存用户状态。

JSP内置对象定义

JSP提供了由容器实现和管理的内置对象,也可以称之为隐含对象,这些内置对象不需要通过JSP页面编写来实例化,在所有的JSP页面中都可以直接使用,它们起到了简化页面的作用,JSP的内置对象广泛应用于JSP的各种操作中。

JSP九大内置对象

由于JSP使用Java作为脚本语言,所以JSP将具有强大的对象处理能力,并且可以动态创建Web页面内容。但Java语法在使用一个对象前,需要先实例化这个对象,这其实是一件比较繁琐的事情。为了简化开发,JSP提供了一些内置对象,用来实现很多JSP应用。在使用JSP内置对象时,不需要先定义这些对象,直接使用即可。

在JSP中一共预先定义了9个这样的对象,分别为request、response、session、application、pageContext、config、page和exception。

request对象

request对象封装了由客户端生成的HTTP请求的所有细节,主要包括HTTP头信息、系统信息、请求方式和请求参数等。通过request对象提供的响应方法可以处理客户端浏览器提交的HTTP请求中的各项参数。

1.访问请求参数

我们知道request对象用于处理HTTP请求中的各项参数。在这些参数中,最常用的就是获取访问请求参数。当通过超链接的形式发送请求时,就可以为该请求传递参数,这可以通过在超链接的后面加上"?"来实现。

在页面中定义超链接,代码如下:

<a href="delete.jsp?id=1">删除</a>

在delete.jsp页面中,可以通过request对象的getParamater()方法获取传递的参数值。代码如下:

<% request.getParameter("id"); %>

在使用request的getParameter()方法获取传递的参数值时,如果指定的参数不存在,将但会null,如果指定了参数名,但未指定参数值,将返回空的字符串("")。

2.在作用域中管理属性

在进行请求转发时,需要把一些数据传递到转发后的页面进行处理。这时,就需要使用request对象的setAttribute()方法将数据保存到request范围内的变量中

request对象的setAttribute()方法的语法格式如下:

request.setAttribute(String name,Object object)

参数说明:

name:表示变量名,为String类型,在转发后的页面取数据时,就是通过这个变量名获取数据的。

object:用于指定需要在request范围内传递的数据,为Object类型。

在将数据保存到request范围内的变量中后,可以通过request对象的getAttribute()方法获取该变量的值,具体的语法格式如下:

request.getAttribute(String name)

参数说明:

name:表示变量名,该变量名在request范围内有效。

3.获取cookie

cookie的中文意思是"小甜饼",然而在互联网中的意思与这就完全不同了,它和食品完全没有关系。在互联网中,cookie是小段的文本信息,在网络服务器上生成,并发送给浏览器。通过使用cookie可以表示用户身份,记录用户名和密码,跟踪重复用户等。浏览器将cookie以key/value的形式保存到客户机的某个指定目录中。

通过request的getCookies()方法即可获得所有cookie对象的集合。

4.解决中文乱码

因为request请求都是ISO-8859-1编码的,而在页面中采用的是UTF-8编码方式,所以在使用中文参数时会出现乱码的问题,要解决此问题,只要将获取到的数据通过String的构造方法使用指定的编码类型重新构造一个String对象,即可正确地显示中文信息。

5.获取客户端信息

通过request对象可以获取客户端的相关信息,如HTTP报头信息,客户信息提交方式。客户端主机IP地址、端口号等。在客户端获取用户请求相关的request对象的方法如下所示:

(1)getHeader(String name):获取HTTP协议定义的文件头信息

(2)getHeaders(String name):返回指定名字的request Header的所有值,其结果是一个枚举型的实例

(3)getHeadersNames():返回所有request Header的名字,其结果是一个枚举型的实例

(4)getMethod():返获得客户端向服务器端发送数据的方法,如get、post

(5)getProtocol():获得客户端向服务器发送数据所依据的协议名称

(6)getRequestURI():获取发出请求字符串的客户端地址,不包括请求参数

(7)getRequestURL():获取发出请求字符串的客户端地址

(8)getReadPath():返回当前请求文件的绝对地址

(9)getRemoteAddr():返回客户端的IP地址

(10)getRemoteHost():返回客户端的主机名

(11)getServerName():获取服务器的名字

(12)getServerPath():获取客户端所请求的脚本文件的文件路径

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

6.显示国际化信息

浏览器可以通过accept-language的HTTP报头向Web服务器指明它所使用的本地语言,request对象中的getLocale()和getLocales()方法允许JSP开发人员获取这一信息,获取的信息属于java.util.Local类型。java.util.Local类型的对象封装了一个国家和国家所使用的一种语言,通过这一信息,JSP开发者就可以使用语言所特有的信息做响应。

response对象

response对象用于响应客户请求,向客户端输出信息,它封装了JSP产生的响应,并发送到客户端已响应客户端的请求,请求的数据可以是各种数据类型,甚至是文件。response对象在JSP页面内有效。

1.重定向网页

使用response对象提供的sendRedirect()方法可以将网页重定向到另一个页面。重定向操作支持将地址重定向不同的主机上,这一点与转发不同。在客户端浏览器上将会得到跳转的地址,并重新发送请求连接,用户可以从浏览器的地址栏中看到跳转后的地址。进行重定向操作后,request中的属性全部失效,并且开始一个新的request对象。

sendRedirect()方法的语法格式如下:

resposne.sendRedirect(String path);

参数说明:

path:用于指定目标路径,可以是相对路径,也可以是不同主机的其他URL地址。

2.处理HTTP头文件

通过response对象可以设置HTTP响应报头,其中,最常用的是禁用缓存、设置页面自动刷新和定时跳转网页。

(1)禁用缓存

在默认的情况下,浏览器将会对显示的网页内容进行缓存。这样,当用户再次访问相关网页时,浏览器会判断网页是否会有变化,如果没有变化则直接显示缓存中的内容,这样可以提高网页的显示速度,对于一些安全性较高的网站,通常需要禁用缓存。

通过设置HTTP头的方法实现禁用缓存,代码如下:

<% response.setHeader("Cache-Control","no-store");

response.setDateHeader("Expires", 0); %>

(2)设置页面自动刷新

通过设置HTTP头还可以实现页面的自动刷新

使网页每隔10秒自动刷新一次,代码如下:

<% response.setHeader("refresh","10"); %>

(3)定时跳转网页

通过设置HTTP头还可以实现定时跳转网页的功能

使网页5秒钟后自动跳转到指定页面,代码如下:

<% response.setHeader(refresh","5;URL=itxdl.cn");

3.设置输出缓冲

通常情况下,服务器要输出到客户端的内容不会直接写到客户端,而是先写到一个输出缓冲区,在计算机术语中,缓冲区被定义为暂时防止输入或输出资料的内存。实际上,缓冲区也可以这样理解,在一个粮库中,由于装卸车队的速度要快于传送带的传送速度,为了不造成装卸车队的浪费,粮库设计了一个站台,装卸车队可以先将运送的粮食卸到这平台上,然后让传送机慢慢传送,粮库的这个站台就起到了缓冲的作用。当满足以下3种情况之一,就会把缓冲区的内容写到客户端。

(1)JSP页面的输出信息已经全部写入到了缓冲区。

(2)缓冲区已满

(3)在JSP页面中,调用了response对象的flushBuffer()方法或out对象的flush()方法。

response对象提供了如下所示的对缓冲区进行配置的方法。

(1)flushBuffer():强制将缓冲区的内容输出到客户端

(2)getBufferSize():获取响应所使用的缓冲区的实际大小,如果没有使用缓冲区,则返回0

(3)setBufferSize(int size):设置缓冲区的大小

(4)reset():清除缓冲区的内容,同时清除状态码和报头

(5)isCommitted():检测服务器端是否已经把数据写入到了客户端

session对象

session在网络中被称为会话。由于HTTP协议是一种无状态协议,也就是当一个客户端向服务器发出请求,服务器接收请求,并返回响应后,该连接就结束了,而服务器并不保存相关的信息。为了弥补这一缺点,HTTP协议提供了session,通过session可以在应用程序的Web页面间进行跳转时,保存用户的状态,使整个用户会话一直存在下去,直到关闭浏览器。但是,如果在一个会话中,客户端长时间不向服务器发出请求,session对象就会自动消失。这个时间取决于服务器,例如,Tomcat服务器默认为30分钟。不过这个时间可以通过编写程序进行修改。

实际上,一次会话的过程也可以理解为一个打电话的过程。通话从拿起电话或手机拨号开始,直到挂断电话结束,在这个过程中,可以与对方聊很多话题,甚至重复的话题。一个会话也是这样,可以重复访问相同的Web页。

1.创建及获取客户的会话

通过session对象可以存储或读取客户相关信息,如用户名或购物信息等,这可以通过session对象的setAttribute()方法和getAttribute()方法实现。

(1)setAttribute()方法

该方法用于将信息保存在session范围内,其语法格式如下:

session.setAttribute(String name,Object object)

参数说明:

name:用于指定作用于在session范围内的变量名。

object:保存在session范围内的对象。

(2)getAttribute()方法

该方法用于获取保存在session范围内的信息,其语法格式如下:

getAttribute(String name)

name:指定保存在session范围内的关键字。

2.从会话中移动指定的绑定对象

对于存储在session会话中的对象,如果想将其从session会话中移除,可以使用session对象的removeAttribute()方法,该方法的语法格式如下:

removeAttribute(String name)

参数说明:

name:用于指定作用于在session范围内的变量名。一定要保证该变量在session范围内有效,否则将抛出异常。

3.销毁session

虽然当客户端长时间不向服务器发送请求后,session对象会自动消失,但对于某些实时统计在线人数的网站(例如聊天室),每次等session过期后,才能统计出准去的人数,这是远远不够的,所以还需要手动销毁session,通过session对象的invalidate()方法可以销毁session,其语法格式如下:

session.invalidate();

session对象被销毁后,将不可以再使用该session对象了,如果在session被销毁后,在调用session对象的任何方法,都将抛出Session already invalidated异常。

4.会话超时的管理

在应用session对象时也应该注意session的生命周期。一般来说,session的生命周期在20~30分钟之间。当用户首次访问时将产生一个新的会话,以后服务器就可以记住这个会话状态,当会话生命周期超时时,或者服务器端强制是会话失效时,这个session就不能使用了。在开发程序时应该考虑到用户访问网站时可能发生的各种情况,例如用户登录网站后在session的有效期外进行响应操作,用户会看到一张错误页面,这样的现象是不允许发生的。为了避免这种情况的发生,在开发系统时应该对session的有效性进行判断。

在session对象中提供了设置会话生命周期的方法,分别如下:

getLastAccessdTime():返回客户端最后一次与会话相关联的请求时间。

getMaxInactiveInterval():以秒为单位返回一个会话内两个请求最大时间间隔。

setMaxInactiveInterval():以秒为单位设置session的有效时间。

转载于:https://blog.51cto.com/14311187/2389781

1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定关闭、歌词逐句滚动”,提供 “沉浸式全屏模式”(隐藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 加密” 歌单,支持 “批量添加歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 转发”,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌长排名第 3”)。 音乐圈:加入 “特定曲风圈子(如‘古典音乐爱好者’)”,参与 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填写 “歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值