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

JSP技术(下)

一、JSP九大内置对象

(一)内置对象简介

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

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

jsp技术通过java_自学Javaweb_JSP技术(下)_第1张图片

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

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

jsp技术通过java_自学Javaweb_JSP技术(下)_第2张图片

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

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

(二)内置对象创建

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

jsp技术通过java_自学Javaweb_JSP技术(下)_第3张图片

由此可见: 内置对象的实现和管理就是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是最小的作用域,当前页面中有效

jsp技术通过java_自学Javaweb_JSP技术(下)_第4张图片

jsp技术通过java_自学Javaweb_JSP技术(下)_第5张图片

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

jsp技术通过java_自学Javaweb_JSP技术(下)_第6张图片

案例:

jsp技术通过java_自学Javaweb_JSP技术(下)_第7张图片

jsp技术通过java_自学Javaweb_JSP技术(下)_第8张图片

动态获取项目名:

85ef1dd2c4074a114730d9b2d968253b.png

2. out对象

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

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

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

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

案例:

jsp技术通过java_自学Javaweb_JSP技术(下)_第9张图片

原理图:

jsp技术通过java_自学Javaweb_JSP技术(下)_第10张图片

问题:

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

解决: 刷新缓冲区

jsp技术通过java_自学Javaweb_JSP技术(下)_第11张图片

二、JSP四大作用域对象

(一)作用域对象简介

Servlet的作用域对象:

Request : 请求

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

servletContext : 面向web工程

jsp技术通过java_自学Javaweb_JSP技术(下)_第12张图片

jsp技术通过java_自学Javaweb_JSP技术(下)_第13张图片

获取结果:

jsp技术通过java_自学Javaweb_JSP技术(下)_第14张图片

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

pageContext: 指定页面容器

Request: 面向请求

Session: 面向浏览器,会话

Application: 面向服务器

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

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

jsp技术通过java_自学Javaweb_JSP技术(下)_第15张图片

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

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

jsp技术通过java_自学Javaweb_JSP技术(下)_第16张图片

jsp技术通过java_自学Javaweb_JSP技术(下)_第17张图片

结果:

jsp技术通过java_自学Javaweb_JSP技术(下)_第18张图片

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

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

jsp技术通过java_自学Javaweb_JSP技术(下)_第19张图片

结果:

jsp技术通过java_自学Javaweb_JSP技术(下)_第20张图片

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

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

jsp技术通过java_自学Javaweb_JSP技术(下)_第21张图片

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

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

jsp技术通过java_自学Javaweb_JSP技术(下)_第22张图片

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

三、EL进阶

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

jsp技术通过java_自学Javaweb_JSP技术(下)_第23张图片

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

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

jsp技术通过java_自学Javaweb_JSP技术(下)_第24张图片

因为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);

案例:

jsp技术通过java_自学Javaweb_JSP技术(下)_第25张图片

jsp技术通过java_自学Javaweb_JSP技术(下)_第26张图片

2.包含标签

写法格式:(动态包含)

相当于: 静态包含

案例:

jsp技术通过java_自学Javaweb_JSP技术(下)_第27张图片

dee819356876578a8ba035ca39c42f79.png

jsp技术通过java_自学Javaweb_JSP技术(下)_第28张图片

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

1、写法不同:

静态包含是指令包含

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

2、编译方式不同:

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

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

3、参数传递:

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

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

jsp技术通过java_自学Javaweb_JSP技术(下)_第29张图片

jsp技术通过java_自学Javaweb_JSP技术(下)_第30张图片

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

jsp技术通过java_自学Javaweb_JSP技术(下)_第31张图片

3、分支标签

单分支:

jsp技术通过java_自学Javaweb_JSP技术(下)_第32张图片

多分支

jsp技术通过java_自学Javaweb_JSP技术(下)_第33张图片

4、循环标签forEach

jsp技术通过java_自学Javaweb_JSP技术(下)_第34张图片

jsp技术通过java_自学Javaweb_JSP技术(下)_第35张图片

(三)JSTL之函数标签

引入函数标签库:

a0caf01edc511d42a4ff90eedf0d28be.png

应用场景:

jsp技术通过java_自学Javaweb_JSP技术(下)_第36张图片

案例:

jsp技术通过java_自学Javaweb_JSP技术(下)_第37张图片

六、完善项目功能

(一)改造查询功能

回顾:之前的查询

jsp技术通过java_自学Javaweb_JSP技术(下)_第38张图片

问题:

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

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

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

jsp技术通过java_自学Javaweb_JSP技术(下)_第39张图片

(二)修改学员信息功能

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

jsp技术通过java_自学Javaweb_JSP技术(下)_第40张图片

修改页面中数据:

1.数据的回显

jsp技术通过java_自学Javaweb_JSP技术(下)_第41张图片

2.数据的修改

第十四讲JSP技术(下)

一、JSP九大内置对象

(一)内置对象简介

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

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

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

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

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

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

(二)内置对象创建

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

由此可见: 内置对象的实现和管理就是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是最小的作用域,当前页面中有效

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

案例:

动态获取项目名:

2. out对象

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

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

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

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

案例:

原理图:

问题:

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

解决: 刷新缓冲区

二、JSP四大作用域对象

(一)作用域对象简介

Servlet的作用域对象:

Request : 请求

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

servletContext : 面向web工程

获取结果:

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

pageContext: 指定页面容器

Request: 面向请求

Session: 面向浏览器,会话

Application: 面向服务器

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

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

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

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

结果:

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

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

结果:

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

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

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

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

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

三、EL进阶

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

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

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

因为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);

案例:

2.包含标签

写法格式:(动态包含)

相当于: 静态包含

案例:

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

1、写法不同:

静态包含是指令包含

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

2、编译方式不同:

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

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

3、参数传递:

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

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

4、运行效率:

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

五、JSTL标准标签库

(一)JSTL简介

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

JSTL的使用步骤:

1、导包:

2、标签的引用:

使用taglib指令来引入标签库

3、使用

JSTL组成:

1)核心标签库

2)函数标签库

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

注意:

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

(二)JSTL之核心标签

1、通用标签:

3、分支标签

单分支:

多分支

4、循环标签forEach

(三)JSTL之函数标签

引入函数标签库:

应用场景:

案例:

六、完善项目功能

(一)改造查询功能

回顾:之前的查询

问题:

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

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

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

(二)修改学员信息功能

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

修改页面中数据:

1.数据的回显

2.数据的修改

你可能感兴趣的:(jsp技术通过java)