JSP、EL表达式、JSTL标签库干货(建议收藏)
目录JSP(Java Server Pages)类似于ASP技术,它是在传统的网页HTML文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(.jsp)。JSP本质上是一个简化的Servlet设计,JSP的实现过程: .jsp 文件会被(由服务器提供,如Tomcat的Jasper)译为 .java 文件,最终生成 .class 文件。
- JSP语法
- 嵌套Java代码的格式
- JSP指令
- 指令使用格式
- page指令
- include指令
- taglib指令
- JSP的9个内置对象
- EL表达式
- 基本使用格式
- 获取4个域(pageContext、request、session、application)中值
- 完全限定获取方式
- 隐式获取
- 对象的展示
- 对象的字段(属性)的获取
- EL的运算
- JSTL标签库
- 使用前的准备
- 标签使用语法
- 重要标签
标签
标签
标签
标签<c:choose>
标签<c:forEach>
标签
标签
标签
标签
标签
JSP语法
除了HTML语法,扩展的其他内容如下
嵌套Java代码的格式
- 声明标签:
<%!
变量声明或方法声明
%>
- 表达式标签:
<%=
表达式
%>
表达式的值将输出到JSP页面的相应位置 - 代码标签:
<%
Java代码
%>
页面上动态显示的内容
JSP指令
用于声明 JSP 页面的属性,如编码方式、文档类型等等。一共有三种指令:page、include、taglib。
指令使用格式
<%@
directive
attribute1="value1"
attribute2="value2"
...
%>
directive
: 指 page、include、taglib其中之一attribute
:属性名value
:属性值...
:这个不是语法哦,指其他未写出的attribute="value"
page指令
属性名 | 属性值 | 描述 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
language | java | 解释JSP文件时采用的语言。默认为java | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
extends | 类的全名 | 由该JSP文件生成的类继承哪个类,JSP为Servlet,因此当指明继承普通类时需要实现Servlet的init、destroy等方法 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import | 包名/类名 | import是唯一可以声明多次的page指令属性。一次可以导入多个类,中间用英文逗号隔开 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
session | true/false | 是否JSTL标签库的使用等。
作用:用来指明JSP页面内使用的JSP标签库,taglib指令有两个属性,uri为类库的地址,prefix为标签的前缀
JSP的9个内置对象
EL表达式
基本使用格式
获取4个域(pageContext、request、session、application)中值
完全限定获取方式
隐式获取
对象的展示
下面是在网页中输出的结果 ??
可以看出来EL对于对象的展示其实就是调用了 对象的字段(属性)的获取
com.java.webtest.Student
myTest.jsp
?? EL表达式获取对象字段(属性)是通过反射机制。 EL的运算
JSTL标签库
使用前的准备
标签使用语法
重要标签
|
属性 | 缺省 | 说明 |
---|---|---|
value | - | 向域中存入的变量值 |
var | - | 向域中存入的变量名 |
scope | page | 指定存储在4个域中的哪一个 |
target | - | Java对象 |
property | - | Java对象的字段(属性)。因为使用的是反射技术,与前面EL表达式获取字段值同理:该字段必须有set方法 |
标签
属性 | 缺省 | 说明 |
---|---|---|
value | - | 需要显示出来的值 |
default | - | 如果value的值为null,则显示default的值 |
escapeXml | true | 是否转义xml字符。有些字符如< 在xml中被认为是< ,若要它的字面意思,就需要使用转移 |
案例 ??
com.java.testclass.Person
package com.java.testclass;
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return name+" is "+age+" years old.";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
JSTL-test.jsp
<%@ page import="com.java.testclass.Person" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt_rt" %>
JSTL-test
<%
pageContext.setAttribute("person1",new Person("Tom",18));
pageContext.setAttribute("person2",null);
%>
********** set & out Test **********
<%--向域中存值--%>
<%--设置Java对象的字段--%>
18
<%--输出--%>
person1 : ${person1}
person2 :
结果
********** set & out Test **********
apple is fruit.
person1 : David is 18 years old.
person2 : person2 is null!
<==when escapeXml is true==>
<==when escapeXml is false==>
标签
属性 | 缺省 | 说明 |
---|---|---|
test | - | if 的条件表达式 |
var | - | 定义一个变量存储if 条件表达式的结果 |
scope | page | var变量的JSP范围 |
<c:choose>
标签
属性 | 缺省 | 说明 |
---|---|---|
test | 无 | 如果表达式的结果为true,则执行体内容,false则相反 |
<c:choose>
<c:when test="boolean表达式">
<c:otherwise>
</c:otherwise>
<c:forEach>
标签
用于遍历集合元素
属性 | 缺省 | 说明 |
---|---|---|
var | - | 遍历用的循环变量 |
items | - | 被遍历的集合对象 |
varStatus | - | 存放本轮循环变量的相关参数 |
begin | 0 | 遍历起点下标 |
end | 最后元素下标 | 遍历终点下标 |
step | 1 | 每次迭代的间隔数 |
直接看例子 ??
<%
int[] arr = {100,200,300,400,500,600,700,800,900,1000};
pageContext.setAttribute("arr",arr);
%>
********** process control Test **********
foreach arr
from ${status.begin} to ${status.end} by step = ${status.step}
arr[${status.index}] = ${it} , count = ${status.count}
结果
********** process control Test **********
foreach arr from 1 to 7 by step = 2
arr[1] = 200 , count = 1
arr[3] = 400 , count = 2
arr[5] = 600 , count = 3
arr[7] = 800 , count = 4
从结果count属性并不是与index属性关联的值,index是数组的下标,count仅作为循环的计数器。
标签
标签
该标签用于格式化输出Date类型变量,比较常用
属性 | 缺省 | 说明 |
---|---|---|
value | - | 用于指定被格式化对象 |
pattern | - | 格式化的模式,与SimpleDateFormat的参数设置一样 |
var | - | 指定产生的格式化字符串所存放的变量,若不指定则直接输出在页面中 |
scope | page | 指定var变量的存储域 |
type | date | 说明value对象包含时间或包含日期还是两者兼具。取值为date/time/both |
标签
的逆向过程,用于将指定字符串转化为日期类型
属性 | 说明 |
---|---|
value | 用于指定被转化的字符串 |
pattern | 指定解析字符串的格式 |
var | 指定生成的时间对象所存放的变量 |
请看测试代码 ??
<%
pageContext.setAttribute("now",new Date());
%>
******************** fmt Test ********************
before formatting : ${now}.
after formatting : ${parse_date}.
date get from string : ${gotten_date}.
结果
******************** fmt Test ********************
before formatting : Sat Mar 13 23:03:16 CST 2021.
after formatting : 2021-03-13.
date get from string : Sat Mar 13 00:00:00 CST 2021
? 注意第一个日期与第三个日期的差别,这是由于第一次转换的时候丢失了时间信息
标签
主要用于控制数字的展示格式。还记得前面EL运算10/3的结果展示为3.3333333333333335,通常我们不想展示这么多小数位。
属性 | 说明 |
---|---|
maxIntegerDigits | 整数部分最多的位数 |
minIntegerDigits | 整数部分最少的位数 |
maxFrctionDigits | 小数部分最多的位数 |
minFrctionDigits | 小数部分最少的位数 |
var | 指定存储格式化结果的变量 |
scope | 指定var属性的作用域 |
Java学习路线正在建造中欢迎学习讨论:https://www.cnblogs.com/dai-blog/ ??
转载请注明出处: