九个内置工具

pageContextpageconfigrequestresponsesessionapplicationexceptionoutout工具

out工具的API

int getBufferSize()【得到缓存大小】int getRemaining()【得到未利用缓存的大小】boolean isAutoFlush()void println()void flush()void close()void clearBuffer()void clear()out工具用于向浏览器输出数据,与之对应的是Servlet的PrintWriter工具。
然而这个out工具的类型并不是PrintWriter,是JspWriter

jsp内置对象中与请求相关JSP第二篇内置对象的介绍4种属性规模运用场景修订版 CSS

我们可以大略理解为:JspWriter便是带缓存的PrintWrieter。
out工具的事理如下:

只有向out工具中写入了内容,且知足如下任何一个条件时,out工具才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter工具将out工具的缓冲区中的内容真正写入到Servlet引擎供应的缓冲区中:设置page指令的buffer属性关闭了out工具的缓存功能out工具的缓冲区已满全体JSP页面结束一样平常我们在JSP页面输出都是用表达式(<%=%>),以是out工具用得并不是很多!
request内置工具request实在便是HttpServletRequest,在Servlet讲解的时候已经详细解释了,没什么好说的

response内置工具response实在便是HttpServletResponse,在Servlet讲解的时候已经详细解释了,没什么好说的

config内置工具config实在便是ServletConfig,在Servlet讲解的时候已经详细解释了,没什么好说的

session内置工具session实在便是HttpSession。
,在Servlet讲解的时候已经详细解释了,没什么好说的

把稳:在page指令配置如下信息,session将不可利用

<%@page session=\"大众false\"大众 %>

application内置工具application实在便是ServletContext工具,在Servlet讲解的时候已经详细解释了,没什么好说的

page内置工具page是HttpJasPage工具,实在page工具代表的便是当前JSP页面,是当前JSP编译后的Servlet类的工具。
也便是说:page工具相称于普通java类的this

exception内置工具exception是java.lang.Exception类的工具,exception封装了JSP页面抛出的非常信息。
exception常常被用来处理缺点页面前面我们已经讲过了怎么设置缺点页面了,下面我们就来大略利用一下exception工具吧1.jsp页面

<%@ page contentType=\"大众text/html;charset=UTF-8\公众 language=\"大众java\"大众 errorPage=\公众error.jsp\公众 %><html><head> <title></title></head><body><%--仿照空指针非常的缺点--%><% String sss = null; sss.length();%></body></html>error.jsp页面

<%@ page contentType=\公众text/html;charset=UTF-8\公众 language=\"大众java\公众 isErrorPage=\公众true\公众 %><html><head> <title>缺点页面</title></head><body><% out.println(\公众程序抛出了非常:\公众 + exception);%></body></html>效果:

pageContext

pageContext是内置工具中最主要的一个工具,它代表着JSP页面编译后的内容(也便是JSP页面的运行环境)!

pageContext获取8个内置工具

既然它代表了JSP页面编译后的内容,天经地义的:它封装了对其他8大内置工具的引用!
,也便是说,通过pageContext可以获取到其他的8个内置工具!

<%@ page contentType=\公众text/html;charset=UTF-8\"大众 language=\公众java\"大众 %><html><head> <title>获取八大内置工具</title></head><body><% System.out.println(pageContext.getSession()); System.out.println(pageContext.getRequest()); System.out.println(pageContext.getResponse()); System.out.println(pageContext.getException()); System.out.println(pageContext.getPage()); System.out.println(pageContext.getServletConfig()); System.out.println(pageContext.getServletContext()); System.out.println(pageContext.getOut());%></body></html>看下效果:

pageContext作为域工具

类似于request,session,ServletContext作为域工具而言都有以下三个方法:setAttribute(String name,Objcet o)getAttribute(String name)removeAttribute(String name)当然了,pageContext也不例外,pageContext也有这三个方法!
pageContext实质上代表的是当前JSP页面编译后的内容,作为域工具而言,它就代表着当前JSP页面(也便是page)!
也便是说:pageContext域工具只在page范围内有效,超出了page范围就无效了!
首先来看看在page范围内能不能利用

<%@ page contentType=\"大众text/html;charset=UTF-8\"大众 language=\"大众java\"大众 %><html><head> <title>利用page域工具</title></head><body><% pageContext.setAttribute(\"大众name\公众, \公众zhongfucheng\公众);%><% String value = (String) pageContext.getAttribute(\"大众name\"大众); System.out.println(value);%></body></html>效果如下:

我们现在来试验一下是不是超出了page范围就无效了!
在2.jsp中request域工具设置属性

<%@ page contentType=\公众text/html;charset=UTF-8\"大众 language=\"大众java\"大众 %><html><head> <title>request域工具设置属性</title></head><body><% //这是request域工具保存的内容 request.setAttribute(\"大众name\"大众,\"大众zhongfucheng\"大众);%><%--跳转到1.jsp中--%><jsp:forward page=\"大众1.jsp\"大众/></body></html>企图在1.jsp中pageContext取出request存进去的属性

<%@ page contentType=\"大众text/html;charset=UTF-8\"大众 language=\"大众java\公众 %><html><head> <title>在page域工具获取属性</title></head><body><% //企图获取request域工具存进的属性 String value = (String) pageContext.getAttribute(\公众name\公众); System.out.println(value);%></body></html>效果如下:

pageContext实质上代表着编译后JSP的内容,pageContext还可以封装了访问其他域的方法!
上面的pageContext默认是page范围的,但pageContext工具重载了set、get、removeAttribute这三个方法getAttribute(String name,int scope)setAttribute(String name,Object value,int scope)removeAttribute(String name,int scope)多了一个设置域范围的一个参数,如果不指定默认便是page。
当然了,pageContext把request、session、application、page这几个域工具封装着了静态变量供我们利用。
PageContext.APPLICATION_SCOPEPageContext.SESSION_SCOPEPageContext.REQUEST_SCOPEPageContext.PAGE_SCOPE刚才我们没有利用重载方法的时候,利用pageContext是无法获取到request域工具设置的属性的。
现在我们利用重载后的方法看一下能不能获取得到!

<%@ page contentType=\"大众text/html;charset=UTF-8\"大众 language=\"大众java\"大众 %><html><head> <title>在page域工具获取request域工具的属性</title></head><body><% //利用重载的方法获取request域工具的属性 String value = (String) pageContext.getAttribute(\"大众name\公众,pageContext.REQUEST_SCOPE); System.out.println(value);%></body></html>效果:

pageContexst还有这么一个方法:findAttribute(String name)该方法会查找各个域的属性,从小到大开始探求!
也便是page—>request->session->application。
这个是EL表达式的事理!
,EL表达式后面会讲到!
我们用此方法看能不能查找出request域工具的属性吧!

<%@ page contentType=\公众text/html;charset=UTF-8\"大众 language=\"大众java\"大众 %><html><head> <title>利用findAttribute</title></head><body><% //利用findAttribute查找2.jsp中request域工具的属性 String value = (String) pageContext.findAttribute(\公众name\"大众); System.out.println(value);%></body></html>效果如下:

引入和跳转

PageContext类中定义了一个forward方法和两个include方法来分别简化和替代RequestDispatcher.forward方法和include方法。

pageContext.forward(String url)pageContext.include(String url)

4种属性范围

到目前为止,我们已经学了4种属性范围了。

page【只在一个页面中保存属性,跳转页面无效】requet【只在一次要求中保存属性,做事器跳转有效,浏览器跳转无效】session【在一个会话范围中保存属性,无论何种跳转均有效,关闭浏览器后无效】application【在全体做事器中保存,所有用户都可以利用】4个内置工具都支持以下的方法:setAttribute(String name, Object o )getAttribute(String name)removeAttribute(String name)

运用处景

request:如果客户向做事器发要求,产生的数据,用户看完就没用了,像这样的数据就存在request域,像新闻数据,属于用户看完就没用的session:如果客户向做事器发要求,产生的数据,用户用完了等一下子还有用,像这样的数据就存在session域中,像购物数据,用户须要看到自己购物信息,并且等一下子,还要用这个购物数据结帐servletContext:如果客户向做事器发要求,产生的数据,用户用完了,还要给其它用户用,像这样的数据就存在servletContext域中,像谈天数据

原文地址:https://dwz.cn/IYQPkkPN

作者:Java3y