欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java:jsp

程序员文章站 2022-05-16 12:21:20
本文内容: JSP的介绍 jsp的使用 EL表达式 JSTL的使用 首发日期:2018-06-18 JSP的介绍: JSP全称Java Server Pages。 与静态网页格式的html不同的是,jsp是一种动态网页开发技术(动态的网页代表能从数据库等地方获取“动态”的资源,比如股市网页中股市的价... ......


本文内容:

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

 

 

首发日期:2018-06-18


JSP的介绍:

 

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

 

 

补充:

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

 


jsp的使用:

 

执行代码:

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

 

 

输出结果:

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

  • 例子:

    • 结果是

 

 

变量声明:

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

 

注释:

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

 

 

 

流程控制语句:

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

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

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

    三大指令:

    • <%@ 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的值是目标文件路径】
      • 例子:

     

     

    • <%@ 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文件的内容)
      • 例子:
  • 请求转发:<jsp:forward page=""></jsp:forward>
    • 例子:
  • 参数传递:<jsp:param value="" name="" >
    • 可以写在<jsp:forward>或<jsp:include>中,起到参数传递的作用。
  •  

     

    内置对象:

    由于开发过程中会经常使用到request\response等对象,所以为了简便,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的部分代码:
      • demo2.jsp的部分代码:
      • 结果:demo1.jsp:
      • 结果:demo2.jsp:

     

     

     

     


    EL表达式:

    意义:

    • 简化jsp代码

     

    使用:

    • 取值: ${表达式 }  【${表达式 } 相当于<%=表达式 %>】
      • 取域对象的数据:
        • 如果表达式为一个变量名;那么代表从域对象中获取数据;默认顺序是pageContext,request,session,application;也可以指定查找域,比如:${ pageScope.name },{requestScope.name},${ sessionScope.name },${ applicationScope.name }
        • 如果数据是一个带有下标的数据(集合之类的)那么可以使用数据名[下标]来逐一获取;如果数据是一个类对象,那么获取类中的数据时使用对象.数据名(对于Map,也使用对象.键名 来获取)
      • 例子:
    • 运算: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的其他库。
      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域中
      • 举例:
    • 删除数据标签:<c:remove ></c:remove>
      • 属性:
        • var:存储数据的变量名
        • scope:删除哪个域对象中的数据,默认是pageContext域
      • 举例:
    • 输出标签,与<%= %>类似:
      • 属性:
        • value:要输出的内容
      • 举例:
    • 循环标签:<c:forEach ></c:forEach>
      • 属性:
        • items:要被循环的信息,没有items时相当于迭代begin到end的数
        • begin:开始的位置
        • end:结束的位置
        • step:步长
        • var:存储迭代对象的变量名
        • varStatus:迭代状态
      • 举例:
    • 分支标签:<c:if test="">
      • 属性:
        • test:判断的条件
        • var:用于存储条件结果的变量
        • scope:var存储到哪个域,默认是pageContext域
      • 举例: