zoukankan      html  css  js  c++  java
  • 自学Javaweb_JSP技术(下)

    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, 写出数据数据先进入缓冲区, 然后在输出

    Servletout对象与out对象有什么区别?

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

    2. Jspout对象带缓冲区, 数据数据先进入缓冲区, 然后在输出, 返回值类型: 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内置的动作标签,它们是已经定义好的动作标签,我们可以拿来直接使用。

    语法:

    <jsp:标签名 属性名=属性值></jsp:标签名>

    1. 页面跳转标签

    写法格式:

    <jsp:foward page=跳转页面地址></jsp:foward>

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

    案例:

     

     

    2. 包含标签

    写法格式:(动态包含)

    <jsp:include page="包含页面的地址"></jsp:include>

    相当于: 静态包含<%@include file=页面名称 %>

    案例:

     

     

     

     

     

     

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

    1、写法不同:

    静态包含是指令包含<%@include file=”***”%>

    动态包含是JSP标签包含<jsp:include page="***"></jsp:include>

    2编译方式不同:

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

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

    3、参数传递

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

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

     

     

    4、运行效率:

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

    五、JSTL标准标签库

    (一)JSTL简介

    JSTLJavaServer Pages Standard Tag LibraryJSP标准标签库)是一个不断完善的开放源代码的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. 代码的可读性较差, 不易维护

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

     

    (二)修改学员信息功能

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

     

    修改页面中数据:

    1. 数据的回显

     

    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, 写出数据数据先进入缓冲区, 然后在输出

    Servletout对象与out对象有什么区别?

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

    2. Jspout对象带缓冲区, 数据数据先进入缓冲区, 然后在输出, 返回值类型: 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内置的动作标签,它们是已经定义好的动作标签,我们可以拿来直接使用。

    语法:

    <jsp:标签名 属性名=属性值></jsp:标签名>

    1. 页面跳转标签

    写法格式:

    <jsp:foward page=跳转页面地址></jsp:foward>

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

    案例:

     

     

    2. 包含标签

    写法格式:(动态包含)

    <jsp:include page="包含页面的地址"></jsp:include>

    相当于: 静态包含<%@include file=页面名称 %>

    案例:

     

     

     

     

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

    1、写法不同:

    静态包含是指令包含<%@include file=”***”%>

    动态包含是JSP标签包含<jsp:include page="***"></jsp:include>

    2编译方式不同:

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

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

    3、参数传递

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

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

     

     

    4、运行效率:

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

    五、JSTL标准标签库

    (一)JSTL简介

    JSTLJavaServer Pages Standard Tag LibraryJSP标准标签库)是一个不断完善的开放源代码的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. 代码的可读性较差, 不易维护

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

     

    (二)修改学员信息功能

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

     

    修改页面中数据:

    1. 数据的回显

     

    2. 数据的修改

     

  • 相关阅读:
    - (NSString *)description
    3.30 学习笔记
    常用的 博客
    iOS 比较好的博客
    iOS查看一段代码运行的时间
    tableview 第一次可以查看tableview 当退出第二次却会出现Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:]
    iphone 设置全局变量的几种方法
    java操作控件加密
    关闭windows 警报提示音
    HttpServletRequest简述
  • 原文地址:https://www.cnblogs.com/masterhxh/p/13719399.html
Copyright © 2011-2022 走看看