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

💖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 的页面代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="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="Content-Type" content="text/html; charset=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");
        %>
<%-- 测试当前页面作用域 --%>
<%=pageContext.getAttribute("key") %><br/>
<%=request.getAttribute("key") %><br/>
<%=session.getAttribute("key") %><br/>
<%=application.getAttribute("key") %><br/>
<%
// 测试 request 作用域
// request.getRequestDispatcher("/context2.jsp").forward(request, response);
        “ 玩转 ” Java  系列
        %>
</body>
</html>

2. context2.jsp 的页面代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="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="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
这是 context2 页面 <br/>
<%=pageContext.getAttribute("key") %><br/>
<%=request.getAttribute("key") %><br/>
<%=session.getAttribute("key") %><br/>
<%=application.getAttribute("key") %><br/>
</body>
</html>

✨测试

测试 pageContext 作用域步骤:
直接访问 context1.jsp 文件。

测试 request 作用域步骤:
1.在 context1.jsp 文件中添加转发到 context2.jsp(有数据)。
2.直接访问 context2.jsp 文件 (没有数据)。

测试 session 作用域步骤:
1.访问完 context1.jsp 文件。
2.关闭浏览器。但是要保持服务器一直开着。
3.打开浏览器,直接访问 context2.jsp 文件。

测试 application 作用域步骤:
1.访问完 context1.jsp 文件,然后关闭浏览器。
2.停止服务器。再启动服务器。
3.打开浏览器访问 context2.jsp 文件。

💖jsp中out流输出流和response.getwriter()输出流

response中表示响应,我们经常用于设置返回给客户端的内容(输出)
。out也是给用户做输出使用的。

注意:out方法需要导入jsp的jar包,不然没有这些方法。
response方法需要导入servlet的jar包。

✨演示

out 和 response 的 writer 的区别演示。

<%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="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="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
// out 输出
        out.write("这是 out 的第一次输出<br/>");
// out flush 之后。会把输出的内容写入 writer 的缓冲区中
        out.flush();
// 最后一次的输出,由于没有手动 flush,会在整个页面输出到客户端的时候,自动写入到 writer
        缓冲区
        out.write("这是 out 的第二次输出<br/>");
// writer 的输出
        response.getWriter().write("这是 writer 的第一次输出<br/>");
        response.getWriter().write("这是 writer 的第二次输出<br/>");
        %>
</body>
</html>

在浏览器查看运行结果
在这里插入图片描述

✨图解out流和writer流的两个缓冲区如何工作

在这里插入图片描述
当jsp页面中的所有代码执行完成之后会做以下两个操作:
1、执行out.flush()操作,会把out缓冲区中的数据追加写入到response缓冲末尾。2、会执行response的刷新操作,把全部数据写给客户端。

由于jsp翻译之后,底层源代码都是使用out来进行输出,所以一般情况下,我们在jsp页面中统一使用out进行输出。避免打乱页面输出内容的顺序。
out.weote()输出字符串没有问题。
out.pringt()输出任何数据都没有问题(都转换成为字符串后调用的write)。

深入源码,浅出结论:在jsp页面,可以统一使用out.print()来进行输出。

  • 41
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 44
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

几分醉意.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值