首先,我们需要导入JSTL(Jsp Standard Tag Library)开发包,下载地址:https://archive.apache.org/dist/jakarta/taglibs/standard/binaries/jakarta-taglibs-standard-1.1.2.zip
下载下来之后,解压缩,把lib文件夹下的两个jar包jstl.jar和standard.jar放在项目虚拟目录下的lib文件夹下,然后把tld文件夹下的所有文件都放在(记住是所有)WEB-INF文件夹下,如果放在了WEB-INF的子文件夹下,那么还需要在web.xml里面进行配置(其实为了使用简便,通常都会配置的,所以建议放在一个子文件下,比如tags,这样显得目录清晰)。
其中第一个是我自己定义的tld文件,其实开发包中tld文件夹下的文件不止这5个:
但是为了不出错,要全部导入,但可以不用全部配置。
然后我们可以使用这些标签了:
首先声明taglib:
其中的prefix就是当前页中代表此tag库的一个变量名,uri就是web.xml配置中<taglib-uri>指定的字符串,这个一定要一致。
使用标签库:
out标签
out标签主要用于输出内容,有三个属性,value、default和escapeXml,value指定输出的内容,可以是一个字符串,也可以是属性变量(表达式输出),default表示当输出的value不存在(也就是属性变量输出)时要显示的内容,escapeXml如果设置为true,那么">"会变成>,默认为true。输出格式有以下两种:
set标签
set标签可以设置属性及其值,格式如下:
可以看出,它和pageContext.setAttribute()、request.setAttribute()一样。
不仅如此,它还可以设置对象的属性:
target其实是此jsp页的属性名字,而property则是对象这个类里面的属性。
这里千万要注意,target是jsp页面属性的名字,并不是对象变量的名字,在这里是pp,而不是person。
remove标签
catch标签
if标签
choose标签
choose相当于Java的switch-case,choose相当于switch,里面的when相当于case,other相当于default,而且这些标签都自带break功能,也就是说只能执行一个条件下的内容,纠正,otherwise最多只能出现1次。
forEach标签
forTokens标签
相当于String类的split方法,而且它可以直接输出分割后的集合。
import标签
我们可以导入百度的网页:
传递参数:
url标签
我觉得这个标签的作用就是产生一个新链接,并且更好的把参数封装在一起,之后使用的时候用var指定的变量去指向。
redirect标签
相当于response.sendRedirect(url),属于客户端跳转(地址栏会变)。
国际化标签库
首先回忆一下java的国际化程序处理:
Locale类负责封装各个国家和地区的信息,通过它设置要适配的国家和地区;ResourceBundle类负责访问资源文件;MessageFormat负责处理动态文本(格式化资源文件中的占位字符串)。
先看一下这三个类的主要方法:
MessageFormat主要用到了一个静态方法:
综合用法如下:
注意中文属性文件不能直接写成中文,而是以Unicode编码的形式写入(命令行运行native2ascii.exe把中文转换成Unicode码),否则会乱码。
总之就是,先用Locale设置好地区和语言,属性文件按照Xxx_zh_CN.properties、Xxx_en_US.properties的形式去命名,ResourceBundle.getBundle()去找的时候第一个参数是文件名,只写前面的即可,java会自动根据Locale的指向去找相应的文件,.properties后缀也不用声明,java会自动加载所有.properties后缀的文件。找到资源文件之后就是获取相关value,因为资源文件中的内容全部都是key-value的形式(用空格隔开),所以按照相关的key去找即可。MessageFormat是用来处理动态文本的,资源文件中以“{0}、{1}..”的格式来声明占位符,MessageFormat的format方法的第一个参数是要格式化的内容(即得到的value),后面的一系列参数都是要替换掉占位符的字符串。
现在来看Web中的国际化处理:
首先资源文件放在WEB-INF的classes文件夹下,JSTL使用的是fmt.tld作为格式化标签库的定义文件。来看一下相关的标签:
可见相同scope下的Locale会被替换掉。
如果不想重复设置Locale,可以使用setBundle标签设置一个默认的读取资源名称,然后根据var去使用它。
数字格式化:
日期时间格式化:
反格式化日期时间:
设置时区:
Sql标签库
Xml标签库
函数标签库