JSP内置对象

article/2025/9/29 13:05:39
  • JSP内置对象的分类
  • 内置对象属性保存范围
  • JSP内置对象的常用方法(只列了一些)
  • 小例子

 

 

一:JSP内置对象的分类

这些对象不用经过显示声明直接引用,也不用代码创建其实例,可在程序中直接使用,由Web Container为对象实例化。

 

 

 

 

 

二:内置对象属性保存范围

(1)page:在JSP中设置一个页的属性范围,必须通过pageContext完成,属性值只能在当前页取得。

(2)request:将属性保存在一次请求范围之内,必须使用服务器跳转<jsp:forward/>,通过客户端跳转和超链接等无法取得。

(3)session:只保留一个用户的信息,不管什么跳转都可以取得属性,与session有关的任何打开的页面都可以取得session。

(4)application:所有用户都可以取得此信息,此信息在整个服务器上被保留,所有网页窗口都可以取得数据。

 

注意:这四种属性范围,都是通过pageContext对象来完成的。

设置属性:
public abstract void setAttribute(String name,Object value,int scope)
取得属性:
public abstract Object getAttribute(String name)

其中,scope取值为:

public static final int APPLICATION_SCOPE
public static final int SESSION_SCOPE
public static final int REQUEST_SCOPE
public static final int PAGE_SCOPE

例子:

 <%pageContext.setAttribute("name","内置对象");String d= (String) pageContext.getAttribute("name");out.print(d);%>

 

 

三:JSP内置对象的常用方法(只列了一些)

(1)request请求对象

request对象属于 Javax. ervlet ServletRequest接口的实例化对象。
【作用】 request对象不但可以用来设置和取得 request范围变量,还可以用来获得客户端请求参数、请求的来源、表头、 cookies等。
【机制】当用户请求一个JSP页面时,JSP页面所在的 Tomcat服务器将用户的请求封装在内置对象 request中。 request内置对象代表了客户端的请求信息,主要用于接收客户端通过HTTP协议传送给服务器端的数据。在客户端的请求中如果有参数,则该对象就有参数列表。

 

 

(2)response响应对象

response对象属于Javax.servlethttpHttpservletrEsponse接口的实例化对象
【作用】 response对象用来给客户端传送输出信息、设置标头等。
【机制】 response对象的生命周期由JSP容器自动控制。当服务器向客户端传送数据JSP容器就会创建 response对象,并将请求信息包装到 response对象中。它封装了JSP性的响应,然后被发送到客户端以响应客户的请求,当JSP容器处理完请求后, response
对象就会被销毁。

 

1)页面跳转的多种方式:

  每隔1s刷新一次页面<%response.setHeader("refresh","1");%>2秒后跳转到login.jsp<%response.setHeader("refresh","2;URL=login.jsp");%>

 

2)response.sendRedirect("地址")实现页面跳转(可以携带参数)

<%response.sendRedirect("AA.jsp?id=1");
%>跳转后地址为:http://localhost:8080/AA.jsp?id=1

这种是客户端跳转,页面跳转时,地址栏改变,不能保存request属性,要通过URL地址重写传递参数。

和<jsp:forward page=""/>相比,后者是服务器跳转,地址栏不改变,无条件跳转,之后的代码不执行,所以在跳转之前释放全部资源 request设置的属性能保留在下一个页面,通过<jsp:param>传递参数

 

3)设置Cookie

Cookie是服务器端保存客户端的一组资源。例如,登录时会问用户是否记住密码,或多长时间不用登录,这些功能都是通过 Cookie来实现的。

Cookie是通过服务器端设置到客户端上去的,用response提供的方法实现:
public void addCookie(Cookie cookie)
如果要在服务器端取得 Cookie,用 request提供的方法实现:
public Cookie[] getCookies()
在使用 request对象取得全部 Cookie时,会出现 Jsessionid信息。 Jsessionid表示一个客户端在服务器端的唯一一个标识编号(自动获得 Session对象),服务器端在客户端第一次访问之后,会设置一个默认的 Cookie在客户端上: Jsessionid
默认情况下, Cookie只针对当前浏览器有效,如果需要 Cookie长留在本地计算机上,可以设置 Cookie的保存时间。通过 Cookie对象的 setMaxAge0设置最大保留时间。

Cookie是保存在客户端上的信息,安全性较差,不要把过多的隐秘信息保留在 Cookie中,这样很不安全。
 

 

(3)session会话对象

session对象属于Javax.servlet.http.Htpsessio接口的实例化对象。
【作用】 session对象用来表示用户的会话状况,一般用于保存用户的各种信息,直到生命周期(一般为900s)超时或者被人为释放掉为止。
【机制】当一个用户首次访问服务器上的一个JSP页面时,JSP引擎产生一个 session对象,同时分配一个 String类型的ID号,JP引擎同时将这个ID号发送到用户端,存放在Cookie中,这样session对象和用户之间就建立了一一对应的关系。当用户再访问连接该服务器的其他页面时,不再分配给用户新的 Session对象。直到关闭浏览器后,服务器端该用户的 Session对象才取消,与用户的对应关系也一并消失。当重新打开浏览器再连接到该服务器时,服务器会为该用户再创建一个新的 Session对象。 

 

1) session与 Cookie比较
session和 Cookie用于跨网页共享数据。
1> session:将信息以对象形式保存于服务端,记录独有的个人信息,在不同页面中传递。 session对象随会话结束而结束
2> Cookie:将信息以字符串形式保存于客户端,供浏览器与web服务器互通数据用的文本文件,当IE执行时,会在计算机中产生一个 Cookie。 Cookie可以长期保存在客户端。
session比 Cookie更安全,但更占用资源。重要的信息使用 session保存,不重要的用信息通常用 Cookie保存
【开发原则】尽量少向 session中保存信息, session使用了 Cookie的机制,如果 Cookie禁用,则 session也无法使用。

 

 

(4)application应用程序对象

application对象属于Javax.servlet.jsp.ServletContext接口的实例化对象。
【作用】application对象用户取得和设置Servlet的相关信息,实现了用户间数据的共享,可存放全局变量
【机制】开了于服务器的启动,知道服务器关闭,这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作。

 

 

(5)其他对象

1>pageContext页面上下文对象

    <%request.setAttribute("name","漫步云端");%><%=pageContext.getRequest().getAttribute("name")%>

 

 

 

 

 

四:小例子

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>login</title><%--正则表达式将字符串前后空格用空字符串替代--%><%--/.../g:全文匹配;\s*:0个或多个空格;^:字符串必须以后面的规则开头;|:或--%><%--(^\s*):0个或多个空格开头;$:字符串必须以前面的规则结尾;(\s*$):0个或多个空格结尾--%><script type="text/javascript">function loginCheck() {var userName =  window.loginform.userName.value;var userPassword = window.loginform.userPassword.value;
//            window.alert("s1");
//            window.alert("s2")
//            alert("s3");
//            alert("s4")if(userName.replace(/(^\s*)|(\s*$)/g,"")==""){window.alert("用户ID不能为空");window.loginform.userName.focus();return false;}if(userPassword.replace(/(^\s*)|(\s*$)/g,"")==""){window.alert("用户密码不能为空");window.loginform.userPassword.focus();return false;}return true;}</script>
</head>
<body><form name="loginform" action="loginSubmit.jsp" method="get">账号:<input type="text" name="userName" id="userName"/>密码:<input type="password" name="userPassword" id="userPassword"/><%--当用户鼠标经过按钮执行Javascript代码--%><input type="submit" value="提交" onmouseover="loginCheck()"/>
</form><%if (request.getParameter("err")!=null){
//getParameter获得客户端传送给服务器端传送的参数值;获取表单提交的信息,以字符串形式返回客户端传来的某一个请求参数的值String err = request.getParameter("err");if (err.equals("-1")){out.print("账号或密码错误");}else {out.print("其他问题");}}
%>
</body>
</html>

在这个页面我遇到几个问题

第一个就是window我把它写为大写的W就没效果了

第二个就是正则表达式replace(/(^\s*)|(\s*$)/g,""),作用是将字符串前后空格用空字符串替代,当我输入是空或者空格都会提示

第三个就是在form写原生的botton控件,会默认是submit类型,会提交

 

 

loginSubmit.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>login处理</title>
</head>
<body><%String userName = request.getParameter("userName");String userPassword = request.getParameter("userPassword");if (userName.equals("123456")&&userPassword.equals("123456")){
//          将类型为o(Object o,右边的)存入session对象的name(String name,左边的)属性中session.setAttribute("userName",userName);session.setAttribute("userPassword",userPassword);
//            页面重定向跳转,跳转后地址改变,属于客户端跳转response.sendRedirect("index.jsp");}else {
//            因为是重定向跳转,不能保存request属性,所以重写传递参数err=-1response.sendRedirect("login.jsp?err=-1");}%>
</body>
</html>

 

 

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>主页</title></head><body><%if (session.getAttribute("userName")!=null){%>当前用户:<%=session.getAttribute("userName")%><%}else{%>当前用户:游客<%}%></body>
</html>

如果有值就是哪个值,没有就是游客,不过前面因为写了判断,所以账号密码错误也不会跳到游客,可以直接进这个页面

 

在这个例子中:

getParameter 是用来接受用post个get方法传递过来的参数的

参考https://terryjs.iteye.com/blog/1317610


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

相关文章

jsp内置对象之request

一、内置对象概述 有些对象不用声明即可在jsp页面的java程序片和表达式中使用&#xff0c;这就是jsp 的内置对象。Jsp的常用的内置对象有request&#xff0c;response&#xff0c;session&#xff0c;aplication和out。Response和request对象是jsp内置对象中比较重要的两个&am…

JSP的内置对象详解

JSP内置对象 文章目录 JSP内置对象前言一、out对象1.原理2. 向客户端输出数据 二、page对象1.范围 三、pageContext 对象1.获取内置对象2.存储数据 四、request对象1.创建及获取请求2.范围 五、response 对象1.重定向网页2.处理HTTP文件头 六、session对象1.创建及获取客户的会…

JSP常用内置对象概述

1、概述 JSP提供了9个预设的对象&#xff0c;我们将其称为内置对象。这些对象内置在JSP网页环境之下&#xff0c;因此用户不需要引用这些对象所属的包&#xff0c;便可以直接在JSP网页中使用这些对象。 如图&#xff1a; (1 ) request与response对象。JSP网页能够具备与用户…

JSP的九种内置对象

JSP有九个内置对象&#xff08;又叫隐含对象&#xff09;&#xff0c;不需要预先声明就可以在脚本代码和表达式中随意使用&#xff0c;即不需要实例化&#xff0c;直接使用其方法即可。 pageppagecontentoutconfigexceptionrequestreponsesessionapplication 作用域&#xff…

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使用用…