• JSP总结


    目录

    JSP是什么:

    JSP与Servlet的区别:

    JSP运行原理

    JSP标签:

    原始标签:

    <%! %>声明标签:

    <% %>脚本标签

    <%= %>赋值标签

    指令标签:

    page标签:

    include标签

    taglib标签

    JSP内置对象

    JSP四大作用域对象

    请求转发:

    JSTL标签库是什么

    EL表达式

    如何在idea使用JSTL标签库

    标签的使用:

    c标签:

    if标签:

    choose标签:

    test属性:

    forEach标签:

    ​编辑​编辑

    forEach遍历List集合

    forEach遍历Map集合

    fmt标签

    MVC模式:


    JSP是什么:

    JSP是JAVAEE平台下的技术规范,它允许使用特定的标签在HTML代码中插入JAVA代码, 实现动态页面处理,所以JSP就是HTML与JAVA的结合体。JSP技术可以快速的实现一个页面的开发,相比使用Servlet实现页面开发轻松多了        

    JSP与Servlet的区别:

    • JSP以源文件的形式部署容器中,而Servlet是需要将字节码文件部署到容器中
    • JSP部署到web目录的根目录下或子目录下,而Servlet需要部署到WEB_INF/class目录中
    • JSP中的HTML代码会被JSP引擎放入到Servlet的out.print()中,而在Servlet中我们需要自己通过响应字符输出流生成响应的页面
    • JSP更擅长页面显示(HTML+JAVA),Servlet更擅长处理请求产生响应,也就是逻辑控制

    JSP运行原理

    JSP技术特点

    JSP和Servlet是本质相同的技术。

    当一个JSP文件第一次被请求时,JSP文件将会被加载为Servlet并执行这个Servlet,然后被容器缓存,如果JSP文件被修改了,JSP引擎会重新编译这个JSP

    JSP引擎对JSP编译时会生成两个文件分别是.java的源文件以及编译后的.class文件,并放到Tomcat的work目录的Catalina对应的虚拟主机目录中的org\apache\jsp目录中。两个文件的名称会使用JSP的名称加”_jsp”表示。如:index_jsp.java、index_jsp.class

    JSP标签

    JSP标签分为原始标签和指令标签

    原始标签:

    <%! %>声明标签:

    声明标签用来定义成员变量或者方法,该标签被编译后会出现在对应Servlet类中的class{        }大括号中

    例:

    我们编写了一段JSP代码

    在对应Servlet类中,就会出现我们编译的代码 

    <% %>脚本标签

    脚本标签用于在JSP中编写业务逻辑。标签中的内容会出现在JSP被编译后的Servlet的_jspService方法体中

    <%= %>赋值标签

    赋值标签用于在JSP中做内容输出。标签中的内容会出现在_jspService方法的out.print()方法的参数中。注意我们在使用赋值标签时不需要在代码中添加 ”;”

    指令标签:

    page标签:

    contentType

    设置响应类型和编码。

     

    pageEncoding

    设置页面的编码。(页面显示)

     

    import

    导入所需要的包。

     

    language

    当前JSP页面里面可以嵌套的语言。

     

    session

    设置JSP页面是否获取session内置对象。

     

    buffer

    设置JSP页面的流的缓冲区的大小。

     

    autoFlush

    是否自动刷新。

     

    exends

    声明当前JSP的页面继承于那个类.必须继承的是httpservlet 及其子类。

     

    isELIgnored

    是否忽略el表达式。

     

    errorPage

    当前JSP页面出现异常的时候要跳转到的JSP页面。

     

    isErrorPage

    当前JSP页面是否是一个错误页面。若值为true,可以使用JSP页面的一个内置对象 exception。

    include标签

    静态包含,可以将其他页面内容包含进来,一起进行编译运行.生成一个java文件.

    <%@include file="被包含JSP的相对路径" %>

    taglib标签

    导入标签库。

    <%@taglib prefix="前缀名" uri="名称空间" %>

    JSP内置对象

    JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception。

     

    request对象

    request 对象是 HttpServletRequest类型的对象。

     

    response对象

    response 对象是 HttpServletResponse类型的对象。

     

    session对象

    session 对象是HttpSession类型的对象。只有在包含 session=“true” 的页面中才可以被使用。

     

    application对象

    application 对象是ServletContext类型的对象。

     

    out 对象

    out 对象是JspWriter类型的对象。

     

    config 对象

    config 对象是ServletConfig类型的对象。

     

    pageContext 对象

    pageContext 对象是PageContext类型的对象。作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。

     

    page 对象

    page 对象代表JSP本身。

     

    exception 对象

    exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用。

    JSP四大作用域对象

    作用域:“数据共享的范围”,也就是说数据能够在指定范围内有效。

    对象名称

    作用范围

    application

    整个应用都有效

    session

    在当前会话中有效

    request

    在当前请求中有效

    page

    在当前页面有效

    请求转发:

    请求转发是有一些类似于Servlet中的重定向响应,但是不同的是重定向响应是两次请求两次响应,而请求转发是一次请求一次响应

    请求转发是服务端的一种请求方式,相当于在服务端中直接请求某个资源。

    RequestDispatcher dispatcher = request.getRequestDispatcher("/test.jsp");

    dispatcher.forward(request,response);

    简写方式:

    request.getRequestDispatcher("/test.jsp").forword(request,response);

    我们可以通过一张图去理解这个请求转发内部是如何转发的:

    案例:通过Servlet获取客户端浏览器正在使用的语言 

    我们可以通过请求头中的"accept-language",获取现在浏览器正在使用的语言

     我们将请求转发给一个叫requestForward的jsp文件,后面一定要带forward,把浏览器的请求一起转发了,不然jsp文件怎么知道显示啥呢

     然后我们再创建一个requestForward.jsp文件,通过这个文件获取转发过来的请求中的属性,然后输出到页面上

    JSTL标签库是什么

    JSTL(Java server pages standard tag library,即JSP标准标签库)JSTL标签是基于JSP页面的。这些标签可以插入在JSP代码中,本质上JSTL也是提前定义好的一组标签,这些标签封装了不同的功能,在页面上调用标签时,就等于调用了封装起来的功能。JSTL的目标是使JSP页面的可读性更强、简化JSP页面的设计、实现了代码复用、提高效率。

    在JSP2.0版本后开始支持JSTL标签库。在使用JSTL标签库时需要在JSP中添加对应的taglib指令标签。

    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

    JSTL标签分类

    根据JSTL标签所提供的功能,可以将其分为5个类别。

     

    核心标签

    最常用、最重要,也是最基本的标签

    <%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%>

    格式化标签

    JSTL格式化标签用来格式化并输出文本、日期、时间、数字。

    <%@taglibprefix="fmt"uri="http://java.sun.com/jsp/jstl/fmt"%>

    SQL标签

    JSTL SQL标签库提供了与关系型数据库(Oracle,MySQL,SQL Server等等)进行交互的标签。

    <%@taglibprefix="sql"uri="http://java.sun.com/jsp/jstl/sql"%>

    XML标签

    JSTL XML标签库提供了创建和操作XML文档的标签。

    <%@taglibprefix="x"uri="http://java.sun.com/jsp/jstl/xml"%>

    JSTL函数

    JSTL包含一系列标准函数,大部分是通用的字符串处理函数。

    <%@taglibprefix="fn"uri="http://java.sun.com/jsp/jstl/functions"%>

    EL表达式

    JSTL标签本身是无法使用表达式或者对象的,我们需要使用EL表达式帮助JSTL标签使用表达式或者对象

    语法结构

    ${表达式}

    ${对象.属性名}

    EL表达式中的操作符

    操作符

    描述

    ( )

    优先级

    +

    -

    减或负

    *

    / 或div

    % 或 mod

    取模

    == 或 eq

    测试是否相等

    != 或 ne

    测试是否不等

    < 或 lt

    测试是否小于

    > 或gt

    测试是否大于

    <= or le

    测试是否小于等于

    >= 或 ge

    测试是否大于等于

    && 或 and

    测试逻辑与

    || 或 or

    测试逻辑或

    ! 或not

    测试取反

    empty

    测试是否空值

    EL表达式的隐含对象

    隐含对象

    描述

    pageScope

    page 作用域

    requestScope

    request 作用域

    sessionScope

    session 作用域

    applicationScope

    application 作用域

    param

    Request 对象的参数,字符串

    paramValues

    Request对象的参数,字符串集合

    header

    HTTP 信息头,字符串

    headerValues

    HTTP 信息头,字符串集合

    initParam

    上下文初始化参数

    cookie

    Cookie值

    pageContext

    当前页面的pageContext

    使用EL表达式取出作用域中的值

    ${pageScope.name}

    ${requestScope.name}

    ${sessionScope.name}

    ${applicationScope.name}

    获取作用域属性中的数据时,也可以只写属性名,EL表达式会按照pageScope、requestScope、sessionScope、applicationScope的顺序查找该属性的值。

    ${name}

    如何在idea使用JSTL标签库

    JSTL标签库的使用步骤

    添加jstl.jar

    在JSP页面中添加taglib指令标签。

     

    首先在项目结构中导入jstl标签库

     

    然后在artifacts目录下,将jstl目录添加到web-inf目录下的lib目录

     

    添加好后就可以通过taglib使用jstl标签库了

    例:

    标签的使用:

    c标签:

    if标签:

    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

    < c:if >

    标签判断表达式的值,如果表达式的值为 true 则执行其主体内容。

     

    标签中的属性test需要给定布尔值或者一个el表达式,el表达式的值是一个布尔值

    choose标签:

    < c:choose >, < c:when >, < c:otherwise >

    < c:choose >标签与Java switch语句的功能一样,用于在众多选项中做出选择。

    switch语句中有case,而< c:choose >标签中对应有< c:when >,

    switch语句中有default,而< c:choose >标签中有< c:otherwise >。

     

    when标签和otherwise标签后面都自动会有break语句

    < c:when > = case: break;

    < c:otherwise > = default: break;

     

    注意:如果有多个when标签为true,那么匹配第一个为truewhen标签

    test属性:

    标签中的属性test需要给定布尔值或者一个返回布尔值的el表达式,

    test代表的就是判断

    forEach标签:

    < c:forEach >

    迭代器,用于迭代集合。

    属性

    描述

    items

    被迭代的集合

    begin(>=)

    迭代器的起始因子

    end(<=)

    迭代器的结束因子

    step

    迭代因子的增长数

    var

    代表当前迭代元素的变量名称

    varStatus

    代表循环状态的变量名称

    varStatus 属性:

    current: 当前这次迭代的(集合中的)项

    index: 当前这次迭代从 0 开始的迭代索引

    count: 当前这次迭代从 1 开始的迭代计数

    first: 用来表明当前这轮迭代是否为第一次迭代的标志

    last: 用来表明当前这轮迭代是否为最后一次迭代的标志

    begin: 属性值

    end: 属性值

    step: 属性值

     

    例子:

    forEach遍历List集合

     

    forEach遍历Map集合

     

    fmt标签

    JSTL格式化标签的使用

    <%@ taglib prefix="fmt" uri=" Oracle Java Technologies | Oracle" %>

     

    对日期的格式化处理

    value="${data}"pattern="yyyy-MM-dd"/>

    对数字格的式化处理

    value="${balance}"type="currency"/>

    MVC模式:

    MVC模式是一种软件的架构模式:Model、View、Controller即模型、视图、控制器。MVC要实现的目标是将软件的用户界面和业务逻辑分离,可提高代码可扩展性、可复用性、可维护性、以及灵活性。

    View(视图):用户的操作界面。如:html、jsp。

    Model(模型):具体的业务模型与数据模型。如:service、dao、pojo。

    Controller(控制):处理从视图层发送的请求,并选取模型层的业务模型完成响应的业务实现,并产生响应。如:Servlet。

    MVC模式与应用程序分层的区别

    MVC模式是一种软件的架构方式,而应用程序分层这是一种代码的组织方式。MVC模式与应用程序分层的目标都是一致的:为了解耦和、提高代码复用性。

     

            

  • 相关阅读:
    著名结构生物科学家颜宁宣布辞去美国普林斯顿大学教职,回国出任深圳医学科学院创始院长所谓何?
    在 Net7.0环境下测试了 Assembly.Load、Assmebly.LoadFile和Assembly.LoadFrom的区别
    易基因|深度综述:表观遗传机制在慢性疼痛中的作用(DNA甲基化+组蛋白修饰+非编码RNA)
    kubernetes,service详解下
    TouchGFX之文本和字体
    【论文解读】Attentional Feature Fusion
    P02 Look And Feel
    C语言变量定义选择题
    【记录】go语言编程规范梳理总结
    新能源汽车如何融合互联网,结合消费者习惯打造全新的营销策略?
  • 原文地址:https://blog.csdn.net/cccccccmmm/article/details/126798731