jsp九大内置对象及四大作用域粗浅理解

2017/3/23 (仅供个人查阅)

引言 第一次写博客,虽然大多都是网上转载的一些东西,但我觉得总结起来,比较有助于自己以后工作的查找,通过不断的面试和学习来发现自己的哪方便不足 系统的梳理了一下,文中如有不足或错误 望海涵。

JSP内置对象


------------------------------------------------------------------------

    request 请求对象  类型javax.servlet.ServletRequest 作用域 Request
    response 响应对象  类型javax.servlet.ServletResponse 作用域 Page
    pageContext 页面上下文对象 类型 javax.servlet.jsp.PageContext 作用域 Page
    session 会话对象 类型 javax.servlet.http.HttpSession 作用域 session
    application 应用程序对象 类型 javax.servlet.ServletContext 作用域 Application
    out 输出对象 类型 javax.servlet.jsp.JspWriter 作用域 Page
    config 配置对象 javax.servlet.ServletConfig 作用域 Page
    page 页面对象 javax.lang.Object 作用域Page
    exception 例外对象 javax.lang.Throwable 作用域 Page

---------------------------------------------------------------------------分割线----------------------------------------------------------------------


简述部分适合新手:

out 输出流 javax.servlet.jsp.JspWriter 输出流 作用域为page(页面执行期)

request 请求 javax.servlet.ServlerRequest子类型 封装了WEB浏览器或其他客户端生成的HTTP 请求的细节(参数,属性,头标和数据) 作用域为reuqset

response 响应 javax.servlet.ServletResponse 子类型 封装了返回到HTTP客户端的输出 向页面做种提供设置响应头标和状态码的方式 经常用来设置HTTP标题 添加Cookie 设置响应内容的类型和状态 发送HTTP重定向和编码URL 作用域为page(页面执行期)

pageContext javax.servlet.jsp.PageContext(抽象类) 类型 作用域page(页面执行期) 此对象提供所有四个作用域层次的属性查询和修改能力,它也提供了转发请求到其他资源和包含其他资源的方法:该对象的方法都是抽象方法。

session javax.servlet.http.HttpSession 类型 主要用于跟踪对话 作用域session 会话期 HttpSession是一个类似哈希表的与单一WEB浏览器会话相关的对象 它存在于HTTP请求之间 可以存储任何类型的命名对象

如果不需要在请求之间各位跟踪会话对象 可以通过page指令中制定session="false"

需要记住的是pageContext对象也可以与session.getAttribute(),session.setAttribute()一样的方式取得并设置会话属性

application javax.servlet.ServletContext类型,servlet的环境通过调用getServletConfig().getContext()方法获得

作用域为application(整个程序运行期) 它提供了关于服务器版本 应用级初始化参数和应用内资源绝对路径,注册信息的方式

config: javax.servlet.ServletConfig 作用域为page (页面执行期)


exception:java.lang.Throwable 通过jsp错误页面中的一个catch块已经溢出但没有捕获的java.lang.Throwable的任意实例,

传向了errorPage的URI。作用域为page(页面执行期)


exception只有在page指令中具有isErrorPage="true"时才有效。


page:java.lang.Object类型,指向页面自身的方式。作用域为page(页面执行期)。


request 对象代表来自客户端的请求 例如form表单中填写的信息

常用的方法有 

getParameter(String name) 获得表单name成员 单例 或第一个

getParameterNames()方法是将发送请求页面中form表单里所有具有name属性的表单对象获取(包括button).返回一个Enumeration类型的枚举.

通过Enumeration的hasMoreElements()方法遍历.再由nextElement()方法获得枚举的值.此时的值是form表单中所有控件的name属性的值.

最后通过request.getParameter()方法获取表单控件的value值.


Enumeration pNames=request.getParameterNames();
while(pNames.hasMoreElements()){
    String name=(String)pNames.nextElement();
    String value=request.getParameter(name);
    out.print(name + "=" + value);
}

request.getParameterValues("name")方法将获取所有form表单中name属性为"name"的值.该方法返回一个数组.遍历数组就可得到value值.

String values = request.getParameterValues("name");
for(String value : values){
    System.out.println(value);
}

 例: 获得如checkbox类(名字相同,但值有多个)的数据。

request.getParameterNames()的值是无序排列request.getParameterValues()是按照from表单的控件顺序排列.

作用域分四种,分别为:

    page

    在当前页面有效(仅用于JSP中)

    request

    在当前请求中有效

    session

    在当前会话中有效

    application

    在所有应用程序中有效

---------------------------------------------------------------------------分割线----------------------------------------------------------------------


response 对象代表对客户端的响应 通过response对象组织发送到客户端

pageContext 对象直译称为 页面上下文对象 代表的是当前页面运行的一些属性.

findAttribute(String name) 查找属性

依次在page,request,session(如果有效的话)和application Scope(范围)查找以name为名的Attribute,找到就返回对象,都找不到返回null。

getAttribute(String name)

在page scope(页面范围)内查找与name相关的属性,找到返回就返回对象,找不到就返回null。

两种的区别是,查找范围不同。

getAttributesScope(String name) 作用域的优先级依次是page,request,session,application

getAttributeNamesInScope 取得所有scope(范围)的属性

项目所面临的情况比较复杂的情况下,才会利用到页面属性来辅助处理。

session  

对象代表服务器与客户端所建立的会话,

当需要在不同的JSP页面中保留客户信息的情况下使用,

比如在线购物、客户轨迹跟踪等。“session” 对象建立在cookie的基础上,

所以使用时应注意判断一下客户端是否打开了cookie。常用的方法包括getId、 getValue、 getValueNames和putValue等。

判断Cookie是否启用的方法

//1 判断cookie是否启用的方法
   function check(){  
    if(window.navigator.cookieEnabled)  
       return true;  
    else{  
       alert("浏览器配置错误,Cookie不可用!");  
       return false;}  
    }  
//2
    SetCookie('cookie_test','1');  
    var cookie_test = getCookie('cookie_test');  
    if( '1' != cookie_test)  
    {  
    
     alert('不支持');  
    }else  
    {  
     alert('支持');  
    }  
      
    function SetCookie(name,value)//两个参数,一个是cookie的名子,一个是值  
    {  
       var Days = 30; //此 cookie 将被保存 30 天  
       var exp = new Date(); //new Date("December 31, 9998");  
       exp.setTime(exp.getTime() + Days*24*60*60*1000);  
       document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();  
    }  
    function getCookie(name)//取cookies函数     
    {  
       var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));  
       if(arr != null) return unescape(arr[2]); return null;  
      
    }  
    function delCookie(name)//删除cookie  
    {  
       var exp = new Date();  
       exp.setTime(exp.getTime() - 1);  
       var cval=getCookie(name);  
       if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString();  
    }  
//3
    var cookieEnabled=(navigator.cookieEnabled)? true : false  
    //判断cookie是否开启  
      
    //如果浏览器不是ie4+或ns6+  
    if (typeof navigator.cookieEnabled=="undefined" && !cookieEnabled){   
    document.cookie="testcookie"  
    cookieEnabled=(document.cookie=="testcookie")? true : false  
    document.cookie="" //erase dummy value  
    }  

HTTP是无状态(stateless)协议;


  Web Server 对每一个客户端请求都没有历史记忆;


  Session用来保存客户端状态信息;


  由Web Server 写入;


  存于客户端;


  客户端的每次访问都把上次的session记录传递给Web Server;


  Web Server读取客户端提交的session来获取客户端的状态信息


  application 对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getMimeType和getRealPath等。


  out 对象代表了向客户端发送数据的对象,与“response” 对象不同,

    通过“out” 对象发送的内容将是浏览器需要显示的内容,

   是文本一级的,可以通过“out” 对象直接向客户端写一个由程序动态生成HTML文件。

   常用的方法除了pirnt和println之外,还包括clear、clearBuffer、 flush、getBufferSize和getRemaining,

   这是因为“out” 对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法


   “config” 对象提供一些配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。

   “page” 对象代表了正在运行的由JSP文件产生的类对象,不建议一般读者使用。

   “exception” 对象则代表了JSP文件运行时所产生的例外对象,此对象不能在一般JSP文件中直接使用,而只能在使用了“<%@ page isErrorPage="true "%>”的JSP文件中使用四个作用域:

     异常深入理解 http://baike.baidu.com/item/Exception


   何为作用域

  大概流程是这样的,我们访问04-01/index.jsp的时候,分别对pageContext, request, session,


  application四个作用域中的变量进行累加。(当然先判断这个变量是不是存在,如果变量不存在,则要把变量初始化成1。)计算完成后就从index.jsp执行forward跳转到test.jsp。在test.jsp里再进行一次累加,然后显示出这四个整数来。


  从显示的结果来看,我们可以直观的得出结论:


  page里的变量没法从index.jsp传递到test.jsp。只要页面跳转了,它们就不见了。


  request里的变量可以跨越forward前后的两页。但是只要刷新页面,它们就重新计算了。


  session和application里的变量一直在累加,开始还看不出区别,只要关闭浏览器,再次重启浏览器访问这页,session里的变量就重新计算了。


    application里的变量一直在累加,除非你重启tomcat,否则它会一直变大。

 

    而***作用域规定的是变量的有效期限。


    所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。

------------------------------------------------------------------------分割线

实用方法:

1.request对象

客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,
然后做出响应。它是HttpServletRequest类的实例。


objectgetAttribute(Stringname) 返回指定属性的属性值


EnumerationgetAttributeNames() 返回所有可用属性名的枚举


StringgetCharacterEncoding() 返回字符编码方式


intgetContentLength() 返回请求体的长度(以字节数)


StringgetContentType() 得到请求体的MIME类型


ServletInputStreamgetInputStream() 得到请求体中一行的二进制流


StringgetParameter(Stringname) 返回name指定参数的参数值


EnumerationgetParameterNames() 返回可用参数名的枚举


String[]getParameterValues(Stringname) 返回包含参数name的所有值的数组


StringgetProtocol() 返回请求用的协议类型及版本号


StringgetScheme() 返回请求用的计划名,如:http.https及ftp等


StringgetServerName() 返回接受请求的服务器主机名


intgetServerPort() 返回服务器接受此请求所用的端口号


BufferedReadergetReader() 返回解码过了的请求体


StringgetRemoteAddr() 返回发送此请求的客户端IP地址


StringgetRemoteHost() 返回发送此请求的客户端主机名


voidsetAttribute(Stringkey,Objectobj) 设置属性的属性值


StringgetRealPath(Stringpath) 返回一虚拟路径的真实路径


  2.response对象

response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。
它是HttpServletResponse类的实例。


序号 方法 说明
1 StringgetCharacterEncoding() 返回响应用的是何种字符编码


2 ServletOutputStreamgetOutputStream() 返回响应的一个二进制输出流


3 PrintWritergetWriter() 返回可以向客户端输出字符的一个对象


4 voidsetContentLength(intlen) 设置响应头长度


5 voidsetContentType(Stringtype) 设置响应的MIME类型


6 sendRedirect(java.lang.Stringlocation) 重新定向客户端的请求

 3.session对象

session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个
WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession
类的实例.


longgetCreationTime() 返回SESSION创建时间


publicStringgetId() 返回SESSION创建时JSP引擎为它设的惟一ID号


longgetLastAccessedTime() 返回此SESSION里客户端最近一次请求时间


intgetMaxInactiveInterval() 返回两次请求间隔多长时间此SESSION被取消(ms)


String[]getValueNames() 返回一个包含此SESSION中所有可用属性的数组


voidinvalidate() 取消SESSION,使SESSION不可用


booleanisNew() 返回服务器创建的一个SESSION,客户端是否已经加入


voidremoveValue(Stringname) 删除SESSION中指定的属性


voidsetMaxInactiveInterval() 设置两次请求间隔多长时间此SESSION被取消(ms)


  4.out对象

out对象是JspWriter类的实例,是向客户端输出内容常用的对象

voidclear() 清除缓冲区的内容


voidclearBuffer() 清除缓冲区的当前内容


voidflush() 清空流


intgetBufferSize() 返回缓冲区以字节数的大小,如不设缓冲区则为0


intgetRemaining() 返回缓冲区还剩余多少可用


booleanisAutoFlush() 返回缓冲区满时,是自动清空还是抛出异常


voidclose() 关闭输出流


  5.page对象

page对象就是指向当前JSP页面本身,有点象类中的this指针,它是
java.lang.Object类的实例


classgetClass 返回此Object的类


inthashCode() 返回此Object的hash码


booleanequals(Objectobj) 判断此Object是否与指定的Object对象相等


voidcopy(Objectobj) 把此Object拷贝到指定的Object对象中


Objectclone() 克隆此Object对象


StringtoString() 把此Object对象转换成String类的对象


voidnotify() 唤醒一个等待的线程


voidnotifyAll() 唤醒所有等待的线程


voidwait(inttimeout) 使一个线程处于等待直到timeout结束或被唤醒


voidwait() 使一个线程处于等待直到被唤醒


voidenterMonitor() 对Object加锁


voidexitMonitor() 对Object开锁


  6.application对象

application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器
的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前
后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何
地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和
关闭决定了application对象的生命。它是ServletContext类的实例。

ObjectgetAttribute(Stringname) 返回给定名的属性值


EnumerationgetAttributeNames() 返回所有可用属性名的枚举


voidsetAttribute(Stringname,Objectobj) 设定属性的属性值


voidremoveAttribute(Stringname) 删除一属性及其属性值


StringgetServerInfo() 返回JSP(SERVLET)引擎名及版本号


StringgetRealPath(Stringpath) 返回一虚拟路径的真实路径


ServletContextgetContext(Stringuripath) 返回指定WebApplication的application对象


intgetMajorVersion() 返回服务器支持的ServletAPI的最大版本号


intgetMinorVersion() 返回服务器支持的ServletAPI的最大版本号


StringgetMimeType(Stringfile) 返回指定文件的MIME类型


URLgetResource(Stringpath) 返回指定资源(文件及目录)的URL路径


InputStreamgetResourceAsStream(Stringpath) 返回指定资源的输入流


RequestDispatchergetRequestDispatcher(Stringuripath) 返回指定资源的RequestDispatcher对象


ServletgetServlet(Stringname) 返回指定名的Servlet


EnumerationgetServlets() 返回所有Servlet的枚举


EnumerationgetServletNames() 返回所有Servlet名的枚举


voidlog(Stringmsg) 把指定消息写入Servlet的日志文件


voidlog(Exceptionexception,Stringmsg) 把指定异常的栈轨迹及错误消息写入Servlet的日志文件


voidlog(Stringmsg,Throwablethrowable) 把栈轨迹及给出的Throwable异常的说明信息写入Servlet的日志文件


  7.exception对象

exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产
生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,
否则无法编译。他实际上是java.lang.Throwable的对象

StringgetMessage() 返回描述异常的消息


StringtoString() 返回关于异常的简短描述消息


voidprintStackTrace() 显示异常及其栈轨迹


ThrowableFillInStackTrace() 重写异常的执行栈轨迹


  8.pageContext对象

pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是
说他可以访问到本页所在的SESSION,也可以取本页面所在的application的
某一属性值,他相当于页面中所有功能的集大成者,它的本类名也叫
pageContext。

JspWritergetOut() 返回当前客户端响应被使用的JspWriter流(out)


HttpSessiongetSession() 返回当前页中的HttpSession对象(session)


ObjectgetPage() 返回当前页的Object对象(page)


ServletRequestgetRequest() 返回当前页的ServletRequest对象(request)


ServletResponsegetResponse() 返回当前页的ServletResponse对象(response)


ExceptiongetException() 返回当前页的Exception对象(exception)


ServletConfiggetServletConfig() 返回当前页的ServletConfig对象(config)


ServletContextgetServletContext() 返回当前页的ServletContext对象(application)


voidsetAttribute(Stringname,Objectattribute) 设置属性及属性值


voidsetAttribute(Stringname,Objectobj,intscope) 在指定范围内设置属性及属性值


publicObjectgetAttribute(Stringname) 取属性的值


ObjectgetAttribute(Stringname,intscope) 在指定范围内取属性的值


publicObjectfindAttribute(Stringname) 寻找一属性,返回起属性值或NULL


voidremoveAttribute(Stringname) 删除某属性


voidremoveAttribute(Stringname,intscope) 在指定范围删除某属性


intgetAttributeScope(Stringname) 返回某属性的作用范围


EnumerationgetAttributeNamesInScope(intscope) 返回指定范围内可用的属性名枚举


voidrelease() 释放pageContext所占用的资源


voidforward(StringrelativeUrlPath) 使当前页面重导到另一页面


voidinclude(StringrelativeUrlPath) 在当前位置包含另一文件


  9.config对象

config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值