发表于: 2016-05-05 21:41:33
1 2818
【操作步骤】
1.把容联云通讯的账号密码以配置文件的形式写入Spring项目中。
1.1 背景:使用容联云通讯接口时,官网会提供给开发者五个参数:serverIP、serverPort、accountSid、accountToken、appId。这5个参数就相当于是开发者的账号密码。在使用这个接口时,需要新建一个CCPRestSmsSDK类(这个类是官方jar包中的一个类),然后调用init、setAccount、setAppId这三个函数,把前面的5个参数给赋值进去。
1.2 我以前的做法:刚开始我建立了一个CcpSmsUtil类,在这个Util类中,我new了一个CCPRestSmsSDK类,然后调用init、setAccount、setAppId这三个函数,把5个参数赋值进去。当需要使用云通讯服务时,我就直接调用CcpSmsUtil类,就可以了。也就是说,此时,我的所有账号密码是写在CcpSmsUtil类中的。
1.3 改进后的做法:现在我使用Spring的配置文件把账号密码写入配置文件中,而不是写入CcpSmsUtil类中。由于官方jar包中的CCPRestSmsSDK类没有setter和getter方法,也没有全参数的构造函数,所以没有办法直接把CCPRestSmsSDK类配置进xml文件中。所以我新建了一个CcpSmsUtil类,在这个类中我以static的方式new了一个CCPRestSmsSDK类(为什么要用把它写为静态类呢?因为在我的CcpSmsUtil类中还有一个SendTemplateSMS方法,这个SendTemplateSMS方法调用了CCPRestSmsSDK类中的方法,所以我要让new出来的CCPRestSmsSDK对象作为全局变量)。然后我把CcpSmsUtil类以xml配置文件的形式写入了spring中。
1.4 注意事项:额,要把CcpSmsUtil类中的方法写成static静态的,我刚开时没有写成静态的,导致在Controller类中生成时,会生成null。
说起来很乱,但是只要把程序跑通了一遍,再看,就觉得很清楚。(卧槽,这TM不是废话吗!!)
2.实现文件上传至云存储服务器功能。
3.SpringMVC怎样配置文件上传相关内容,参考链接:http://tzwzero-163-com.iteye.com/blog/1697184
【知识总结】
1.在使用阿里云云存储服务时,我总结出这么几点:
1.1 关于PutObjectRequest(String bucketName, String key, File file)方法,有两个用法:(1)如果key参数为“object/”,后面出现一个斜杠,那么会在OSS控制台建立一个object文件夹,但是file文件并不会上传上去。(2)如果key参数为“object”,后面没有斜杠,那么不会建立一个文件夹,会把file文件上传上去,并且文件名称会是object。
1.2 在阿里云云存储服务器上没有文件夹的概念,所有的对象都在同一个阶层,虽然在控制台可以看到文件夹,但其实没什么用。(所以我为什么要建立那个文件夹?)
【出现的问题(已解决)】
1.前几天在使用阿里云OSS服务时,碰到一个问题,错误提示是:
五月 03, 2016 9:52:47 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [dispatcher] in context with path [/ITtask_4] threw exception [Handler processing failed; nested exception is java.lang.NoSuchFieldError: INSTANCE] with root cause
java.lang.NoSuchFieldError: INSTANCE
一碰到这种“没找到”异常(无论是没找到方法,还是没找到文件),基本都可以断定是jar包冲突了,排除版本冲突的jar包就好。当然,前提是你能在自己的Maven Dependencies目录下自己找到这个东西,要是自己都找不到,那就是缺jar包,引进来就好。
但是这一次,我在Maven Dependencies目录下反复查看过了,都没有冲突的jar包,而且在pom.xml中也查看过了,没有冲突的jar包。我一度怀疑不是jar包冲突的问题。后来我在项目的Web App Libraries目录下找到了冲突的jar包,删除掉,问题就解决了。
由此可见,在查找冲突jar包时,不能只看Maven Dependencies目录,还要看Web App Libraries目录。
【出现的问题(未解决)】
1.试图在Controller类中获取到前台<input type="file">上传过来的文件,出现了异常,错误提示:
Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.web.multipart.MultipartFile]: Specified class is an interface
明天解决。
【疑问】
1.为什么要把账号密码写入配置文件,而不能直接写在类里面呢?
写在配置文件中,除了维护的时候方便一些外,有没有什么性能优化上的好处?
评论