jsp技术通过java_自学Javaweb_JSP技术(下)

JSP技术(下)

一、JSP九大内置对象

(一)内置对象简介

内置对象: 也称之为隐式对象,在jsp页面中,已经初始化好的并且已经封装好的,不需要程序员手动再去创建,可以直接拿过来使用;

如何获取内置对象呢? 快捷键:.

ff9fc531d3632b602c1b390eb291b44e.png

以上有八个内置对象, 还缺少一个内置对象;exception异常对象

异常内置对象如何获取?isErrorPage="true"打开错误页面

07ea187d64c2c17e8356624f11c36f52.png

关于这九大内置对象, 都有自己的引用名称;

前边是引用名称, 后边是数据类型;

(二)内置对象创建

既然是内置对象, 已经内置创建好的,不需要程序员手动创建;

99e0a72e286fbdddeedd559cbb4bd410.png

由此可见: 内置对象的实现和管理就是web容器(tomcat)

(三)内置对象详解

名称

类型

描述

out

javax.servlet.jsp.JspWriter

用于页面输出

JSP输出字符流

request

javax.servlet.http.HttpServletRequest

得到用户请求信息。

域对象,针对某次请求

response

javax.servlet.http.HttpServletResponse

服务器向客户端的回应信息

config

javax.servlet.ServletConfig

服务器配置,可以取得初始化参数

JSP配置信息的封装对象(一般不用)

session

javax.servlet.http.HttpSession

用来保存用户的信息(会话技术)

域对象,针对某次会话N次请求

application

javax.servlet.ServletContext

所有用户的共享信息

域对象,针对整个项目的所有请求,在这它是最大的作用域

page

java.lang.Object

指当前页面转换后的Servlet类的实例

当前JSP对应的Servlet对象。

(一般不用)

pageContext

javax.servlet.jsp.PageContext

JSP的页面容器

域对象,是JSP独有的。

普通Servlet是没有这个域对象

最小的域对象,

作用范围:是当前JSP页面

exception

java.lang.Throwable

表示JSP页面所发生的异常,在错误页中才起作用

设置了isErrorPage=”true”才会出现。

封装了上一个页面的错误信息。

1.pageContext对象

指的是jsp页面容器,是jsp独有的 普通servlet是没有的,并且还是一个作用域对象

作用域范围: 当前页面中有效

作用:

1.Jsp是最小的作用域,当前页面中有效

0aaf3e03997e502a58b95e75519c7577.png

d9e243049956691bba6c44fe79eef7cd.png

2.可以操作其它的内置对象

1b05deef80ee2912edf9cc33f6028f0e.png

案例:

1600e8da2ed9d1fc0d17b07a24e17cb0.png

399687ebf966db84f5b33128554711ba.png

动态获取项目名:

85ef1dd2c4074a114730d9b2d968253b.png

2. out对象

用于页面输出内容, 返回类型JSPWrite,写出数据数据先进入缓冲区,然后在输出

Servlet的out对象与out对象有什么区别?

1.Servlet的out对象输出信息时,不带缓冲区,返回值的类型: PrintWrite

2.Jsp的out对象带缓冲区,数据数据先进入缓冲区,然后在输出,返回值类型: JSPWrite

案例:

6b161ea1940c882f8ba828216efb55a0.png

原理图:

ed1b7d6d6a92ad0fdc898846f9c73316.png

问题:

想要输出的结果按照顺序输出: hello 你好

解决: 刷新缓冲区

e2629fa1d7a57f820c2b684830b33d43.png

二、JSP四大作用域对象

(一)作用域对象简介

Servlet的作用域对象:

Request : 请求

Session : 面向浏览器(服务端缓存)

servletContext : 面向web工程

8123f789c42e934121ffe24ac7450ddd.png

8865515e25541b79568fb69d91ee4ead.png

获取结果:

e76b2ebf9d74af00a2f3bdcb01ce4b7a.png

JSP四大作用域对象:(从小到大)

pageContext: 指定页面容器

Request: 面向请求

Session: 面向浏览器,会话

Application: 面向服务器

(二)JSP作用域对象范围验证

1.先从当前页面中获取值

b963495668744e2ed75c01fc37d0e82d.png

总结: 所有作用域的值都可以正常获取吧

2.从当前一个页面请求转发到另一个页面

c70eb422efbb209fdaffde429492ad90.png

856199c453ec2ac367ce33d6ba0b3ce6.png

结果:

700349e9f59bfa244e3424693321716f.png

总结:  当从一个页面请求转发到另外一个页面时, pageContext域中的值消失,因为pageContext作用域对象只能在当前页面中有效;

3.从当前一个页面(one.jsp)重定向到另一个页面(two.jsp)

d1f20fd670362ef91fe8b25cc537e587.png

结果:

c6e8eb22e00daec7aeace582f324e93d.png

总结: 当前一个页面重定向到另一个页面, request作用域对象消失,因为request对象只能在一次请求一次响应中有效,响应结束, request的值消失;

4.关闭浏览器再次打开另外一个页面(two.jsp)

98ee0ce1fdafc0a747763f3b2d58be6c.png

总结: session域对象中的值消失,因为session是属于会话对象,作用域是当前浏览器,一旦浏览器关闭再次打开,对象消失;

5.关闭服务器, 再次打开另外一个页面(two.jsp)

6198c44a7e52d7f4115de7fd00eabcfa.png

总结: application域中的数据在没有关闭服务器之前一直存在,因为application是作用服务器的,而当你的服务器关闭重新启动, application中的数据会消失;

三、EL进阶

使用EL表达式取值必须确保值是存储在作用域对象中,而当多个作用域存储出现同名情况时,会默认从作用域最小的开始取值。

1fb5c6ab4f8c199d8a01571254482dfa.png

此时, 会发现是从最小的作用域中获取值;

问题: 取出指定的作用域中的指定值;

24d1c2c90ebbb4ca28599885f2216453.png

因为EL表达式为每一个作用域提供了一个默认的变量:

Application ==> applicationScope

Session  ==> sessionScope

Request  ==> requestScope

pageContext  ==> pageScope

总结:

1.可以直接从某个作用域中取值, 如果不写作用域+Scope.属性名,默认从最小的作用域中取值

2.一旦出现同名的情况, 使用作用域+Scope.属性名是唯一 一种从域对象中获取数据的方式;

四、JSP动作标签

JSP动作标签的作用是用来简化Java脚本的,是JavaWeb内置的动作标签,它们是已经定义好的动作标签,我们可以拿来直接使用。

语法:

1.页面跳转标签

写法格式:

相当于: 请求转发:request.getRequestDispatcher("/two.jsp").forward(request, response);

案例:

3315d4ce9b3ef5ab521f366066d84bf8.png

2edf04393678723ca8cfb6d8fbeef29a.png

2.包含标签

写法格式:(动态包含)

相当于: 静态包含

案例:

e2c66d58cf257076c6f91889ca42aa44.png

dee819356876578a8ba035ca39c42f79.png

a6289c48eb8b3f1a484afd715cb440eb.png

面试题:动态包含和静态包含有什么区别?

1、写法不同:

静态包含是指令包含

动态包含是JSP动作标签包含

2、编译方式不同:

静态包含:编译过程中将被包含的页面先整合到包含页面再编译。所以只有一个文件

动态包含:编译过程中包含的页面与被包含的页面都编译,运行后内容再通过servlet整合

3、参数传递:

静态包含不能向被包含页面传递参数

动态包含可以使用jsp:param标签向被包含页面传递参数

f7fb601a1802c041687af6e61da1fecf.png

7109a3ab30e1a2b366333c02b3cfd144.png

4、运行效率:

静态包含快,当成了一个页面;动态包含是多个页面,运行慢。

五、JSTL标准标签库

(一)JSTL简介

JSTL(JavaServer Pages Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库。它主要提供给JavaWeb开发人员一个标准通用的标签,开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。

JSTL的使用步骤:

1、导包:

494bd1be86791584bfa78c9204b5849c.png

0b9deadf80808f1b126e81aa0437048c.png

2、标签的引用:

使用taglib指令来引入标签库

ddf8b20f50541b8d67876446d90139de.png

3、使用

JSTL组成:

1)核心标签库

2)函数标签库

3)格式化标签库(格式化日期的时候使用)

a9365093ae6b47006d346897ead036ab.png

07f9a370ecc509c9347bda2a93398fbf.png

9ef8f71d3b10e1c599cf8c8e0f16871d.png

注意:

Jstl不能单独使用,需要结合el表达式一起使用

(二)JSTL之核心标签

1、通用标签:

e09d4d8d4495e3f4375427889d6f550f.png

0f928744788502f64ee25cc061f01079.png

3、分支标签

单分支:

c60f5955f1897e044e97bd51dd8bc759.png

多分支

9c0d4748d9ea4f4648fb6a71228c3c08.png

4、循环标签forEach

a2288dd97a5a913caac80bea2c2027d4.png

be3901af7720d311285cfc0c65fb50e1.png

(三)JSTL之函数标签

引入函数标签库:

a0caf01edc511d42a4ff90eedf0d28be.png

应用场景:

1aad08a04eed821f959fc332979d6eba.png

案例:

a680405c4d472451e57a82365c55ed5d.png

六、完善项目功能

(一)改造查询功能

回顾:之前的查询

e6c07b2c8156c0335ce527b3a2b4b8d1.png

问题:

1.需要从servlet中获取域中的集合数据,然后使用for循环遍历

2.代码的可读性较差, 不易维护

使用jstl和el表达式结合使用去优化查询功能:(优化)

db567efe8bee45de6295fb77dba22677.png

(二)修改学员信息功能

分析:若要修改学员信息,首先在index.jsp页面的操作链接中添加“修改”链接。当单击修改链接时,先将要修改的学员信息通过表单进行回显,再对显示后的数据进行修改操作。

c83f1433820dec3a55f308fbc2865e3a.png

修改页面中数据:

1.数据的回显

99847e24401246fecef08a067f2a23a2.png

2.数据的修改

第十四讲JSP技术(下)

一、JSP九大内置对象

(一)内置对象简介

内置对象: 也称之为隐式对象,在jsp页面中,已经初始化好的并且已经封装好的,不需要程序员手动再去创建,可以直接拿过来使用;

如何获取内置对象呢? 快捷键:.

13719399.html

以上有八个内置对象, 还缺少一个内置对象;exception异常对象

异常内置对象如何获取?isErrorPage="true"打开错误页面

13719399.html

关于这九大内置对象, 都有自己的引用名称;

前边是引用名称, 后边是数据类型;

(二)内置对象创建

既然是内置对象, 已经内置创建好的,不需要程序员手动创建;

13719399.html

由此可见: 内置对象的实现和管理就是web容器(tomcat)

(三)内置对象详解

名称

类型

描述

out

javax.servlet.jsp.JspWriter

用于页面输出

JSP输出字符流

request

javax.servlet.http.HttpServletRequest

得到用户请求信息。

域对象,针对某次请求

response

javax.servlet.http.HttpServletResponse

服务器向客户端的回应信息

config

javax.servlet.ServletConfig

服务器配置,可以取得初始化参数

JSP配置信息的封装对象(一般不用)

session

javax.servlet.http.HttpSession

用来保存用户的信息(会话技术)

域对象,针对某次会话N次请求

application

javax.servlet.ServletContext

所有用户的共享信息

域对象,针对整个项目的所有请求,在这它是最大的作用域

page

java.lang.Object

指当前页面转换后的Servlet类的实例

当前JSP对应的Servlet对象。

(一般不用)

pageContext

javax.servlet.jsp.PageContext

JSP的页面容器

域对象,是JSP独有的。

普通Servlet是没有这个域对象

最小的域对象,

作用范围:是当前JSP页面

exception

java.lang.Throwable

表示JSP页面所发生的异常,在错误页中才起作用

设置了isErrorPage=”true”才会出现。

封装了上一个页面的错误信息。

1.pageContext对象

指的是jsp页面容器,是jsp独有的 普通servlet是没有的,并且还是一个作用域对象

作用域范围: 当前页面中有效

作用:

1.Jsp是最小的作用域,当前页面中有效

13719399.html

13719399.html

2.可以操作其它的内置对象

13719399.html

案例:

13719399.html

13719399.html

动态获取项目名:

13719399.html

2. out对象

用于页面输出内容, 返回类型JSPWrite,写出数据数据先进入缓冲区,然后在输出

Servlet的out对象与out对象有什么区别?

1.Servlet的out对象输出信息时,不带缓冲区,返回值的类型: PrintWrite

2.Jsp的out对象带缓冲区,数据数据先进入缓冲区,然后在输出,返回值类型: JSPWrite

案例:

13719399.html

原理图:

13719399.html

问题:

想要输出的结果按照顺序输出: hello 你好

解决: 刷新缓冲区

13719399.html

二、JSP四大作用域对象

(一)作用域对象简介

Servlet的作用域对象:

Request : 请求

Session : 面向浏览器(服务端缓存)

servletContext : 面向web工程

13719399.html

13719399.html

获取结果:

13719399.html

JSP四大作用域对象:(从小到大)

pageContext: 指定页面容器

Request: 面向请求

Session: 面向浏览器,会话

Application: 面向服务器

(二)JSP作用域对象范围验证

1.先从当前页面中获取值

13719399.html

总结: 所有作用域的值都可以正常获取吧

2.从当前一个页面请求转发到另一个页面

13719399.html

13719399.html

结果:

13719399.html

总结:  当从一个页面请求转发到另外一个页面时, pageContext域中的值消失,因为pageContext作用域对象只能在当前页面中有效;

3.从当前一个页面(one.jsp)重定向到另一个页面(two.jsp)

13719399.html

结果:

13719399.html

总结: 当前一个页面重定向到另一个页面, request作用域对象消失,因为request对象只能在一次请求一次响应中有效,响应结束, request的值消失;

4.关闭浏览器再次打开另外一个页面(two.jsp)

13719399.html

总结: session域对象中的值消失,因为session是属于会话对象,作用域是当前浏览器,一旦浏览器关闭再次打开,对象消失;

5.关闭服务器, 再次打开另外一个页面(two.jsp)

13719399.html

总结: application域中的数据在没有关闭服务器之前一直存在,因为application是作用服务器的,而当你的服务器关闭重新启动, application中的数据会消失;

三、EL进阶

使用EL表达式取值必须确保值是存储在作用域对象中,而当多个作用域存储出现同名情况时,会默认从作用域最小的开始取值。

13719399.html

此时, 会发现是从最小的作用域中获取值;

问题: 取出指定的作用域中的指定值;

13719399.html

因为EL表达式为每一个作用域提供了一个默认的变量:

Application ==> applicationScope

Session  ==> sessionScope

Request  ==> requestScope

pageContext  ==> pageScope

总结:

1.可以直接从某个作用域中取值, 如果不写作用域+Scope.属性名,默认从最小的作用域中取值

2.一旦出现同名的情况, 使用作用域+Scope.属性名是唯一 一种从域对象中获取数据的方式;

四、JSP动作标签

JSP动作标签的作用是用来简化Java脚本的,是JavaWeb内置的动作标签,它们是已经定义好的动作标签,我们可以拿来直接使用。

语法:

1.页面跳转标签

写法格式:

相当于: 请求转发:request.getRequestDispatcher("/two.jsp").forward(request, response);

案例:

13719399.html

13719399.html

2.包含标签

写法格式:(动态包含)

相当于: 静态包含

案例:

13719399.html

13719399.html

13719399.html

面试题:动态包含和静态包含有什么区别?

1、写法不同:

静态包含是指令包含

动态包含是JSP动作标签包含

2、编译方式不同:

静态包含:编译过程中将被包含的页面先整合到包含页面再编译。所以只有一个文件

动态包含:编译过程中包含的页面与被包含的页面都编译,运行后内容再通过servlet整合

3、参数传递:

静态包含不能向被包含页面传递参数

动态包含可以使用jsp:param标签向被包含页面传递参数

13719399.html

13719399.html

4、运行效率:

静态包含快,当成了一个页面;动态包含是多个页面,运行慢。

五、JSTL标准标签库

(一)JSTL简介

JSTL(JavaServer Pages Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库。它主要提供给JavaWeb开发人员一个标准通用的标签,开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。

JSTL的使用步骤:

1、导包:

13719399.html

13719399.html

2、标签的引用:

使用taglib指令来引入标签库

13719399.html

3、使用

JSTL组成:

1)核心标签库

2)函数标签库

3)格式化标签库(格式化日期的时候使用)

13719399.html

13719399.html

13719399.html

注意:

Jstl不能单独使用,需要结合el表达式一起使用

(二)JSTL之核心标签

1、通用标签:

13719399.html

13719399.html

3、分支标签

单分支:

13719399.html

多分支

13719399.html

4、循环标签forEach

13719399.html

13719399.html

(三)JSTL之函数标签

引入函数标签库:

13719399.html

应用场景:

13719399.html

案例:

13719399.html

六、完善项目功能

(一)改造查询功能

回顾:之前的查询

13719399.html

问题:

1.需要从servlet中获取域中的集合数据,然后使用for循环遍历

2.代码的可读性较差, 不易维护

使用jstl和el表达式结合使用去优化查询功能:(优化)

13719399.html

(二)修改学员信息功能

分析:若要修改学员信息,首先在index.jsp页面的操作链接中添加“修改”链接。当单击修改链接时,先将要修改的学员信息通过表单进行回显,再对显示后的数据进行修改操作。

13719399.html

修改页面中数据:

1.数据的回显

13719399.html

2.数据的修改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值