欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JSP Servlet基础学习之JSP脚本中的9个内置对象

程序员文章站 2022-09-03 11:42:12
1.jsp脚本中的9个内置对象 application:javax.servlet.servletcontext实例,代表jsp所属的web应用本身,可以用于jsp页面或在servlet之间的信息交...

1.jsp脚本中的9个内置对象

application:javax.servlet.servletcontext实例,代表jsp所属的web应用本身,可以用于jsp页面或在servlet之间的信息交换

常用方法:getattribute、setattribute、getinitparameter

config:javax.servlet.servletconfig实例,该实例代表该jsp的配置信息。实际上,jsp页面无需配置,所以更多在servlet上有效

常用方法:getinitparameter、getinitparameternames

exception:java.lang.throwable实例,代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page的iserrorpage属性为true时,才可使用

常用方法:getmessage、printstacktrace

out: javax.servlet..jspwriter实例,代表jsp页面的输出流,用于输出内容,形成html页面

page:代表页面本身,没有太大用处。也就是servlet中的this,其类型就是生成servlet类,能用page就可以用this

pagecontext: javax.servlet.pagecontext实例,代表该jsp页面上下文,使用该对象可以访问页面中的共享数据。

常用方法:getservletcontext、getservletconfig

request:javax.servlet.http.httpservletrequest实例,该对像封装了一次请求,客户端的请求参数都在该对象中,获取客户端请求参数必须使用该参数

常用方法:getparameter、getparametervalues、setattribute、getattribute、setcharacterencoding

response: javax.servlet.http.httpservletresponse实例,代表服务器对客户端的相应,通常很少使用该对象直接响应,而是使用out对象,除非需要生成非字符响应

常用方法:getoutputstream、sendredirect

session:javax.servlet.http.httpsession实例,代表一次会话。当客户端与站点建立连接,会话开始;当客户端关闭浏览器,会话结束

常用方法:getattribute、setattribute

这9个内置对象都是servletapi接口的实例,只是jsp规范对它们进行了默认初始化(由_jspservice()方法来创建这些实例)。

打开任一jsp页面对应的servlet文件,可以看到如下代码:

public void <strong>_jspservice(final javax.servlet.http.httpservletrequest request, final javax.servlet.http.httpservletresponse response)</strong>  
      throws java.io.ioexception, javax.servlet.servletexception {  
  
......  
  
    <strong>final javax.servlet.jsp.pagecontext pagecontext;  
    javax.servlet.http.httpsession session = null;  
    final javax.servlet.servletcontext application;  
    final javax.servlet.servletconfig config;  
    javax.servlet.jsp.jspwriter out = null;  
    final java.lang.object page = this;  
    javax.servlet.jsp.jspwriter _jspx_out = null;  
    javax.servlet.jsp.pagecontext _jspx_page_context = null;</strong>  
  
  
    try {  
      response.setcontenttype("text/html; charset=utf-8");  
<strong>      pagecontext = _jspxfactory.getpagecontext(this, request, response,  
                null, true, 8192, true);  
      _jspx_page_context = pagecontext;  
      application = pagecontext.getservletcontext();  
      config = pagecontext.getservletconfig();  
      session = pagecontext.getsession();  
      out = pagecontext.getout();  
      _jspx_out = out;</strong>  

通过以上代码可以看出jsp内置对象的实质:要么是_jspservic()方法的形参,要么是_jspservice()方法的局部变量,所以可以直接在jsp脚本调用这些对象,无须创建它们。

上述代码之所以没有exception内置对象,是因为只有异常处理页面对应的servlet才会初始化exception对象。

application对象

application对象代表web应用本身,因此使用application来操作web应用相关数据。application对象通常有如下两个作用:

1.在整个web应用的多个jsp、servlet之间共享数据。

2.访问web应用的配置参数。

作用一:让多个jsp、servlet共享数据

通过setattribute(string attrname,object value)方法设置属性,该属性的值对整个web应用有效,访问属性的方法为getattribute(string attrname)。

setattribute()方法示例

<!-- 将i值自加后放入application的变量内 -->  
<%  
application.setattribute("counter",string.valueof(++i));  
%>  

可以把application理解成一个map对象,任何jsp、servlet都可以把某个变量放入application中保存,并为之指定一个属性名;而该应用的其他jsp、servlet就可以根据属性名来得到这个变量。