一. Jsp的9大内置对象
1. 所谓内置对象, 就是在jsp页面中不用创建, 可以直接使用的对象。
2. Jsp的9大内置对象如下:
2.1. javax.servlet.http.HttpServletRequest request
2.2. javax.servlet.http.HttpServletResponse response
2.3. javax.servlet.jsp.PageContext pageContext;
2.4. javax.servlet.http.HttpSession session;
2.5. java.lang.Throwable exception =
org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
2.6. javax.servlet.ServletContext application;
2.7. javax.servlet.ServletConfig config;
2.8. javax.servlet.jsp.JspWriter out = null;
2.9. java.lang.Object page = this;
3. 在Jsp代码里, Alt+/提示, 会显示内置对象, 下面这个没有exception这个内置对象
4. 只有在isErrorPage为true的时候, 才会有exception这个内置对象
二. Jsp的4个是作用域对象
1. Jsp的4个是作用域对象如下:
1.1. javax.servlet.jsp.PageContext pageContext;
1.2. javax.servlet.http.HttpServletRequest request
1.3. javax.servlet.http.HttpSession session;
1.4. javax.servlet.ServletContext application;
2. 作用域对象可以存值和取值, 它们的取值范围有限定。
3. 作用域范围大小: pageContext-->request-->session-->application。
4. 新建一个名称为Jsp9InnerObject的Web工程
5. 在WebContent下新建一个index.html
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>同一页面获取Jsp的4个作用域的值</title>
</head>
<body>
<%
pageContext.setAttribute("pageContext", "我是pageContext内置对象");
request.setAttribute("request", "我是request内置对象");
session.setAttribute("session", "我是session内置对象");
application.setAttribute("application", "我是application内置对象");
%>
<%=pageContext.getAttribute("pageContext") %><br/>
<%=request.getAttribute("request") %><br/>
<%=session.getAttribute("session") %><br/>
<%=application.getAttribute("application") %><br/>
</body>
</html>
6. 部署运行, 同一页面4个值都有
7. 新建一个forward.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>一次请求获取Jsp的4个作用域的值</title>
</head>
<body>
<%=pageContext.getAttribute("pageContext") %><br/>
<%=request.getAttribute("request") %><br/>
<%=session.getAttribute("session") %><br/>
<%=application.getAttribute("application") %><br/>
</body>
</html>
8. 修改index.jsp, 然服务器帮我们找到forward.jsp
9. 部署运行, pageContext的值为null
10. 新建一个sendRedirect.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>二次请求获取Jsp的4个作用域的值</title>
</head>
<body>
<%=pageContext.getAttribute("pageContext") %><br/>
<%=request.getAttribute("request") %><br/>
<%=session.getAttribute("session") %><br/>
<%=application.getAttribute("application") %><br/>
</body>
</html>
11. 修改index.jsp, 让浏览器发送二次请求找到sendRedirect.jsp
12. 部署运行, pageContext和request的值为null
13. 关闭浏览器, 再次请求forward.jsp, pageContext、request和session的值为null
14. pageContext作用域仅限于当前的页面。
15. request作用域仅限于一次请求。
16. session作用域限于一次会话(打开浏览器访问到关闭浏览器是一次会话)。
17. application整个工程都可以访问, 服务器关闭后就不能访问了。
18. pageContext还可以获取到其他八个内置对象:
三. out对象和response对象
1. out对象向页面输出内容
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>out对象</title>
</head>
<body>
<%out.write("这是使用out对象输出的内容");%>
</body>
</html>
2. response对象向页面输出内容
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>response对象</title>
</head>
<body>
<%response.getWriter().write("这是使用response对象输出的内容");%>
</body>
</html>