前言
只有光头才能变强。
文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y
什么是JSP内置对象
JSP引擎在调用JSP对应的jspServlet时,会传递或创建9个与web开发相关的对象供jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用
细心的朋友会发现,我们没有在JSP页面上定义过out对象,却可以直接使用!其实out对象就是JSP内置对象之一。
九个内置对象:
out对象
out对象的API
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/d4e815d2d2f7e3d852ea023a6571f383.png)
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/dcd2560f7ef725c0b7143ce334fa44d5.png)
request
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/31078c1a9204e3c58a85981f8b55feb3.png)
response
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/547886af84d6d1056368b7d47633839a.png)
config
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/0528ffa44314ae20294bf96ff628871a.png)
session
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/556cb6644314fd1aea21112a34e80479.png)
注意:在page指令配置如下信息,session将不可使用
<%@page session="false" %>
application
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/f7a4b0fa9ccd49282037f1094f39c8db.png)
page
exception
<%@ 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>"java" errorPage="error.jsp" %>
<html>
<head>
<title></title>
</head>
<body>
<%--模拟空指针异常的错误--%>
<%
String sss = null;
sss.length();
%>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %><html><head> <title>错误页面</title></head><body><% out.println("程序抛出了异常:" + exception);%></body></html>"java" isErrorPage="true" %>
<html>
<head>
<title>错误页面</title>
</head>
<body>
<%
out.println("程序抛出了异常:" + exception);
%>
</body>
</html>
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/c6608f7bdf96082321137dde1c31fad6.png)
pageContext
pageContext是内置对象中最重要的一个对象,它代表着JSP页面编译后的内容(也就是JSP页面的运行环境)!
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>"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>
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/45c06959629c24f1796cce11e6165af3.jpeg)
pageContext作为域对象
<%@ 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>"java" %>
<html>
<head>
<title>使用page域对象</title>
</head>
<body>
<%
pageContext.setAttribute("name", "zhongfucheng");
%>
<%
String value = (String) pageContext.getAttribute("name");
System.out.println(value);
%>
</body>
</html>
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/55047870ca4ce35c3999a67524e76a5e.png)
<%@ 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>"java" %>
<html>
<head>
<title>request域对象设置属性</title>
</head>
<body>
<%
//这是request域对象保存的内容
request.setAttribute("name","zhongfucheng");
%>
<%--跳转到1.jsp中--%>
<jsp:forward page="1.jsp"/>
</body>
</html>
<%@ 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>"java" %>
<html>
<head>
<title>在page域对象获取属性</title>
</head>
<body>
<%
//企图获取request域对象存进的属性
String value = (String) pageContext.getAttribute("name");
System.out.println(value);
%>
</body>
</html>
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/c517e313c10d7ba372e451f45aabaff6.png)
<%@ 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>"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>
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/b89f66e1705f24715f605fa8f4e3a718.png)
<%@ 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>"java" %>
<html>
<head>
<title>使用findAttribute</title>
</head>
<body>
<%
//使用findAttribute查找2.jsp中request域对象的属性
String value = (String) pageContext.findAttribute("name");
System.out.println(value);
%>
</body>
</html>
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/643b4414c8f04b4968d9b600f3ffaaf7.png)
引入和跳转
PageContext类中定义了一个forward方法和两个include方法来分别简化和替代RequestDispatcher.forward方法和include方法。
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/644af18214a94d910b8c6302f2a90396.png)
4种属性范围
到目前为止,我们已经学了4种属性范围了。
page【只在一个页面中保存属性,跳转页面无效】
requet【只在一次请求中保存属性,服务器跳转有效,浏览器跳转无效】
session【在一个会话范围中保存属性,无论何种跳转均有效,关闭浏览器后无效】
application【在整个服务器中保存,所有用户都可以使用】
setAttribute(String name, Object o )
getAttribute(String name)
removeAttribute(String name)
应用场景
request:如果客户向服务器发请求,产生的数据,用户看完就没用了,像这样的数据就存在request域,像新闻数据,属于用户看完就没用的
session:如果客户向服务器发请求,产生的数据,用户用完了等一会儿还有用,像这样的数据就存在session域中,像购物数据,用户需要看到自己购物信息,并且等一会儿,还要用这个购物数据结帐
servletContext:如果客户向服务器发请求,产生的数据,用户用完了,还要给其它用户用,像这样的数据就存在servletContext域中,像聊天数据
最后
乐于输出干货的Java技术公众号:Java3y。公众号内有200多篇原创技术文章、海量视频资源、精美脑图,不妨来关注一下!
![640](https://i-blog.csdnimg.cn/blog_migrate/4d6c064f75740d9ba93b0ebd0a25a4de.png)