博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSP九大隐式对象归纳总结
阅读量:2020 次
发布时间:2019-04-28

本文共 3607 字,大约阅读时间需要 12 分钟。

首先理清一下什么是隐式对象:在编写JSP时,不需要声明(创建)就可以直接使用的对象称为隐式对象。

对应的作用如下图所示:

每个对象对应作用域如下所示:

 

内置对象 代表内容                                                                            范围

request 触发服务调用的请求                                                            request

response 对请求的应答                                                                    page

session 为请求的客户创建的session对象                                    session

application 从 servlet 配置对象获得的 servlet 上下文                    application

          (如在getServletConfig() ,getContext()的调用中)                                                                                                                                                               

out 向输出流写入内容的对象                                                             page

pageContext 本 JSP 的页面上下文                                             page

page 实现处理本页当前请求的类的实例                                    page

config 本 JSP 的 ServletConfig                                                     page

exception 表示JSP页面运行时产生的异常                                      Page

代码示例:

 一:比较pagecontext,request,session,application作用域:

index1.jsp关键代码:

 

Java代码  
  1. <%  
  2.     //存储  
  3.     pageContext.setAttribute("a"1);  
  4.     request.setAttribute("request"1);  
  5.     session.setAttribute("session"1);  
  6.     application.setAttribute("application"1);   
  7.     //在本页获取  
  8.     Object obj = pageContext.getAttribute("a");  
  9.     Object obj1 = request.getAttribute("request");  
  10.     Object obj2 = session.getAttribute("session");  
  11.     Object obj3 = application.getAttribute("application");  
  12. %>  
  13.     pageContext:<%=obj %> <br/>  
  14.     request:<%=obj1 %><br/>  
  15.     session:<%=obj2 %><br/>  
  16.     application:<%=obj3 %><br/>  

 运行:

 

 可以看出,在本页中四个参数都能得到数据,下面我们跳转到另一个界面进行测试

在index1.jsp中增加如下代码:

 

Java代码  
  1. <%  
  2.     request.getRequestDispatcher("index2.jsp").forward(request, response);  
  3.   
  4.     //response.sendRedirect("index2.jsp");  
  5.   
  6. %>  

 

 

index2.jsp:

 

Java代码  
  1. <%  
  2.     //在转发后的页获取  
  3.     Object obj = pageContext.getAttribute("pageContext");  
  4.     Object obj1 = request.getAttribute("request");  
  5.     Object obj2 = session.getAttribute("session");  
  6.     Object obj3 = application.getAttribute("application");  
  7. %>  
  8.   
  9. 这个是index2.jsp的数据:<br/>  
  10. pageContext:<%=obj %> <br/>  
  11. request:<%=obj1 %><br/>  
  12. session:<%=obj2 %><br/>  
  13. application:<%=obj3 %><br/>  

 这里注意到index1.jsp增加的代码中有两种跳转方法,一种是request.getRequestDispatcher() 另一种是response.sendRedirect(),两种分别运行效果如下(先后顺序):

可以得出结论: request.getRequestDispatcher()是请求转发,前后页面共享一个request ; 

response.sendRedirect()是重新定向,前后页面不是一个request。

并且,pagecontext只对本页有效,request在一个请求内有效。

下面测试session的作用域:

index3.jsp:

Java代码  
  1. <%  
  2.     //在转发后的页获取  
  3.     Object obj = pageContext.getAttribute("pageContext");  
  4.     Object obj1 = request.getAttribute("request");  
  5.     Object obj2 = session.getAttribute("session");  
  6.     Object obj3 = application.getAttribute("application");  
  7. %>  
  8.   
  9. 这个是index33333333.jsp的数据:<br/>  
  10. pageContext:<%=obj %> <br/>  
  11. request:<%=obj1 %><br/>  
  12. session:<%=obj2 %><br/>  
  13. application:<%=obj3 %><br/>  

 打开IE浏览器,运行index3.jsp,与之前谷歌浏览器的index3.jsp运行结果对比:

 可以看到,session的作用域仅限于同一个浏览器(一个浏览器对应一个session),即对应一次会话。

然而application依旧是存在的,这里我们重启服务器再运行index3.jsp:

 可以发现,现在application也没了,由此可以得出结论,application的作用域最广,为服务器启动到关闭的整段时间, 在这个作用域内设置的信息可以被所有应用程序使用。 

二:分析page,config,exception,out

out应该不用分析了...就是在Jsp里的输出流。。想必都懂..

首先是page,这里编写index4.jsp:

Java代码  
  1. <%  
  2.     //由于JSP本身就是一个Servlet  
  3.     HttpJspPage servlet = (HttpJspPage) page;  
  4.     String str = servlet.getServletInfo();  
  5.   
  6.     String str2 = this.getServletName();  
  7.       
  8. %>  
  9. <%=str%>  <%=str2%>  

 运行结果:

可以看到输出了当前JSP页面的配置信息,由此可以得出结论page相当于servlet中的this对象。

 

然后测试config

在web.xml配置文件中加入:

Java代码  
  1. <servlet>  
  2.     <servlet-name>aa</servlet-name>  
  3.     <jsp-file>/index5.jsp</jsp-file>  
  4.     <init-param>  
  5.         <param-name>className</param-name>  
  6.         <param-value>oracle.jdbc.driver.OracleDriver</param-value>  
  7.     </init-param>  
  8.     <init-param>  
  9.         <param-name>url</param-name>  
  10.         <param-value>jdbc:oracle:thin:@127.0.0.1:1521:ORCL</param-value>  
  11.     </init-param>  
  12.     <init-param>  
  13.         <param-name>user</param-name>  
  14.         <param-value>scott</param-value>  
  15.     </init-param>  
  16.         <init-param>  
  17.         <param-name>pwd</param-name>  
  18.         <param-value>tiger</param-value>  
  19.     </init-param>  
  20.   </servlet>  

 运行时URL改成:http://127.0.0.1:8080/ysdx/aa

运行结果:

 可以看到Config为Jsp配置信息

最后是exception:

新建一个index6.jsp

Java代码  
  1. <%  
  2.     int a = 1, b = 0;  
  3. %>  
  4. <%=a / b%>  
  5. <a href="index7.jsp">这是一个超连接</a>  

 可以看到,里面发生了除0错误

新建error.jsp:

Java代码  
  1. 你访问的页面飞走了!!  
  2.   
  3. <%  
  4. String msg = exception.getMessage();  
  5. %>  
  6.   
  7. <%=msg %>  

 运行inde6.jsp:

 

 可以看到报错页面是error.jsp,由此可见exception的作用是异常处理。

 

学习完感觉所有语言都有种触类旁通的意思,所以还是耐心学精一门语言,学其他语言都会容易上手。

 

转载地址:http://cnqxf.baihongyu.com/

你可能感兴趣的文章
mysql8之坑
查看>>
ImportError: No module named flask 导包失败,Python3重新安装Flask模块
查看>>
初识neo4j
查看>>
linux相关(一)
查看>>
Python 函数
查看>>
Python 基础数据类型
查看>>
pandas 数据结构与基础功能
查看>>
日期时间变量的处理
查看>>
数据框的合并排序、描述统计、分箱
查看>>
numpy库学习总结
查看>>
numpy库
查看>>
Python基础数据类型
查看>>
pandas 数据结构与基础功能
查看>>
学习python内一般函数知识
查看>>
异常、模块、文件读写
查看>>
数据框的合并排序、描述统计、分箱
查看>>
日期时间变量的处理
查看>>
爬虫 selenium
查看>>
python爬虫
查看>>
流程控制语句
查看>>