一、jsp 九大内置对象
jsp 中的内置对象,是指 Tomcat 在翻译 jsp 页面成为 Servlet 源代码后,内部提供的九大对象,叫内置对象。
二、jsp 四大域对象
- 域对象是可以像
Map
一样存取数据的对象。四个域对象功能一样,不同的是它们对数据的存取范围。 - 虽然四个域对象都可以存取数据。在使用上它们是有优先顺序的。四个域在使用的时候,优先顺序分别是,他们从小到大的范围的顺序:
pageContext ====>>> request ====>>> session ====>>> application
scope.jsp
页面
<body>
<h1>这是scope.jsp页面</h1>
<%
pageContext.setAttribute("key","pageContext");
request.setAttribute("key","request");
session.setAttribute("key","session");
application.setAttribute("key","application");
%>
pageContext域的值:<%=pageContext.getAttribute("key")%> <br>
request域的值:<%=request.getAttribute("key")%> <br>
session域的值:<%=session.getAttribute("key")%> <br>
application域的值:<%=application.getAttribute("key")%> <br>
</body>
输出结果:
如果从scope.jsp
中重定向到scope1.jsp
<%
request.getRequestDispatcher("/scope1.jsp").forward(request,response);
%>
此时pageContext
无法获取值,因为已经不是当前页面,超出了域范围。
如果刷新一下scope1.jsp
页面,相当于一次新的请求,request
值也会无法获取
如果关闭浏览器重新打开访问,相当于开启了一个新的会话,session
的值也无法获取
如果重新启动服务器,application
的值也会无法获取
三、jsp中的out输出和response.getWrite输出的区别
<body>
<%
response.getWriter().write("response输出1 <br/>");
response.getWriter().write("response输出2 <br/>");
out.write("out输出1 <br/>");
out.write("out输出2 <br/>");
%>
</body>
response
中表示响应,经常用于设置返回给客户端的内容(输出), out 也是给用户做输出使用的。
由于 jsp
翻译之后,底层源代码都是使用 out
来进行输出,所以一般情况下,在 jsp
页面中统一使用 out
来进行输出。避免打乱页面输出内容的顺序。
out.write()
输出字符串没有问题 。但是输出数值会有问题,会把数值直接强转成char
类型,也就是对应的ASCII码,存在字符数组writeBuffer
中,输出时就不是原来的数值了。
public void write(int c) throws IOException {
synchronized (lock) {
if (writeBuffer == null){
writeBuffer = new char[WRITE_BUFFER_SIZE];
}
writeBuffer[0] = (char) c;
write(writeBuffer, 0, 1);
}
}
out.print()
输出任意数据都没有问题(都转换成为字符串后调用的 write()
输出)