SpringMVC对JSP的支持---Spring的JSP标签库---Spring通用标签库
1. Spring通用标签库 JSP的标签库 除了JSTL(JSP 标准标签库),Spring提供了两个标签库 用来帮助定义Spring MVC Web的视图。 Spring的 表单绑定 JSP标签库和Spring通用标签库
PS:JSTL 和 Spring的JSP标签库 互为补充或者互为替代吧。都是为了JSP添加功能
2.要使用Spring通用标签库 在页面上声明如下
<%@ taglib prefix="s" uri="http://www.springframework.org/tags"%>
3.通用标签库包含的10个JSP标签
<s:bind> <s:escapeBody> <s:hasBindErrors> <s:htmlEscape> <s:message>标签
<s:nestedPath> <s:theme> <s:escapeBody>标签 <s:transform> <s:eval>
4.<s:message>标签 展现国际化信息
它可以解决的问题是:1.将JSP中硬编码的信息抽取到了属性文件中,一站式地修改应用中的所有文本信息 2.根据用户的语言设置国际化这些文本
1.<s:message>标签将JSP中硬编码的信息抽取到了属性文件中,一站式地修改应用中的所有信息: 原来如果要修改首页中的欢迎信息,<h1>welcom you</h1> 需要打开home.jsp 对其修改。但是应用中的文本散步到多个模板,如果大规模修改应用信息,需要修改大量的JSP文件。现在只要修改属性所属的属性文件即可。
步骤1:配置信息源
Spring有多个信息源的类,它们都实现了MessageSource接口。常用的有ResourceBundleMessageSource和ReloadableResourceBundleMessageSource。它们会从一个属性文件中加载信息
ResourceBundleMessageSource 在类路径的属性文件中解析信息 basename属性。如果要重新加载信息属性,需要重新编译或重启应用
ReloadableResourceBundleMessageSource。它的basename属性可以设置为在类路径下(以“classpath:”作为前缀)、文件系统中(以“file:”作为前缀)或Web应用的根路径下。它能够重新加载信息属性,而不必重新编译或重启应用
(没有前缀)查找属性
JavaConfig中配置ResourceBundleMessageSource类
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("messages");
return messageSource;
}
JavaConfig中配置ReloadableResourceBundleMessageSource类
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("message");
messageSource.setCacheSeconds(10);
return messageSource;
}
步骤2:创建属性文件
在类路径下 (Project\target\classes) 创建属性文件message.properties,内容如下
spittr.welcome = welcome you stranger
步骤3:在jsp文件中使用属性 <s:message>将会根据key为spittr.welcome的信息源来渲染文本
<%@ taglib prefix="s" uri="http://www.springframework.org/tags"%>
<html>
<body>
<h2><s:message code="spittr.welcome"/></h2>
</body>
</html>
2.<s:message>标签 根据用户的语言设置国际化这些文本 比如为语言设置为中文的用户展现中文的欢迎信息 存疑????
5.<s:url>标签 创建URL
具体待补充 参考 Spring实战(第4版)书
6.<s:escapeBody>标签 转义内容
首先要了解一下,在HTML中,某些字符是预留的,比如<>。如果在html代码中写<h1>Hello</h1> ,浏览器会把它渲染成一级标题并显示 Hello。如果想在浏览器中显示<h1>Hello</h1> ,也就是让浏览器正常显示<>,需要使用<>的转义字符<,>。但是<s:escapeBody>标签中 可以直接写<> 并且在浏览器中显示<>。以下代码功能是等同的。浏览器中会显示二级标题 <h2>
<%@ taglib prefix="s" uri="http://www.springframework.org/tags"%>
<html>
<body>
<h2><s:message code="spittr.welcome1"/></h2>
<!--使用<s:escapeBody>标签-->
<h2> <s:escapeBody htmlEscape="true"><h2></s:escapeBody> </h2>
<!--手动写转义字符,可读性差-->
<h2><h2></h2>
</body>
</html>