前言
Spring4+ mybatis3+springMVC。maven管理项目。在做支付项目需要用到密钥文件。需要在service中读取密钥文件路径。通用做法把密钥文件放到src/main/resources/common/aaa.pfx。在读取文件路径时遇到问题
方法一
做过文件下载想到用绝对路径拿到密钥文件在服务器上的路径。
需要通过HttpServletRequest request 来得到realPath。
- request需要从action作为参数传过来,否则在service中拿不到。
- getRealPath已经不推荐使用单元测试时会报异常。
- 拿到的路径需要再次加工E:/study/My-FH-workspace/pm/web-app 这个是得到的项目路径,放在resource中的密钥文件在web-app/WEB_INF/classes/common/aaa.pfx
方法二
通过spring提供强大的配置文件加载路径读取功能获得密钥文件路径
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources=resolver.getResources("classpath:META-INF/INDEX.LIST"); Assert.assertEquals(1, resources.length);
resources = resolver.getResources("classpath:common/aaa.pfx"); Assert.assertTrue(resources.length == 1); URL path = resources[0].getURL();
String pathStr = path.getPath().substring(1);
|
引申到Spring资源加载
资源文件分为两种
- 打包后放在classes下面的。在maven中放在src/main/resources/下面的。
用spring加载配置文件的方式读取
- 放在项目根目录下的。request.getrealPath()的方式读取
- 放在WEB-INF下的。request.getrealPath()的方式读取
Spring 支持antPattern风格的资源路径匹配。在加载类路径资源时提供前缀”classpath:”还提供一种加载所有匹配写法”classpath*:”
注入reource
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <bean id="resourceBean1" class="cn.javass.spring.chapter4.bean.ResourceBean4"> <property name="resources"> <array> <value>cn/javass/spring/chapter4/test1.properties</value> <value>log4j.xml</value> </array> </property> </bean> <bean id="resourceBean2" class="cn.javass.spring.chapter4.bean.ResourceBean4"> <property name="resources" value="classpath*:META-INF/INDEX.LIST"/> </bean> <bean id="resourceBean3" class="cn.javass.spring.chapter4.bean.ResourceBean4"> <property name="resources"> <array> <value>cn/javass/spring/chapter4/test1.properties</value> <value>classpath*:META-INF/INDEX.LIST</value> </array> </property> </bean>
|
主要介绍第二种resourceBean2可以在需要读取resource配置文件尤其是properties中使用