%>
out对象缓冲区的方法及描述
| 方法 | 方法描述 |
| — | — |
| void clear() | 清除输出缓冲区的内容。若缓冲区为空,则产生IOException异常 |
| void clearBuffer() | 清除输出缓冲区的内容。若缓冲区为空,不会产生IOException异常 |
| void flush() | 直接将目前暂存于缓冲区的数据刷新输出 |
| void close() | 关闭输出流。流一旦被关闭,则不能再使用out对象做任何操作。 |
| int getBufferSize() | 获取目前缓冲区的大小(KB) |
| int getRemaining() | 获取目前使用后还剩下的缓冲区大小(KB) |
| boolean isAutoFlush() | 返回true表示缓冲区满时会自动刷新输出;false表示缓冲区满时不会自动清除并产生异常处理 |
-
向out对象的输出流中写入数据时,数据会先被存储在缓冲区中,在JSP默认配置下,缓冲区满时会被自动刷新输出。
-
JSP页面通过page指令的autoFlush属性和buffer属性配置缓冲区参数:
• autoFlush属性表示是否自动刷新,默认值为true;
• buffer属性表示缓冲区大小,默认值为8kb。 在此配置下,out 对象在输出缓冲区内容每达到8kb后,会自动刷新输出而不会产生异常处理。
演示:在取消自动刷新功能时,页面输出信息超过缓冲区指定大小的情况和使用out.flush()刷新方法后的情况。
创建outExample.jsp
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8” autoFlush=“false” buffer=“2kb”%>
<%
for (int i = 0; i < 10000; i++) {
out.println(“**************”);
//out.flush();
}
%>
运行
3.与Context有关的内置对象
与 Context(上下文)有关的内置对象包括 session、application 和pageContext,其中:
-
session 对象表示浏览器与服务器的会话上下文环境;
-
application 对象表示应用程序上下文环境;
-
pageContext 对象表示当前 JSP页面下文环境。
(1)session
-
session 对象即会话对象,表示浏览器与服务器之间的一次会话。
-
一次会话的含义是:从客户端浏览器连接服务器开始,在关闭浏览器或主动退出后,会话结束。这个过程可以包含浏览器与服务器之间的多次请求与响应。
-
session 对象的类型为 javax.servlet.http.HttpSession , session对象具有 HttpSession接口的所有方法,其常用方法如下:
• void setAttribute(String name, Object value) :以名/值对的方式存储session
• Object getAttribute(String name) :根据属性名获取属性值;
• void invalidate() :使 session 对象失效,释放所有的属性空间。
演示:
创建login.jsp
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
<%-- 错误信息判断输出 --%>
<%
String error = (String) request.getAttribute(“eMess”);
if (error != null && !error.equals(“”)) {
%>
<%=error%>
<%
}
%>
用户名:
密 码:
创建loginParameter.jsp
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
<%
request.setCharacterEncoding(“utf-8”);
String uName = request.getParameter(“userName”);
String uPassword = request.getParameter(“userPassword”);
out.print(“参数userName的值为:” + uName);
out.print(“参数userPassword的值为:” + uPassword);
%>
创建loginValidate.jsp
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
<%
request.setCharacterEncoding(“utf-8”);
String uName = request.getParameter(“userName”);
String uPassword = request.getParameter(“userPassword”);
StringBuffer errorMsg = new StringBuffer();
if (“”.equals(uName)) {
errorMsg.append(“用户名不能为空!
”);
}
if (“”.equals(uPassword)) {
errorMsg.append(“密码不能为空!
”);
} else if (uPassword.length() < 6) {
errorMsg.append(“密码长度不能小于6位
”);
}
//判断是否登陆成功
if (errorMsg.toString().equals(“”)) {
//out.print(“登陆成功”);
session.setAttribute(“userName”, uName);
response.sendRedirect(“main.jsp”);
} else {
request.setAttribute(“eMess”, errorMsg.toString());
%>
<jsp:forward page=“login.jsp”></jsp:forward>
<%
}
%>
创建main.jsp
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
亲,欢迎您<%=(String) session.getAttribute(“userName”)%>。
运行
(2)application
-
application 对象即应用程序上下文对象,表示当前应用程序运行环境,用以获取应用程序上下文环境中的信息;
-
application 对象在容器启动时实例化,在容器关闭时销毁。作用域为整个 Web容器的生命周期;
-
application 对象实现了 javax.servlet.ServletContext 接口,具有ServletContext 接口的所有功能。application 对象常用方法如下:
• void setAttribute(String name,Object value) :以名/值对的方式存储application 域属性;
• Object getAttribute(String name):根据属性名获取属性值;
• void removeAttribute(String name) :根据属性名从 application域中移除属性。
演示:使用application对象实现简单的页面留言板
创建MessageBoard.jsp
<%@page import=“java.util.Vector”%>
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
输入您的名字:
输入您的留言:
<%
//解决请求乱码问题
request.setCharacterEncoding(“utf-8”);
//获取form表单提交数据
String userName = request.getParameter("u
必看视频!获取2024年最新Java开发全套学习资料 备注Java
serName");
String message = request.getParameter(“message”);
//从application获取保存信息的集合
Vector bookGuest = (Vector) application.getAttribute(“messageBook”);
//判断是否已有留言
if (bookGuest == null) {
bookGuest = new Vector<>();
}
//保存该次用户留言
if (userName != null && message != null) {
String info = userName + “#” + message;
bookGuest.add(info);
application.setAttribute(“messageBook”, bookGuest);
}
//遍历集合,输出所有留言
if (bookGuest.size() > 0) {
for (String mess : bookGuest) {
String[] arr = mess.split(“#”);
out.print(“
姓名为:” + arr[0] + “
留言:” + arr[1] + “
}
} else {
out.print(“您还没有留言”);
}
%>
运行
(3)pageContext
-
pageContext 即页面上下文对象,表示当前页面运行环境,用以获取当前 JSP 页面的相关信息;
-
pageContext 对象作用范围为当前 JSP页面;
-
pageContext对象类型为javax.servlet.jsp.PageContext,pageContext对象可以访问当前JSP页面所有内置对象,访问方法如下表:
| 方法 | 方法描述 |
| — | — |
| ServletRequest getRequest() | 获取当前JSP页面的请求对象 |
| ServletResponse getResponse() | 获取当前JSP页面的响应对象 |
| HttpSession getSession() | 获取和当前JSP页面有联系的会话对象 |
| ServletConfig getServletConfig() | 获取当前JSP页面的ServletConfig对象 |
| ServletContext getServletContext() | 获取当前JSP页面的运行环境对象 |
| Object getPage() | 获取当前JSP页面的Servlet实体 |
| Exception getException() | 获取当前JSP页面的异常对象,不过此页面的page指令的isErrorPage属性要设置为true |
| JspWriter getOut() | 获取当前JSP页面的输出流 |
pageContext 对象 存取域 属性的方法及描述
| 方法 | 方法描述 |
| — | — |
| Object getAttribute(String name, int scope) | 获取范围为scope,名为name的属性对象 |
| void setAttribute(String name, Object value, int scope) | 以名/值对的方式存储scope范围域属性 |
| void removeAttribute(String name, int scope) | 从scope范围移除名为name的属性 |
| Enumeration getAttributeNamesInScope(int scope) | 从scope范围中获取所有属性的名称 |
- 存取域属性的方法 setAttribute () 中 scope 参数被定义为四个常量,分别代表四种作用域范围
• PAGE_SCOPE = 1 代表page 范围;
• REQUEST_SCOPE = 2 代表request 范围;
• SESSION_SCOPE = 3 代表session 范围;
• APPLICATION_SCOPE = 4 代表application范围.
4.与Servlet 有关的内置对象
与Servlet有关的内置对象,它们包括page对象和config对象。Page对象表示JSP翻译后的Servlet对象; config 对象表示JSP翻译后的Servlet的ServletConfig对象。
(1)page
page 对象即 this,代表 JSP 本身,更准确地说它代表 JSP 被翻译后的Servlet ,因此它可以调用 Servlet 类所定义的方法。 page 对象的类型为 javax.servlet.jsp.HttpJspPage ,在实际应用中, page 对象很少在 JSP 中使用。
演示:
page对象获取页面page指令的info属性指定的页面说明信息
创建pageExample.jsp
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8” info=“page内置对象的使用”%>
<%=this.getServletInfo()%>
<%=((HttpJspPage) page).getServletInfo()%>
运行
(2)config
-
config 对象即页面配置对象,表示当前 JSP 页面翻译后的 Servlet 的ServletConfig 对象,存放着一些初始的数据结构 。
-
config 对象实现于 java.servlet.ServletConfig 接口。config 对象和 page对象一样很少被用到。
5.与Error有关的内置对象
与 Error 有关的内置对象只有一个成员: exception 对象。当 JSP 网页有错误时会产生异常, exception 对象就用来对这个异常做处理。
(1)exception
-
exception 对象即异常对象,表示 JSP 页面产生的异常 。
-
如果 一个 JSP 页面要应用此对象,必须将此页面中 page 指令的isErrorPage 属性值设为 true ,否则无法编译。
-
exception 对象是 java.lang.Throwable的对象。
6.JSP的四种作用域
对象的生命周期和可访问性称为作用域(scope),在 JSP 中有四种作用域:页面域、请求域、会话域和应用域。
四种作用域的生命周期和可访问性介绍如下 :
-
页面域(pageContex),页面域的生命周期是指页面执行期间。存储在页面域的对象只对于它所在页面是可访问的。
-
请求域( request ),请求域的生命周期是指一次请求过程,包括请求被转发(forward)或者被包含(include)的情况。存储在请求域中的对象只有在此次请求过程中才可以被访问。
-
会话域(session),会话域的生命周期是指某个客户端与服务器所连接的时间;客户端在第一次访问服务器时创建会话,在关闭浏览器或主动退出后,会话结束。存储在会话域中的对象在整个会话期间(可能包含多次请求)都可以被访问。
-
应用域(application),应用域的生命周期是指从服务器开始执行服务到服务器关闭为止,是四个作用域中时间最长的。存储在应用域中的对象在整个应用程序运行期间可以被所有 JSP和 Servlet 共享访问,在使用时要特别注意存储数据的大小和安全性,否则可能会造成服务器负载过重和线程安全性问题。
总结
虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。
架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。
如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。
下 :
-
页面域(pageContex),页面域的生命周期是指页面执行期间。存储在页面域的对象只对于它所在页面是可访问的。
-
请求域( request ),请求域的生命周期是指一次请求过程,包括请求被转发(forward)或者被包含(include)的情况。存储在请求域中的对象只有在此次请求过程中才可以被访问。
-
会话域(session),会话域的生命周期是指某个客户端与服务器所连接的时间;客户端在第一次访问服务器时创建会话,在关闭浏览器或主动退出后,会话结束。存储在会话域中的对象在整个会话期间(可能包含多次请求)都可以被访问。
-
应用域(application),应用域的生命周期是指从服务器开始执行服务到服务器关闭为止,是四个作用域中时间最长的。存储在应用域中的对象在整个应用程序运行期间可以被所有 JSP和 Servlet 共享访问,在使用时要特别注意存储数据的大小和安全性,否则可能会造成服务器负载过重和线程安全性问题。
总结
虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。
架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。
如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。
[外链图片转存中…(img-vfm1ifF0-1716450950580)]