Javaweb 学习记录—JSP内置对象

Javaweb 学习记录—JSP内置对象


1.内置对象简介

JSP内置对象也称隐含对象,是指在JSP页面中,不用声明就可以在脚本和表达式中直接使用的对象。

JSP内置对象也称隐含对象,它提供了Web开发常用的功能,为了提高开发效率,JSP 规范预定义了内置对象。

JSP内置对象有如下特点:

  • 内置对象由 Web 容器自动载入,不需要实例化;

  • 内置对象通过 Web容器来实现和管理;

  • 在所有的 JSP 页面中,直接调用内置对象都是合法的。

JSP 规范定义了9种内置对象

| 对象名称 | 类型 | 功能说明 |

| — | :-: | — |

| request | javax.servlet.http.HttpServletRequest | 请求对象,提供客户端HTTP请求数据的访问 |

| response | javax.servlet.http.HttpServletResponse | 响应对象,用来向客户端输出响应 |

| out | javax.servlet.jsp.JspWriter | 输出对象,提供对输出流的访问 |

| session | javax.servlet.http.HttpSession | 会话对象,用来保存服务器与每个客户端会话过程中的信息 |

| application | javax.servlet.ServletContext | 应用程序对象,用来保存整个应用环境的信息 |

| pageContext | javax.servlet.jsp.PageContext | 页面上下文对象,用于存储当前JSP页面的相关信息 |

| config | javax.servlet.ServletConfig | 页面配置对象,JSP页面的配置信息对象 |

| page | javax.servlet.jsp.HttpJspPage | 当前JSP页面对象,即this |

| exception | java.lang.Throwable | 异常对象,用于处理JSP页面中的错误 |

2.与 Input/Output 有关的内置对象

与 Input/Output (输入/ / 输出)有关的隐含对象包括: request 对象、response 对象和 out 对象,这类对象主要用来作为客户端和服务器间通信的桥梁。

  • request 对象表示客户端对服务器端发送的请求;

  • response 对象表示服务器对客户端的响应;

  • out 对象负责把处理结果输出到客户端。

(1)request

  • request 对象即请求对象,表示客户端对服务器发送的请求 , 主要用于接受客户端通过 HTTP 协议传送给服务器端的数据;

  • request 对象的类型为 javax.servlet.http.HttpServletRequest ,与Servlet 中的请求对象为同一对象;

  • request 对象的作用域为一次 request请求。

  • request 对象拥有 HttpServletRequest 接口的所有方法,其常用方法如下:

• void setCharacterEncoding(String charset) :设置请求体参数的解码字符集;

• String getParameter(String name) :根据参数名获取单一参数值;

• String[] getParameterValues(String name) :根据参数名获取一组参数值;

• void setAttribute(String name,Object value) :以名/ / 值的方式存储请求域属性;

• Object getAttribute(String name):根据属性名获取存储的对象数据。

(2)response

  • response 对象即响应对象,表示服务器对客户端的响应。主要用来将JSP 处理后的结果传回到客户端。 response 对象类型为javax.servlet.http.HttpServletResponse ,与 Servlet 中的响应对象为同一对象。

  • response 对象拥有 HttpServletResponse 接口的所有方法,其常用的方法如下:

• void setContentType(String name):设置响应内容的类型和字符编码;

• void sendRedirect(String url) :重定向到指定的 URL 资源。

(3)out

  • out对象即输出对象,用来控制管理输出的缓冲区( buffer )和输出流( output stream)向客户端页面输出数据。

  • out对象类型为javax.servlet.jsp.JspWriter,与 HttpServletResponse接口的getWriter() 方法获得的PrintWriter对象功能相同,并都由java.io.Writer类继承而来。

  • out 对象的方法可以分为两类:

• 数据的输出;

• 缓冲区的处理。

out内置对象

| 方法 | 描述 |

| — | — |

| print/println(基本数据类型) | 输出一个基本数据类型的值 |

| print/println(Object obj) | 输出一个对象的引用地址 |

| print/println(String str) | 输出一个字符串的值 |

| newLine() | 输出一个换行符 |

示例:

<%

int i=0;

java.util.Date date=new java.util.Date();

out.print(i);

out.newLine();

out.println(date);

%>

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”%>

Insert title here

<%

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”%>

Insert title here

<%-- 错误信息判断输出 --%>

<%

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”%>

Insert title here

<%

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”%>

Insert title here

<%

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”%>

Insert title here

亲,欢迎您<%=(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”%>

Insert title here

输入您的名字:

输入您的留言:

<%

//解决请求乱码问题

request.setCharacterEncoding(“utf-8”);

//获取form表单提交数据

String userName = request.getParameter(“userName”);

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内置对象的使用”%>

Insert title here

<%=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 共享访问,在使用时要特别注意存储数据的大小和安全性,否则可能会造成服务器负载过重和线程安全性问题。

JSP的四种作用域分别对应pageContex 、request 、session和application四个内置对象。四个内置对象都通过setAttribute (String name ,Object value) 方法来存储属性,通过getAttribute (String name) 来获取属性,从而实现属性对象在不同作用域的数据分享。

演示:

创建visitCount.jsp

<%@ page language=“java” contentType=“text/html; charset=UTF-8”

pageEncoding=“UTF-8”%>

Insert title here

<%

int pageCount = 1;

int sessionCount = 1;

int applicationCount = 1;

//页面域计数

if (pageContext.getAttribute(“pageCount”) != null) {

pageCount = (Integer) pageContext.getAttribute(“pageCount”);

pageCount++;

}

pageContext.setAttribute(“pageCount”, pageCount);

//会话域计数

if (session.getAttribute(“sessionCount”) != null) {

sessionCount = (Integer) session.getAttribute(“sessionCount”);

sessionCount++;

}

session.setAttribute(“sessionCount”, sessionCount);

//应用域计数

if (application.getAttribute(“applicationCount”) != null) {

applicationCount = (Integer) application.getAttribute(“applicationCount”);

applicationCount++;

}

application.setAttribute(“applicationCount”, applicationCount);

%>

页面域计数:<%=pageCount%>

会话域计数:<%=sessionCount%>

应用域计数:<%=applicationCount%>

运行

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在 Web 应用开发时需要仔细考虑这些对象的作用域,按照对象的需要赋予适合的作用域,不要过大也不要过小。如果为一个只在页面内使用的对象赋予了应用域,这样显然毫无意义。同样,如果访问对象具有太多的限制,那么也会使应用变得更加复杂。因此需要仔细权衡每个对象及其用途,从而准确推断其作用域。

7.总结

  • JSP 内置对象是指不用声明就可以在 JSP 页面的脚本和表达式中直接使用的对象。

  • request 对象即请求对象,表示客户端向服务器端发送的请求。 request 对象的类型为 javax.servlet.http.HttpServletRequest。

  • response 对象即响应对象,表示服务器对客户端的响应。 response 对象类型为 javax.servlet.http.HttpServletResponse。

  • out 对象即输出对象,用来控制管理输出的缓冲区(buffer)和输出流(output stream)向客户端页面输出数据。out 对象类型为javax.servlet.jsp.JspWriter。

  • session 对象即会话对象,表示浏览器与服务器之间的一次会话。 session 对象的类型为 javax.servlet.http.HttpSession 。

  • application 对象即应用程序上下文对象,表示当前应用程序运行环境,用以获取应用程序上下文环境中的信息。 application 对象类型为javax.servlet.ServletContext 。

  • pageContext 即页面上下文对象,表示当前页面运行环境,用以获取当前 JSP页面的相关信息。 pageContext 对象类型为 javax.servlet.jsp.PageContext 。

  • page 对象即 this ,代表 JSP 本身,更准确地说它代表 JSP 被翻译后的 Servlet ,因此它可以调用 Servlet 类所定义的方法。 page 对象的类型为javax.servlet.jsp.HttpJspPage 。

  • config 对象即页面配置对象,表示当前 JSP 页面翻译后的 Servlet 的ServletConfig 对象,存放着一些初始的数据结构。 config 对象类型为java.servlet.ServletConfig 。

  • exception 对象即异常对象,表示 JSP 页面产生的异常。 exception 对象是java.lang.Throwable。

  • JSP 中有四种作用域:页面域、请求域、会话域和应用域。

  • SP 的四种作用域分别对应 pageContex 、 request 、 session 和 application 四个内置对象。四个内置对象都通过 setAttribute(String name,Objectvalue) 方法来存储属性,通过 getAttribute(String name) 来获取属性,从而实现属性对象在不同作用域的数据分享。

最后

小编这些年深知大多数初中级工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你需要这些资料,⬅专栏获取

  • pageContext 即页面上下文对象,表示当前页面运行环境,用以获取当前 JSP页面的相关信息。 pageContext 对象类型为 javax.servlet.jsp.PageContext 。

  • page 对象即 this ,代表 JSP 本身,更准确地说它代表 JSP 被翻译后的 Servlet ,因此它可以调用 Servlet 类所定义的方法。 page 对象的类型为javax.servlet.jsp.HttpJspPage 。

  • config 对象即页面配置对象,表示当前 JSP 页面翻译后的 Servlet 的ServletConfig 对象,存放着一些初始的数据结构。 config 对象类型为java.servlet.ServletConfig 。

  • exception 对象即异常对象,表示 JSP 页面产生的异常。 exception 对象是java.lang.Throwable。

  • JSP 中有四种作用域:页面域、请求域、会话域和应用域。

  • SP 的四种作用域分别对应 pageContex 、 request 、 session 和 application 四个内置对象。四个内置对象都通过 setAttribute(String name,Objectvalue) 方法来存储属性,通过 getAttribute(String name) 来获取属性,从而实现属性对象在不同作用域的数据分享。

最后

小编这些年深知大多数初中级工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-E2ZAvl5L-1719510623540)]

[外链图片转存中…(img-DX9sRMWL-1719510623540)]

[外链图片转存中…(img-dSAV9vKD-1719510623541)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你需要这些资料,⬅专栏获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值