文章目录
- 💖jsp九大内置对象
- 💖jsp四大域对象
- 💖jsp中out流输出流和response.getwriter()输出流
- ✨演示
- ✨图解out流和writer流的两个缓冲区如何工作
💖jsp九大内置对象
我们打开翻译后的 java 文件。查看_jspService
方法。
request对象:
请求对象,可以获取请求信息
response对象:
响应对象。可以设置响应信息
pageContext对象:
当前页面上下文对象。可以在当前上下文保存属性信息
session对象:
会话对象。可以获取会话信息。
exception对象:
异常对象只有在 jsp 页面的 page 指令中设置 isErrorPage=“true” 的时候才会存在
application对象:
ServletContext 对象实例,可以获取整个工程的一些信息。
config对象:
ServletConfig 对象实例,可以获取 Servlet 的配置信息
out对象:
输出流。
page对象:
表示当前 Servlet 对象实例(无用,用它不如使用 this 对象)。
✨使用方法
九大内置对象 , 都是我们可以在 【 代码脚本 】 中或 【 表达式脚本 】 中直接使用的对象。
💖jsp四大域对象
四大域对象经常用来保存数据信息
。
pageContext
可以保存数据在同一个 jsp 页面中使用。
request
可以保存数据在同一个 request
对象中使用。经常用于在转发的时候传递数据
。
session
可以保存在一个会话
中使用。
application(ServletContext)
就是 ServletContext
对象。
✨代码实战
四个作用域的测试代码:
新建两个 jsp 页面。分别取名叫:context1.jsp,context2.jsp
1. context1.jsp 的页面代码如下:
<%&#64; page language&#61;"java" contentType&#61;"text/html; charset&#61;UTF-8"
pageEncoding&#61;"UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv&#61;"Content-Type" content&#61;"text/html; charset&#61;UTF-8">
<title>Insert title here</title>
</head>
<body>
这是 context1 页面<br/>
<%
pageContext.setAttribute("key", "pageContext-value");
request.setAttribute("key", "request-value");
session.setAttribute("key", "session-value");
application.setAttribute("key", "application-value");
%>
<%-- 测试当前页面作用域 --%>
<%&#61;pageContext.getAttribute("key") %><br/>
<%&#61;request.getAttribute("key") %><br/>
<%&#61;session.getAttribute("key") %><br/>
<%&#61;application.getAttribute("key") %><br/>
<%
“ 玩转 ” Java 系列
%>
</body>
</html>
2. context2.jsp 的页面代码如下&#xff1a;
<%&#64; page language&#61;"java" contentType&#61;"text/html; charset&#61;UTF-8"
pageEncoding&#61;"UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv&#61;"Content-Type" content&#61;"text/html; charset&#61;UTF-8">
<title>Insert title here</title>
</head>
<body>
这是 context2 页面 <br/>
<%&#61;pageContext.getAttribute("key") %><br/>
<%&#61;request.getAttribute("key") %><br/>
<%&#61;session.getAttribute("key") %><br/>
<%&#61;application.getAttribute("key") %><br/>
</body>
</html>
✨测试
测试 pageContext
作用域步骤&#xff1a;
直接访问 context1.jsp 文件。
测试 request
作用域步骤&#xff1a;
1.在 context1.jsp 文件中添加转发到 context2.jsp&#xff08;有数据&#xff09;。
2.直接访问 context2.jsp 文件 &#xff08;没有数据&#xff09;。
测试 session
作用域步骤&#xff1a;
1.访问完 context1.jsp 文件。
2.关闭浏览器。但是要保持服务器一直开着。
3.打开浏览器&#xff0c;直接访问 context2.jsp 文件。
测试 application
作用域步骤&#xff1a;
1.访问完 context1.jsp 文件&#xff0c;然后关闭浏览器。
2.停止服务器。再启动服务器。
3.打开浏览器访问 context2.jsp 文件。
&#x1f496;jsp中out流输出流和response.getwriter()输出流
response中表示响应&#xff0c;我们经常用于设置返回给客户端的内容&#xff08;输出&#xff09;
。out也是给用户做输出使用的。
注意&#xff1a;out方法需要导入jsp的jar包&#xff0c;不然没有这些方法。
response方法需要导入servlet的jar包。
✨演示
out 和 response 的 writer 的区别演示。
<%&#64; page language&#61;"java" contentType&#61;"text/html; charset&#61;UTF-8"
pageEncoding&#61;"UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv&#61;"Content-Type" content&#61;"text/html; charset&#61;UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
out.write("这是 out 的第一次输出
");
out.flush();
缓冲区
out.write("这是 out 的第二次输出
");
response.getWriter().write("这是 writer 的第一次输出
");
response.getWriter().write("这是 writer 的第二次输出
");
%>
</body>
</html>
在浏览器查看运行结果
✨图解out流和writer流的两个缓冲区如何工作
当jsp页面中的所有代码执行完成之后会做以下两个操作&#xff1a;
1、执行out.flush()操作&#xff0c;会把out缓冲区中的数据追加写入到response缓冲末尾。2、会执行response的刷新操作&#xff0c;把全部数据写给客户端。
由于jsp翻译之后&#xff0c;底层源代码都是使用out
来进行输出&#xff0c;所以一般情况下&#xff0c;我们在jsp页面中统一使用out
进行输出。避免打乱页面输出内容的顺序。
out.weote()
输出字符串没有问题。
out.pringt()
输出任何数据都没有问题&#xff08;都转换成为字符串后调用的write&#xff09;。
深入源码&#xff0c;浅出结论&#xff1a;在jsp页面&#xff0c;可以统一使用out.print()来进行输出。