JSP的九种内置对象

article/2025/9/29 13:09:40

JSP有九个内置对象(又叫隐含对象),不需要预先声明就可以在脚本代码和表达式中随意使用,即不需要实例化,直接使用其方法即可。

  • page
  • ppagecontent
  • out
  • config
  • exception
  • request
  • reponse
  • session
  • application

作用域:

前五种都是作用于页面,request是一次请求(客户端向服务器),response是一次响应(服务器向客户端),session是一次会话(一次请求,一次响应),application是全局范围,只要app存在就有作用。

1 JSP九大内置对象分为四类:

输入输出对象:out对象、response对象、request对象
通信控制对象:pageContext对象、session对象、application对象
Servlet对象:page对象、config对象
错误处理对象:exception对象

2.九种对象简介:


out对象:用于向客户端、浏览器输出数据。out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。


request对象:封装了来自客户端、浏览器的各种信息。request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。


response对象:封装了服务器的响应信息。response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。


exception对象:封装了jsp程序执行过程中发生的异常和错误信息。exception 对象的作用是显示异常信息,只有在包含 isErrorPage=“true” 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。


config对象:封装了应用程序的配置信息。config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数

page对象:指向了当前jsp程序本身。page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。


session对象:用来保存会话信息。也就是说,可以实现在同一用户的不同请求之间共享数据。session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。


application对象:代表了当前应用程序的上下文。可以在不同的用户之间共享信息。application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。


pageContext对象:提供了对jsp页面所有对象以及命名空间的访问。pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。

3 常用方法

3.1request

模拟获取用户信息:

<%--Created by IntelliJ IDEA.User: 86187Date: 2022/8/4Time: 19:18To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><!-- 最新版本的 Bootstrap 核心 CSS 文件 --><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous"><script src="http://libs.baidu.com/jquery/1.11.3/jquery.min.js"></script><!-- 最新的 Bootstrap 核心 JavaScript 文件 --><script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script><style>.top img {width: 300px;height: 100px;vertical-align: -20px;}form{margin-left: 50px;margin-top: 30px;}</style>
</head>
<body>
<div class="container"><div class="row"><div class="col-md-3 top"><img src="img/1.jpg" /></div><div class="col-md-7" style="background-color: lightcyan;margin-top: 60px;"><span>用户注册</span></div><div class="col-md-2 text-right" style="background-color: lightcyan;margin-top: 60px;"><a href="#">帮助</a></div></div><form action="5.jsp" method="POST"><table><tr><td>用户名:</td><td><input type="text" name="username" />只能输入字母或数字,4-16个字符</td></tr><tr><td>密码:</td><td><input type="password" name="password" />密码长度6-12位</td></tr><tr><td>确认密码:</td><td><input type="password" name="password" /></td></tr><tr><td>性别:</td><td><input type="radio" name="sex" value="男" checked/>男<input type="radio" name="sex" value="女"/>女</td></tr><tr><td>电子邮件地址:</td><td><input type="email" name="email" /></td></tr><tr><td>出生日期:</td><td><input type="text" name="year" style="width: 50px;" />年<select name="month"><option value="12">12月</option><option value="11">11月</option><option value="10">10月</option><option value="9">9月</option><option value="8">8月</option><option value="7">7月</option><option value="6">6月</option><option value="5">5月</option><option value="4">4月</option><option value="3">3月</option><option value="2">2月</option><option value="1">1月</option></select>月<select name="day"><option value="31">31</option><option value="30">30</option><option value="29">29</option><option value="28">28</option><option value="27">27</option><option value="26">26</option><option value="25">25</option><option value="24">24</option><option value="23">23</option><option value="22">22</option><option value="21">21</option><option value="20">20</option><option value="19">19</option><option value="18">18</option><option value="17">17</option><option value="16">16</option><option value="15">15</option><option value="14">14</option><option value="13">13</option><option value="12">12</option><option value="11">11</option><option value="10">10</option><option value="9">9</option><option value="8">8</option><option value="7">7</option><option value="6">6</option><option value="5">5</option><option value="4">4</option><option value="3">3</option><option value="2">2</option><option value="1">1</option></select>日<br /></td></tr></table><input type="submit" name="sub" value="同意一下协议条款并提交" /><br /><textarea name="text"></textarea><input type="submit" value="提交"></form>
</div>
</body>
</html>

 5.jsp

<%--Created by IntelliJ IDEA.User: 86187Date: 2022/8/4Time: 19:37To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%request.setCharacterEncoding("UTF-8");String username = request.getParameter("username");String password = request.getParameter("password");String sexs[] = request.getParameterValues("sex");String email = request.getParameter("email");String year = request.getParameter("year");String months[] = request.getParameterValues("month");String days[] = request.getParameterValues("day");
%>
<p>用户名:<%=username%></p>
<p>密码:<%=password%></p>
<%for (String sex:sexs){
%>
<p>性别:<%=sex%></p>
<%}
%>
<p>邮箱:<%=email%></p>
<p>出生日期:<%=year+"-"+months[0]+"-"+days[0]%></p>
</body>
</html>

4.处理乱码问题

方法一:

  request.setCharacterEncoding("UTF-8");

方法二:

  request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");

方法三:

    //获取到用户名String username = request.getParameter("username");username = new String(username.getBytes(),"UTF-8");

3.2 转发与重定向

转发的定义:在多个页面交互过程中实现请求数据的共享

转发的实现:RequestDispatcher对象.forword()方法

do-login.jsp

<%@ page import="sun.util.resources.cldr.rof.CalendarData_rof_TZ" %><%--Created by IntelliJ IDEA.User: 86187Date: 2022/8/5Time: 13:55To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><!-- 最新版本的 Bootstrap 核心 CSS 文件 --><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous"><script src="http://libs.baidu.com/jquery/1.11.3/jquery.min.js"></script><!-- 最新的 Bootstrap 核心 JavaScript 文件 --><script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
</head>
<body>
<%//获取用户名,密码String username = request.getParameter("username");String password = request.getParameter("password");//判断是否为空if ((username != null && password !=null) && !("".equals(username.trim()) && "".equals(password.trim()))) {session.setAttribute("user", username);request.setAttribute("username", username);RequestDispatcher rd = request.getRequestDispatcher("success.jsp");rd.forward(request, response);}//判断用户名是否是lucky,密码是否是123456/* if ("lucky".equals(username) && "123456".equals(password)){session.setAttribute("user",username);request.setAttribute("username",username);RequestDispatcher rd = request.getRequestDispatcher("success.jsp");rd.forward(request,response);}else{*/%>
<script type="javascript">alert("登陆失败,请重新登录");
</script>
<%/*RequestDispatcher rd = request.getRequestDispatcher("login.jsp");rd.forward(request,response);}}*/
%>
</body>
</html>

 success.jsp

<%--Created by IntelliJ IDEA.User: 86187Date: 2022/8/5Time: 13:54To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
你好:<%=request.getAttribute("username")%>
<%=session.getAttribute("user")%>
<a href="session.jsp">失效</a>
</body>
</html>

failure.jsp

<%--Created by IntelliJ IDEA.User: 86187Date: 2022/8/5Time: 14:05To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%=request.getAttribute("username")%>
<%=session.getAttribute("user")%>
</body>
</html>

重定向:response对象

 转发与重定向的区别(重点)

转发:

  1. 请求跳转速度由于是在站内跳转,所以速度快。
  2. 一次请求
  3. 转发地址栏路径不变,内部资源完成一个跳转过程。
  4. 可以访问WEB-INF下的资源,只能访问服务器内部的资源,即web文件下的jsp。
  5. 转发可以使用request对象来共享数据。

重定向:

  1. 地址栏路径发生变化。
  2. 可以访问其他站点的资源。
  3. 二次请求,由浏览器发起两次请求,第一次是请求的目标,第二次会有浏览器跳转到目标页面,该过程是一个重定向的过程。
  4. 由于两次跳转,所以速度慢。

4.session会话

会话:一个会话就是浏览器与服务器之间的一次对话。

一个session对应一个浏览器,每打开一个不同的浏览器会设一个新的sessionId(如打开谷歌,IE,火狐都会设一个新的ID,而在谷歌打开多个页面ID是一样的)。

 


http://chatgpt.dhexx.cn/article/y5qYV3B3.shtml

相关文章

JSP九大内置对象

JSP提供了由容器实现和管理的内置对象&#xff0c;也可以称之为隐含对象&#xff0c;由于JSP使用Java作为脚本语言&#xff0c;所以JSP将具有强大的对象处理能力&#xff0c;并且可以动态创建Web页面内容。但Java语法在使用一个对象前&#xff0c;需要先实例化这个对象&#xf…

【JSP内置对象】之9大内置对象(JavaWeb必背必掌握)

JSP内置对象 理解9大内置对象分类1.request&#xff08;请求对象&#xff09;2.response(响应对象)3.session(会话对象)4.application(应用程序对象)5.page(页面对象)6.pageContext(页面上下文对象)7.out(输出对象)8.config(配置对象)9.exception(异常对象) 理解 1.JavaEE规范…

SQL INSERT 语句

INSERT 语句是向表中添加新行&#xff0c;&#xff08;如图所示的是INSERT 语句的最基本形式&#xff09; 1、首先&#xff0c;是要指定要插入的表的名称&#xff08;例如图中的yuangong&#xff09; 2、其次&#xff0c;指定要插入的数据&#xff0c;一个或多个列的列表。必须…

pycharm sql语句插入

一. 二. 开控制台 三. 书写sql语句&#xff0c;点击绿色三角运行

python执行sql 语句

python执行sql 语句 数据etl 过程中会涉及到调度&#xff0c;也就是每天要定时执行的任务&#xff0c;这些任务执行过程中其实是通过底层的脚本代码来进行数据的清洗转换等处理的。而脚本代码中肯定会涉及到调用sql 语句的情况&#xff0c;最近项目正好用到python 脚本调用sql…

通过Navicat 写SQL语句

具体步骤&#xff1a; 1、首先打开要写SQL语句的数据库连接 2、然后点击菜单中的查询&#xff08;query&#xff09; 3、然后点击新建查询 4、然后输入SQL语句&#xff0c;点击运行 &#xff0c;查询到的数据在底部

mysql修改数据sql语句_sql语句修改数据

sql语句修改数据 SQL 中,可以使用 UPDATE 语句来修改、更新一个或多个表的数据。 语法格式为:UPDATE SET 字段 1=值 1 [,字段 2=值 2… ] [WHERE 子句 ] [ORDER BY 子句] [LIMIT 子句] 语法说明如下::用于指定要更新的表名称。 SET 子句:用于指定表中要修改的列名及其列值…

SQL语句常用命令

一、表设计 1、创建表 create table 表名 (字段 字段类型);2、复制表结构及数据 create table 新表 as select * from 旧表3、复制表结构不需要数据 create table 新表 as select * from 旧表 where 2<>24、查看表结构 desc 表名5、复制表数据 insert into 目标表 s…

【180609】经典SQL语句大全(CHM)

收集我们在平时使用SQL时的一些语法语句汇集&#xff0c;比如创建、备份、删除数据库的SQL脚本&#xff0c;这些当然是比较简了&#xff0c;还有复杂点的像备份、创建索引、复合SQL语句、创建视图、高级运算查询、EXCEPT 运算符、INTERSECT 运算符、使用外连接、SQL分组、复制或…

SQL语句大全实例

SQL语句实例 表操作 例 1 对于表的教学管理数据库中的表 STUDENTS &#xff0c;可以定义如下&#xff1a; CREATE TABLE STUDENTS (SNO NUMERIC (6, 0) NOT NULL SNAME CHAR (8) NOT NULL AGE NUMERIC(3,0) SEX CHAR(2) BPLACE CHAR(20) PRIMARY KEY(SNO…

数据库常用的sql语句大全--sql

前言 本片博客使用mysql数据库进行数据操作,使用Navicat for mysql 这个IDE进行可视化操作。每个SQL语句都是亲身实验验证的,并且经过自己的思考的。能够保证sql语句的可运行性。 sql语句的命令不区分大小写,但储存的数据是区分大小写的。在这里我们统一使用英文小写进行命…

SQL常用语句大全

我们在进行开发工作时&#xff0c;对数据库的操作是必不可少的&#xff0c;熟练掌握SQL语句可以让我们对数据库的数据处理变得非常简单&#xff0c;所以学习SQL语句是非常有必要的&#xff0c;下面汇总了一些常用的SQL语句 SQL语句的类型 DDL(Data Definition Language)数据定…

EXPLAIN 命令详解

在工作中&#xff0c;我们用于捕捉性能问题最常用的就是打开慢查询&#xff0c;定位执行效率差的SQL&#xff0c;那么当我们定位到一个SQL以后还不算完事&#xff0c;我们还需要知道该SQL的执行计划&#xff0c;比如是全表扫描&#xff0c;还是索引扫描&#xff0c;这些都需要通…

explain用法和结果的含义

explain select * from user explain extended select * from user idSELECT识别符。这是SELECT的查询序列号select_type SELECT类型,可以为以下任何一种: SIMPLE:简单SELECT(不使用UNION或子查询)PRIMARY:最外面的SELECTUNION:UNION中的第二个或后面的SELECT语句DEPENDENT UN…

SQL优化-explain的用法(实例解析)

前面写了两篇博客&#xff0c;关于单表和多表的优化&#xff0c;这两篇博客的基础其实就是explain&#xff0c;explain是必须掌握的知识点&#xff0c;我曾尝试过死记硬背&#xff0c;但效果甚微&#xff0c;还是实践来的实在。耗费一周左右时间&#xff0c;每晚花两小时&#…

MySQL中EXPLAIN详解

EXPLAIN作为MySQL的性能分析神器&#xff0c;读懂其结果是很有必要的&#xff0c;然而我在各种搜索引擎上竟然找不到特别完整的解读。都是只有重点&#xff0c;没有细节&#xff08;例如type的取值不全、Extra缺乏完整的介绍等&#xff09;。 mysql网站 文章目录 EXPLAIN使用用…

MySql的Explain用法

MySql的Explain用法 explain执行计划 explain执行计划 使用EXPLAIN关键字可以模拟优化器执行SQL查询语句&#xff0c;从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。 ➤ 通过EXPLAIN&#xff0c;我们可以分析出以下结果&#xff1a; 表的读…

MySQL Explain用法及各字段详解

Explain工具介绍 使用 Explain 关键字可以模拟 MySQL 优化器执行 SQL 查询语句&#xff0c;并分析出查询语句的相关执行过程。 使用方法是直接在 select 语句前&#xff0c;加上关键字 explain&#xff0c;然后执行&#xff0c;就能获取一些优化器执行该 SQL 的信息。使用方法…

MySql中explain的用法

explain命令展示MySQL如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 explain命令使用 只需要在select前面加上EXPLAIN即可&#xff0c;如&#xff1a; explain select * from table_name where col_name XX注&#xff1a;expla…

MySQL中的Explain用法

一、Explain介绍   使用EXPLAIN关键字可以模拟优化器执行SQL查询语句&#xff0c;从而就可以知道MySQL是如何处理你的SQL语句的&#xff0c;可以用来分析你的查询语句或者是表结构的性能瓶颈。   通过EXPLAIN我们可以分析出以下结果&#xff1a;     ●表的读取顺序  …