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

文章目录

  • jsp九大内置对象
    • ✨使用方法
  • jsp四大域对象
    • ✨代码实战
    • ✨测试
  • jsp中out流输出流和response.getwriter()输出流
    • ✨演示
    • ✨图解out流和writer流的两个缓冲区如何工作

jsp九大内置对象

我们打开翻译后的 java 文件。查看_jspService 方法。

jsp九大内置对象和四大域对象_第1张图片

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 的第一次输出
"
); // out flush 之后。会把输出的内容写入 writer 的缓冲区中 out.flush(); // 最后一次的输出,由于没有手动 flush,会在整个页面输出到客户端的时候,自动写入到 writer 缓冲区 out.write("这是 out 的第二次输出
"
); // writer 的输出 response.getWriter().write("这是 writer 的第一次输出
"
); response.getWriter().write("这是 writer 的第二次输出
"
); %> </body> </html>

在浏览器查看运行结果
jsp九大内置对象和四大域对象_第2张图片

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

jsp九大内置对象和四大域对象_第3张图片
当jsp页面中的所有代码执行完成之后会做以下两个操作:
1、执行out.flush()操作,会把out缓冲区中的数据追加写入到response缓冲末尾。2、会执行response的刷新操作,把全部数据写给客户端。

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

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

你可能感兴趣的:(JavaWab,java,servlet,服务器,前端)