• JavaWeb:jsp



    本文内容:

    • JSP的介绍
    • jsp的使用
    • EL表达式
    • JSTL的使用

    首发日期:2018-06-18


    JSP的介绍:

    • JSP全称Java Server Pages。
    • 与静态网页格式的html不同的是,jsp是一种动态网页开发技术(动态的网页代表能从数据库等地方获取“动态”的资源,比如股市网页中股市的价格不可能是静态写在html中的,那会一层不变)
      • JSP文件后缀名为 *.jsp
    • 它使用JSP标签在HTML网页中插入Java代码标签通常以<%开头以%>结束。
      • 一个常用的功能是:<%= 表达式 %> 可以将表达式的值输出到网页中,比如image会变成image
    • JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。
    • 在早期版本中,jsp也可以用于做整个的开发(因为jsp也可以操作数据库,所以jsp既能获取数据,又能输出数据到网页中),但由于后期的功能增多,jsp逐渐偏重于负责页面的呈现,而不负责数据获取等业务。

    补充:

    • jsp本质上还是一种servlet,它与servlet类似(你可能了解到servlet可以返回数据给浏览器,它是通过实现的。),如果你查看在tomcat里面的编译成功的.java和class文件,你会发现jsp会转成.java文件,然后里面的类继承了一种servlet类。image同时它的数据输出本质上是使用out.write()来使动态数据能输出到网页中的。

    jsp的使用:

    执行代码:

    • jsp中可以使用<% %>来包裹java代码,它与在普通java程序中使用java代码没有什么区别
    • 它的意义也主要是“执行代码”。通过执行代码,可以得到某些计算结果或过程,从而能使用到jsp中。
    • 例子:
      • image【这只是一个简单的例子。但无论如何,执行代码的意义无非就是得到过程或结果罢了。】

    输出结果:

    • jsp中可以使用<%=表达式 %>来把表达式的值插入到jsp中。

    • 例子:

      • image结果是image

      • image

    变量声明:

    • jsp中可以使用<%! 变量声明 %>来声明变量,以便后续的使用。【一个<%! %>的变量声明可以是多个的】
    • 例子:
      • image

    注释:

    • 因为html的注释是无法影响jsp语句的【将某一段jsp代码注释,这段代码也依旧会执行】,所以需要jsp的注释,jsp使用<%--  --%>来包裹注释
    • 例子:
      • <%-- JSP 注释 --%>

    流程控制语句:

    【对于普通的循环运算,可以在<% %>中插入循环语句。但如果是想要将循环的内容输出到网页中,那么就需要使用jsp的循环了。(选择语句也是这样子)】

    jsp可以使用java的流程控制语句,下面仅仅使用比较常见的流程控制语句来举例。

    • 循环语句:
      • 格式:image,就是提前结束{,利用<% %>来分隔完整的{}
      • 例子:image
    • 选择语句:
      • 格式:与循环语句的格式类似,也是使用提前结束{,利用<% %>来分隔完整的{}
      • 例子:image

    三大指令:

    • <%@ page ... %>
      • 意义:定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
      • 格式:<%@ page attribute="value" %>
      • 属性attribute:
        • language :指定jsp所用的脚步语言,值仅可为"java"  【本意想要把jsp扩展到其他语言】
        • import  :指定导入要使用的Java类。比如
          • <%@page import="java.util.*"%>
          • <%@page import="java.sql.Date"%>
          • 导入自己写的类,比如:<%@page import="test.demo1.Student"  %>
        • pageEncoding :页面的编码方式。 【常用为 pageEncoding="UTF-8"】
        • contype :指定当前JSP页面的MIME类型和字符编码【常用为 contentType="text/html; charset=UTF-8"】
        • errorPage :指定发生错误时跳转的页面。值为一个url 【比如:errorPage="bottom.jsp"】
        • isErrorPage :指定当前页面是否为错误页【当值为true时,才可以使用jsp的Exception对象】 
        • session:指定JSP页面是否使用session 【默认是session="true"】
    • <%@ include ... %>
      • 意义:把其他文件包含到jsp文件中。比如网页头部不想重复写,那么可以存储到一个jsp中,然后再include进来。
      • 格式:<%@ include file="" %> 【file的值是目标文件路径】
      • 例子:image
    • <%@ taglib ... %>
      • 意义:引入标签库的定义,可以是自定义标签 。【具体使用可以参考下面的jstl的使用】
      • 格式:<%@ taglib uri="uri" prefix="prefixOfTag" %>
        • uri的值是tld文件中的uri名称;prefix的值是标签名简写

    动作标签:

    动作标签的意义是,他能执行某些“动作”。

    格式:<jsp:action_name attribute="value" />

    • 包含页面:<jsp:include page=""></jsp:include>
      • 与include指令不同的是,include指令可以说是静态包含(把另一个文件的内容装进来再转成java文件),include动作可以说是动态包含(把目标文件也转成java文件,访问的时候动态获取对应java文件的内容)
      • 例子:image
    • 请求转发:<jsp:forward page=""></jsp:forward>
      • 例子:image
    • 参数传递:<jsp:param value="" name="" >
      • 可以写在<jsp:forward>或<jsp:include>中,起到参数传递的作用。
      • imageimage

    内置对象:

    由于开发过程中会经常使用到request esponse等对象,所以为了简便,jsp的页面加载完毕后就会自动创建一些常用对象(通常称为九大内置对象)

    • request:
      • 对象类型:HttpServletRequest
      • 意义:等同于servlet中的request
    • response:
      • 对象类型:HttpServletResponse
      • 意义:等同于servlet中的response
    • config
      • 对象类型:ServletConfig
      • 意义:等同于servlet中的servletConfig
    • application
      • 对象类型:ServletContext
      • 意义:等同于servlet中的servletContext
    • session
      • 对象类型:HttpSession
      • 意义:等同于servlet中的session
    • exception
      • 对象类型:Exception
      • 当发生异常时,异常信息都会存储到这个对象中。可以使用这个对象来获取错误信息。
    • page
      • 对象类型:Object
      • 意义:代表当前页对象,类似于this
    • out
      • 对象类型:JspWriter
      • 意义:就是jsp的输出流对象,可以用来输出。但这个对象的输出是由缓冲区的,要等到缓冲区满了或时间到了才输出。
    • pageContext
      • 对象类型:PageContext
      • 意义:代表着整个页面的内容,比如它包含了其他8个内置对象的获取方法,所以可以用来获取页面相关的内容。

    域对象:

    • pageContext,request,session,application对象都可以用来作为域对象;
    • 可作为域对象,表示这些对象可以存值;利用这些域对象的作用范围,我们可以在不同的jsp间实现数据传递。
    • 存储数据:域对象.setAttribute("数据名",数据对象)
    • 获取数据:域对象.getAttribute("数据名")
    • 删除数据:域对象.removeAttribute("数据名")
    • request域:
      • 在这个域存储的数据只能在同一次请求中使用。【如果使用转发的,转发过去的request存储着之前的值】
    • pageContext域:
      • 在这个域存储的数据仅在当前页面范围内有效。
    • session域:
      • 在这个域存储的数据仅在一次会话过程中生效。
    • application域:
      • 在这个域存储的数据在整个服务器范围内有效。
    • 例子:在一个jsp中存储数据;在另一个中获取。
      • demo1.jsp的部分代码:image
      • demo2.jsp的部分代码:image
      • 结果:demo1.jsp:image
      • 结果:demo2.jsp:image

    EL表达式:

    意义:

    • 简化jsp代码

    使用:

    • 取值: ${表达式 }  【${表达式 } 相当于<%=表达式 %>】
      • 取域对象的数据:
        • 如果表达式为一个变量名;那么代表从域对象中获取数据;默认顺序是pageContext,request,session,application;也可以指定查找域,比如${ pageScope.name },{ requestScope.name},${ sessionScope.name },${ applicationScope.name }
        • 如果数据是一个带有下标的数据(集合之类的)那么可以使用数据名[下标]来逐一获取;如果数据是一个类对象,那么获取类中的数据时使用对象.数据名(对于Map,也使用对象.键名 来获取)
      • 例子:
        • image
        • image
        • image
    • 运算:EL表达式也可以使用某些运算 ,${运算表达式}
      • 判断数据是否为空:${empty name }
      • 三目运算符:比如${name == null?"null":name }
      • 判断关系:比如${ age >18}

    隐式对象:

    EL表达式有11个隐式对象:

    对象 意义
    pageContext 存储了网页相关信息
    pageScope 作用域相关对象
    requestScope 作用域相关对象
    sessionScope 作用域相关对象
    applicationScope 作用域相关对象
    param 参数信息相关对象,存储了传过来的参数
    paramValues 参数信息相关对象,存储了传过来的参数的值
    header 头信息相关对象,存储了头部信息
    headerValues 头信息相关对象,存储了头部信息的值
    cookies cookies对象
    initParam 存储了全局初始化参数

    JSTL的使用:

    意义:

    • 仅仅依靠jsp自带的几个内置标签是无法实现多么复杂的功能的。
    • 为了增加功能,所以需要扩展标签库。
    • jstl全称是JSP Standard Tag Library,即 jsp标准标签库,是最常用的扩展标签库。

    使用:

    • 首先需要导入标签库,借助taglib指令:
      1. 导入jar文件jstl.jar和standard.jar到工程的WebContent/Web-Inf/lib
      2. 在jsp页面上,使用taglib 指令导入标签库。使用的标签库一般是core核心标签库。使用某些功能,需要导入jstl的其他库。image
      3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
        1. uri是tld文件中的uri,如果不关注,可以使用代码补全帮助填写即可。
        2. prefix是标签库的简写,功能上使用别的名字也能代表这个标签库,但约定俗成core核心库的简写是c
    • 使用标签:
      • 格式:<c:标签名></c:标签名>比如:<c:set var="age" value="18" ></c:set>

    常用标签:

    • 存储数据标签:<c:set></c:set>
      • 属性:
        • value:要存储的值
        • var:存储数据的变量名
        • scope:数据存储到哪个域对象中,默认是pageContext域中
      • 举例:
        • image
    • 删除数据标签:<c:remove ></c:remove>
      • 属性:
        • var:存储数据的变量名
        • scope:删除哪个域对象中的数据,默认是pageContext域
      • 举例:image
    • 输出标签<c:out value=""></c:out>,与<%= %>类似:
      • 属性:
        • value:要输出的内容
      • 举例:image
    • 循环标签:<c:forEach ></c:forEach>
      • 属性:
        • items:要被循环的信息,没有items时相当于迭代begin到end的数
        • begin:开始的位置
        • end:结束的位置
        • step:步长
        • var:存储迭代对象的变量名
        • varStatus:迭代状态
      • 举例:
        • image
    • 分支标签:<c:if test="">
      • 属性:
        • test:判断的条件
        • var:用于存储条件结果的变量
        • scope:var存储到哪个域,默认是pageContext域
      • 举例:image

  • 相关阅读:
    XCTF EasyHook
    [GXYCTF2019]simple CPP
    [BJDCTF2020]ZJCTF,不过如此
    Open_basedir绕过
    P2240 【深基12.例1】部分背包问题
    PHP深浅拷贝
    关于_tostring[php]的另类利用
    通用Mapper常用方法
    @GetMapping、@PostMapping和@RequestMapping的区别
    IDEA 下载依赖包的问题
  • 原文地址:https://www.cnblogs.com/progor/p/9194300.html
Copyright © 2020-2023  润新知