关键词:
--转载自孤傲苍狼博客
一、JSP运行原理
每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用。
由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响。
JSP引擎在调用JSP对应的_jspServlet时,会传递或创建9个与web开发相关的对象供_jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用。
二、认识九个内置对象
NO. | 内置对象 | 类型 |
1 | pageContext | javax.servlet.jsp.PageContext |
2 | request | javax.servlet.http.HttpServletRequest |
3 | response | javax.servlet.http.HttpServletResponse |
4 | session | javax.servlet.http.HttpSession |
5 | application | javax.servlet.ServletContext |
6 | config | javax.servlet.ServletConfig |
7 | out | javax.servlet.jsp.JspWriter |
8 | page | java.lang.Object |
9 | exception | java.lang.Throwable |
request,response,session,application,config这些对象在前面都已经作了详细的介绍,这里重点介绍一下剩下的pageContext对象,out对象,page对象。
三、内置对象使用说明
3.1、page对象
page对象表示当前一个JSP页面,可以理解为一个对象本身,即:把一个JSP当作一个对象来看待。page对象在开发中几乎不用,了解一下即可
3.2、out对象
out对象用于向客户端发送文本数据。
out对象是通过调用pageContext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的PrintWriter对象非常相似。
JSP页面中的out对象的类型为JspWriter,JspWriter相当于一种带缓存功能的PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓存大小,甚至关闭它的缓存。
只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:
- 设置page指令的buffer属性关闭了out对象的缓存功能
- out对象的缓冲区已满
- 整个JSP页面结束
out对象的工作原理图
3.3、pageContext对象
pageContext对象是JSP技术中最重要的一个对象,它代表JSP页面的运行环境,这个对象不仅封装了对其它8大隐式对象的引用,它自身还是一个域对象(容器),可以用来保存数据。并且,这个对象还封装了web开发中经常涉及到的一些常用操作,例如引入和跳转其它资源、检索其它域对象中的属性等。
3.4、通过pageContext获得其他对象
- getException方法返回exception隐式对象
- getPage方法返回page隐式对象
- getRequest方法返回request隐式对象
- getResponse方法返回response隐式对象
- getServletConfig方法返回config隐式对象
- getServletContext方法返回application隐式对象
- getSession方法返回session隐式对象
- getOut方法返回out隐式对象
3.5、pageContext封装其它8大内置对象的意义
如果在编程过程中,把pageContext对象传递给一个普通java对象,那么这个java对象将可以获取8大隐式对象,此时这个java对象就可以和浏览器交互了,此时这个java对象就成为了一个动态web资源了,这就是pageContext封装其它8大内置对象的意义,把pageContext传递给谁,谁就能成为一个动态web资源,那么什么情况下需要把pageContext传递给另外一个java类呢,什么情况下需要使用这种技术呢,在比较正规的开发中,jsp页面是不允许出现java代码的,如果jsp页面出现了java代码,那么就应该想办法把java代码移除掉,我们可以开发一个自定义标签来移除jsp页面上的java代码,首先围绕自定义标签写一个java类,jsp引擎在执行自定义标签的时候就会调用围绕自定义标签写的那个java类,在调用java类的时候就会把pageContext对象传递给这个java类,由于pageContext对象封装了对其它8大隐式对象的引用,因此在这个java类中就可以使用jsp页面中的8大隐式对象(request,response,config,application,exception,Session,page,out)了,pageContext对象在jsp自定义标签开发中特别重要。
3.6、pageContext作为域对象
1 public void setAttribute(java.lang.String name,java.lang.Object value)
2 public java.lang.Object getAttribute(java.lang.String name)
3 public void removeAttribute(java.lang.String name)
4 public java.lang.Object findAttribute(java.lang.String name) //用来查找各个域中的属性的当要查找某个属性时,
//findAttribute方法按照查找顺序"page→request→session→application"在这四个对象中去查找,只要找到了就返回属性值,如果四个对象都没有找到要查找的属性,则返回一个null。
3.7、PageContext引入和跳转到其他资源
- PageContext类中定义了一个forward方法(用来跳转页面)和两个include方法(用来引入页面)来分别简化和替代RequestDispatcher.forward方法和include方法。
方法接收的资源如果以“/”开头, “/”代表当前web应用。
1 //使用pageContext的forward方法跳转到pageContextDemo05.jsp页面,/代表了当前的web应用
2 pageContext.forward("/pageContextDemo05.jsp");
3 //使用pageContext.forward(relativeUrlPath)替代RequestDispatcher.forward(relativeUrlPath)
4 //使用RequestDispatcher的forward方法实现的跳转方式
5 //pageContext.getRequest().getRequestDispatcher("/pageContextDemo05.jsp").forward(request, response);
使用pageContext的include方法引入资源
1 <%
2 pageContext.include("/jspfragments/head.jsp");
3 %>
4 使用pageContext的include方法引入资源
5 <%
6 pageContext.include("/jspfragments/foot.jsp");
7 %>
<%--
15 <jsp:include page="/jspfragments/head.jsp"/>
16 使用jsp:include标签引入资源
17 <jsp:include page="/jspfragments/foot.jsp"/>
18 --%>
jsp九大内置对象
jsp九大内置对象 输入输出对象: out--》输出信息流 request-->请求信息 response-->响应信息 作用域通信对象: session-->会话 ... 查看详情
jsp九大内置对象
九大内置对象及其相应的作用域: JSP中九大内置对象为: request 请求对象 类型javax.servlet.ServletRequest Request(作用域)response &nb 查看详情
jsp九大内置对象
...+AJAX进行开发了JavaWeb了,但是还是很有必要了解一下JSP的九大内置对象的。像request、response、session这些对象,即便使用其他框架也是会经常用到的。因此十分有了解的必要。这些对象可以在JSP页面中调用,而不需要事先定义,... 查看详情
jsp九大内置对象
...+AJAX进行开发了JavaWeb了,但是还是很有必要了解一下JSP的九大内置对象的。像request、response、session这些对象,即便使用其他框架也是会经常用到的。因此十分有了解的必要。这些对象可以在JSP页面中调用,而不需要事先定义,... 查看详情
jsp的九大内置对象
九大内置对象 jspservlet 对象名类型使用范围requestHttpServletRequest请求浏览器--->服务器responseHttpServletResponse返回服务器--->浏览器configServletConfig用来获取web.xml中的信息applicationServletContext整个项目中的全局信息exceptionThr 查看详情
jsp九大内置对象
jsp内置对象,是指可以不加声明和创建就可以在JSP页面脚本中使用的成员变量。 pageContext 类型:PageContext 代表:当前页面的上下文,它是java.lang.Object类的实例 作用:可以获取JSP... 查看详情
jsp九大内置对象
什么是JSP九大内置对象在JSP中无需创建就可以使用的9个对象,它们是:l out(JspWriter):等同与response.getWriter(),用来向客户端发送文本数据;l config(ServletConfig):对应JSP生成的Servlet类中的ServletConfig;l page(当前JSP的类型)... 查看详情
jsp九大内置对象
内置对象特点:1. 由JSP规范提供,不用编写者实例化。2. 通过Web容器实现和管理3. & 查看详情
五------jsp九大内置对象。
Jsp九大内置对象,当中最基本的是前五个对象。5-1out对象out对象是JSPWriter类的实例。是向client输出内容经常使用的对象。out对象经常使用的方法例如以下:1。out.println():向client打印字符串2,out.clear():清除缓冲区的内容,假设在flush... 查看详情
jsp九大内置对象
request 请求对象 类型javax.servlet.ServletRequest 作用域Requestresponse 响应 查看详情
面试题:jsp九大内置对象
我们常说的JSP有九大内置对象分别为:request、response、session、out、pagecontext、page、exception、application、config。我们知道,JVM只能识别java类,并不能识别JSP代码,那么这些对象是如何产生的的呢?这就要提到Servlet。Servlet就是用Jav... 查看详情
jsp中九大内置对象和四大作用域
一共有九大内置对象:request、response、out、session、application、pageContext、page、config、exception内置对象(又叫隐含对象),就是在jsp中,不需要创建(由服务器<容器>来创建),可以直接使用的对象。 request &... 查看详情
jsp九大内置对象和四大作用域
...的都不是很全,今天我把各位大神的整理了一下。 JSP九大对象:内置对象(又叫隐含对象,有9个内置对象):不需要预先声明就可以在脚本代码和表达式中随意使用。一、request对象:代表的是来自客户端的请求,例如我们在... 查看详情
jsp九大内置对象(代码片段)
1.什么是JSP九大内置对象 在jsp中无需创建就可以直接使用的9个对象,它们是: *out(JspWriter):等同于response.getWriter(),用来向客户端发送文本数据; >jsp的输出流,用来向客户端响应。 *config(ServletConfig):对应&... 查看详情
jsp九大内置对象响应类型
内置对象 类型request httpServletRequestout &nbs 查看详情
jsp四大域对象和九大内置对象
四大域对象requestpagecontext page域session session域application context域九大内置对象resuestresponsesessionoutpagecontext 用于存取其他隐含对象 如requestresponseapplication等pageexcept 查看详情
jsp九大内置对象及其方法
内置对象包括requestresponsepageContextsessionapplicationoutconfigpageexception1.out(1)clear()清除缓冲区(2)flush()刷新缓冲区(3)newLine()创建新的一行(4)print(各种数据类型)显示数据内容(5)pringln(各种数据类型)换行显示数... 查看详情
整理一下jsp的九大内置对象和四大作用域
今天讲解了JSP的九大内置对象和四大作用域,简单整理一下以便以后观看。 JSP九大对象:内置对象(又叫隐含对象,有9个内置对象):不需要预先声明就可以在脚本代码和表达式中随意使用。一、request对象:代表的是来自客... 查看详情