/**
* Abstract base class for PropertyEditors that need
* to resolve placeholders in paths.
*
* <p>A path may contain ${...} placeholders, to be resolved as
* system properties: e.g. ${user.dir}.
*
* @author Juergen Hoeller
* @since 1.1.2
* @see #PLACEHOLDER_PREFIX
* @see #PLACEHOLDER_SUFFIX
* @see System#getProperty(String)
*/
public class AbstractPathResolvingPropertyEditor extends PropertyEditorSupport {
public static final String PLACEHOLDER_PREFIX = "${";
public static final String PLACEHOLDER_SUFFIX = "}";
protected static final Log logger = LogFactory.getLog(
AbstractPathResolvingPropertyEditor.class);
/**
* Resolve the given path, replacing ${...} placeholders with
* corresponding system property values if necessary.
* @param path the original file path
* @return the resolved file path
* @see #PLACEHOLDER_PREFIX
* @see #PLACEHOLDER_SUFFIX
*/
protected String resolvePath(String path) {
StringBuilder buf = new StringBuilder(path);
// The following code does not use JDK 1.4's StringBuffer.indexOf(String)
// method to retain JDK 1.3 compatibility. The slight loss in performance
// is not really relevant, as this code will typically just run on startup.
int startIndex = path.indexOf(PLACEHOLDER_PREFIX);
while (startIndex != -1) {
int endIndex = buf.toString().indexOf(PLACEHOLDER_SUFFIX,
startIndex + PLACEHOLDER_PREFIX.length());
if (endIndex != -1) {
String placeholder = buf.substring(
startIndex + PLACEHOLDER_PREFIX.length(), endIndex);
String propVal = System.getProperty(placeholder);
if (propVal != null) {
buf.replace(startIndex, endIndex + PLACEHOLDER_SUFFIX.length(),
propVal);
startIndex = buf.toString().indexOf(PLACEHOLDER_PREFIX,
startIndex + propVal.length());
} else {
logger.warn("Could not resolve placeholder '" +
placeholder + "' in resource path [" +
path + "] as system property");
startIndex = buf.toString().indexOf(PLACEHOLDER_PREFIX,
endIndex + PLACEHOLDER_SUFFIX.length());
}
} else {
startIndex = -1;
}
}
return buf.toString();
}
}
分享到:
相关推荐
在Spring框架中集成Velocity,首先你需要在项目的类路径下添加Velocity的相关库,包括`velocity.jar`、`velocity-tools-view.jar`等。这些库提供了Velocity引擎以及与Spring的适配器,使得在Spring应用中使用...
这里,`your.package.SetCharacterEncodingFilter`应替换为你实际的类路径。 3. 最后,确保所有处理请求的组件(如Action类)和视图(如JSP页面)也使用相同的字符编码。在JSP页面中,可以通过`;charset=UTF-8" %>`...
此外,Spring MVC还依赖于Jackson或Gson等库进行JSON序列化和反序列化,将Java对象转换为JSON字符串,或者将JSON数据转换为Java对象。 为了实现JSON与后端数据的交互,我们通常还需要创建一个名为`MessageConverter...
3. **字符串工具**:可能包含字符串的拼接、替换、分割等操作,便于字符串的日常处理。 4. **文件操作**:可能提供文件读写、路径处理、文件上传下载等功能,简化文件操作。 5. **网络请求**:可能包含了HTTP请求...
敏感词是对文档内容中某些国家或法律禁止的词汇、不文明词汇(如操、他妈的等)进行自动替换,前台网友阅读文档时看到个词语将会被替换成别的字符,如“***”,在大型门户里面经常能看到这种功能。点击“数据中心”...
简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,...
这里,`prefix`和`suffix`分别定义了模板文件的路径前缀和后缀,`order`则用于设置视图解析器的优先级。 3. **创建模板文件**: 在`src/main/webapp/WEB-INF/templates`目录下创建模板文件,例如`index.ftl`,...
Spring MVC默认使用的是Jackson或Gson等库进行JSON转换,但我们可以自定义配置,用Fastjson替换它们。首先创建一个实现了`HttpMessageConverter`接口的Fastjson转换器类,例如`FastjsonHttpMessageConverter`。 3....
- **用于注入数据的注解**:如`@Autowired`、`@Qualifier`、`@Resource`和`@Value`,其中前三种主要用于注入Bean类型的依赖,而`@Value`则常用于注入基本类型和字符串。 - **改变作用范围的注解**:如`@Scope`,...
这可能来自于数据库、API接口、文件或任何其他数据源。Java提供了丰富的库,如JDBC用于数据库操作,或者使用HTTP客户端库(如Apache HttpClient或OkHttp)获取远程数据。 2. **模板引擎**:数据准备好后,我们需要...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
replace`(字符串替换)等,以及`<#list>`、`<#nested>`等指令,增强了模板的功能。 7. **模板继承和导入**: - FreeMarker支持模板继承,通过`<#import>`和`<@macro>`,可以创建可重用的片段和宏,提高代码的复用...
2. 转义(Escaping):如果需要在输出中包含特殊字符,如`和`>`,可以使用`<`和`>`进行转义。 3. 注释(Comment):使用`<!--...-->`添加注释,注释不会出现在最终输出中。 4. 条件语句(Conditional ...
在移动应用开发中,Android Studio的项目结构中,`res`目录包含各种资源文件,如布局(layout)、图片(drawable)、字符串(strings)等,这些资源通过特定的XML文件进行定义和管理。iOS开发中,资源文件通常放在...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
- **设计模式的六大原则**:单一职责原则、开放封闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则。 - **常见的单例模式**:饿汉式、懒汉式、双重检查锁定式等。 - **设计模式在实际场景中的应用**...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...