热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

jsp九大内置对象和四大域对象

文章目录💖jsp九大内置对象✨使用方法💖jsp四大域对象✨代码实战✨测试💖jsp中out流输出流和response.getwrite




文章目录


  • 💖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/>
<%
//设置 page 域的数据
pageContext.setAttribute("key", "pageContext-value");
//设置 request 域的数据
request.setAttribute("key", "request-value");
//设置 session 域的数据
session.setAttribute("key", "session-value");
//设置 application 域的数据
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/>
<%
// 测试 request 作用域
// request.getRequestDispatcher("/context2.jsp").forward(request, response);
“ 玩转 ” 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 输出
out.write("这是 out 的第一次输出
"
);
// out flush 之后。会把输出的内容写入 writer 的缓冲区中
out.flush();
// 最后一次的输出&#xff0c;由于没有手动 flush&#xff0c;会在整个页面输出到客户端的时候&#xff0c;自动写入到 writer
缓冲区
out.write("这是 out 的第二次输出
"
);
// writer 的输出
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()来进行输出。







推荐阅读
author-avatar
我恨数学忆万年丶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有