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的有效时间。

IT兄弟连 JavaWeb教程 JSP内置对象1的更多相关文章

  1. IT兄弟连 JavaWeb教程 JSP内置对象经典面试题

    1.请说明cookie.request.session.application的作用域和声明周期? 并说明它们适用与什么场景? request的生命周期是一次请求.可以用于JSP表单提交数据. ses ...

  2. IT兄弟连 JavaWeb教程 JSP内置对象3

    读取web.xml配置信息的config对象 config对象主要用于取得服务器的配置信息.通过pageContxt对象的getServletConfig()方法获取一个config对象.当一个Ser ...

  3. IT兄弟连 JavaWeb教程 JSP内置对象2

    application对象 application对象用于保存所有应用程序中的公有数据.它在服务器启动时自动创建,在服务器关闭时销毁,当application对象没有被销毁时,所有用户都可以共享app ...

  4. IT兄弟连 JavaWeb教程 JSP内置对象经典案例

    案例需求:使用MVC模式编写一个程序当发起一个deptList.do请求时在servlet中准备一个部门列表对象,把这个列表对象放入request作用域中,然后转发到deptlist.jsp,使用js ...

  5. JavaWeb学习----JSP内置对象详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  6. JavaWeb之 JSP:内置对象,EL表达式,JSP标签基础

    JSP的内置对象 什么是JSP的内置对象呢? 在JSP页面进行编程的时候,如果我们要使用一些对象,如:HttpSession,ServletConfig,ServletContext这些对象,如果每次 ...

  7. JavaWeb基础-Jsp内置对象

    request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应,它是HttpServlteRequest类的实例.Request对象具有请求域,即完成客户端 ...

  8. JavaWeb——JSP内置对象application,JSP属性范围

    application application语法 application对象 JSP属性范围 范围的分类 page request session application pagecontext延伸 ...

  9. JavaWeb——JSP内置对象request,response,重定向与转发 学习总结

    什么是JSP内置对象 九大内置对象 requestJSP内置对象 request对象常用方法 request练习 responseJSP内置对象 response练习 response与request ...

随机推荐

  1. c# vs2010 连接access数据库

    第一次在博客园写博文,由于文采不怎么好,即使是自己很熟悉的东西,写起来也会感觉到不知从何讲起,我想写的多了就好了. 这篇文章主要是介绍怎么用c# 语言 vs2010连接access数据库的,连接字符串 ...

  2. 无感知的用同步的代码编写方式达到异步IO的效果和性能,避免了传统异步回调所带来的离散的代码逻辑和陷入多层回调中导致代码无法维护

    golang/goroutine 和 swoole/coroutine 协程性能测试对比 - Go语言中文网 - Golang中文社区 https://studygolang.com/articles ...

  3. 基于地理位置信息的traceroute

    我们在机房选择.測试网络的质量的时候,往往仅仅依据跳数.延迟.抖动.网络吞吐量等指标来衡量,非常多时候跳数并不能全然显示网络拓扑优劣,于是写了个traceroute结合whois的小脚本来直观显示每一 ...

  4. 解析json的方式

    一.Javascrip操作json 原始方式: var str1 = '{ "name": "jacun", "addr": "b ...

  5. BNUOJ 34978 汉诺塔 (概率dp)

    题目分析:对于 i 个盘 , 须要移动多少步,取决于最大的盘子在哪个杆上.在C杆上,则最大的盘不须要移动,由于初始状态一定是满足盘由下到上盘子依次变小的,仅仅须要移动i - 1个盘.假设在A杆上,则首 ...

  6. Proxy Pattern

    1.Proxy Pattern最大的好处就是实现了逻辑和实现的彻底解耦. 2.Proxy Pattern结构图 3.实现 #ifndef _PROXY_H_ #define _PROXY_H_ cla ...

  7. mysql错误指令:Failed to open file "file_name" error 2/error 22

    网上说Linux下可能会有此问题,及导入sql文件时出现如标题所示的错误.而我用的是windows系统,也出现了同样的问题. source   filename | \. filename 执行这条语 ...

  8. 怎样使用alsa API

    翻译文章的链接: http://equalarea.com/paul/alsa-audio.html 关于怎么使用ALSA API教程 这份文档帮助对ALSA API使用入门.不是一个完整的ALSA ...

  9. 给第三方apk进行系统签名的几种方式【转】

    本文转载自:http://blog.csdn.net/luzhenrong45/article/details/47733053 版权声明:本文为博主原创文章,未经博主允许不得转载. -------- ...

  10. 【转载】Android进程保活招式大全

    原文地址:http://dev.qq.com/topic/57ac4a0ea374c75371c08ce8 目前市面上的应用,貌似除了微信和手Q都会比较担心被用户或者系统(厂商)杀死问题.本文对 An ...