简单了解Spring中常用工具类
文件资源操作
spring 定义了一个 org.springframework.core.io.resource 接口,resource 接口是为了统一各种类型不同的资源而定义的,spring 提供了若干 resource 接口的实现类,这些实现类可以轻松地加载不同类型的底层资源,并提供了获取文件名、url 地址以及资源内容的操作方法
访问文件资源
* 通过 filesystemresource 以文件系统绝对路径的方式进行访问;
* 通过 classpathresource 以类路径的方式进行访问;
* 通过 servletcontextresource 以相对于 web 应用根目录的方式进行访问。
package com.baobaotao.io; import java.io.ioexception; import java.io.inputstream; import org.springframework.core.io.classpathresource; import org.springframework.core.io.filesystemresource; import org.springframework.core.io.resource; public class filesourceexample { public static void main(string[] args) { try { string filepath = "d:/masterspring/chapter23/webapp/web-inf/classes/conf/file1.txt"; // ① 使用系统文件路径方式加载文件 resource res1 = new filesystemresource(filepath); // ② 使用类路径方式加载文件 resource res2 = new classpathresource("conf/file1.txt"); inputstream ins1 = res1.getinputstream(); inputstream ins2 = res2.getinputstream(); system.out.println("res1:"+res1.getfilename()); system.out.println("res2:"+res2.getfilename()); } catch (ioexception e) { e.printstacktrace(); } } }
在获取资源后,您就可以通过 resource 接口定义的多个方法访问文件的数据和其它的信息
getfilename() 获取文件名,
getfile() 获取资源对应的 file 对象,
getinputstream() 直接获取文件的输入流。
createrelative(string relativepath) 在资源相对地址上创建新的资源。
在 web 应用中,您还可以通过 servletcontextresource 以相对于 web 应用根目录的方式访问文件资源
spring 提供了一个 resourceutils 工具类,它支持“classpath:”和“file:”的地址前缀 ,它能够从指定的地址加载文件资源。
file clsfile = resourceutils.getfile("classpath:conf/file1.txt"); system.out.println(clsfile.isfile()); string httpfilepath = "file:d:/masterspring/chapter23/src/conf/file1.txt"; file httpfile = resourceutils.getfile(httpfilepath);
文件操作
在使用各种 resource 接口的实现类加载文件资源后,经常需要对文件资源进行读取、拷贝、转存等不同类型的操作。
filecopyutils
它提供了许多一步式的静态操作方法,能够将文件内容拷贝到一个目标 byte[]、string 甚至一个输出流或输出文件中。
package com.baobaotao.io; import java.io.bytearrayoutputstream; import java.io.file; import java.io.filereader; import java.io.outputstream; import org.springframework.core.io.classpathresource; import org.springframework.core.io.resource; import org.springframework.util.filecopyutils; public class filecopyutilsexample { public static void main(string[] args) throws throwable { resource res = new classpathresource("conf/file1.txt"); // ① 将文件内容拷贝到一个 byte[] 中 byte[] filedata = filecopyutils.copytobytearray(res.getfile()); // ② 将文件内容拷贝到一个 string 中 string filestr = filecopyutils.copytostring(new filereader(res.getfile())); // ③ 将文件内容拷贝到另一个目标文件 filecopyutils.copy(res.getfile(), new file(res.getfile().getparent()+ "/file2.txt")); // ④ 将文件内容拷贝到一个输出流中 outputstream os = new bytearrayoutputstream(); filecopyutils.copy(res.getinputstream(), os); } }
static void copy(byte[] in, file out) 将 byte[] 拷贝到一个文件中
static void copy(byte[] in, outputstream out) 将 byte[] 拷贝到一个输出流中
static int copy(file in, file out) 将文件拷贝到另一个文件中
static int copy(inputstream in, outputstream out) 将输入流拷贝到输出流中
static int copy(reader in, writer out) 将 reader 读取的内容拷贝到 writer 指向目标输出中
static void copy(string in, writer out) 将字符串拷贝到一个 writer 指向的目标中
属性文件操作
spring 提供的 propertiesloaderutils 允许您直接通过基于类路径的文件 地址加载属性资源
package com.baobaotao.io; import java.util.properties; import org.springframework.core.io.support.propertiesloaderutils; public class propertiesloaderutilsexample { public static void main(string[] args) throws throwable { // ① jdbc.properties 是位于类路径下的文件 properties props = propertiesloaderutils.loadallproperties("jdbc.properties"); system.out.println(props.getproperty("jdbc.driverclassname")); } }
特殊编码的资源
当您使用 resource 实现类加载文件资源时,它默认采用操作系统的编码格式。如果文件资源采用了特殊的编码格式(如utf-8),则在读取资源内容时必须事先通过 encodedresource 指定编码格式,否则将会产生中文乱码的问题。
package com.baobaotao.io; import org.springframework.core.io.classpathresource; import org.springframework.core.io.resource; import org.springframework.core.io.support.encodedresource; import org.springframework.util.filecopyutils; public class encodedresourceexample { public static void main(string[] args) throws throwable { resource res = new classpathresource("conf/file1.txt"); // ① 指定文件资源对应的编码格式(utf-8) encodedresource encres = new encodedresource(res,"utf-8"); // ② 这样才能正确读取文件的内容,而不会出现乱码 string content = filecopyutils.copytostring(encres.getreader()); system.out.println(content); } }
访问 spring 容器,获取容器中的 bean,使用 webapplicationcontextutils 工具类
servletcontext servletcontext = request.getsession().getservletcontext(); webapplicationcontext wac = webapplicationcontextutils. getwebapplicationcontext(servletcontext);
spring 所提供的过滤器和监听器
延迟加载过滤器
hibernate 允许对关联对象、属性进行延迟加载,但是必须保证延迟加载的操作限于同一个 hibernate session 范围之内进行。如果 service 层返回一个启用了延迟加载功能的领域对象给 web 层,当 web 层访问到那些需要延迟加载的数据时,由于加载领域对象的 hibernate session 已经关闭,这些导致延迟加载数据的访问异常。
spring 为此专门提供了一个 opensessioninviewfilter 过滤器,它的主要功能是使每个请求过程绑定一个 hibernatesession,即使最初的事务已经完成了,也可以在 web 层进行延迟加载的操作。
<filter> <filter-name>hibernatefilter</filter-name> <filter-class> org.springframework.orm.hibernate3.support.opensessioninviewfilter </filter-class> </filter> <filter-mapping> <filter-name>hibernatefilter</filter-name> <url-pattern>*.html</url-pattern> </filter-mapping>
中文乱码过滤器
<filter> <filter-name>encodingfilter</filter-name> <filter-class> org.springframework.web.filter.characterencodingfilter ① spring 编辑过滤器 </filter-class> <init-param> ② 编码方式 <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> <init-param> ③ 强制进行编码转换 <param-name>forceencoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> ② 过滤器的匹配 url <filter-name>encodingfilter</filter-name> <url-pattern>*.html</url-pattern> </filter-mapping>
一般情况下,您必须将 log4j 日志配置文件以 log4j.properties 为文件名并保存在类路径下。log4jconfiglistener
允许您通过 log4jconfiglocation servlet 上下文参数显式指定 log4j 配置文件的地址,如下所示:
① 指定 log4j 配置文件的地址
<context-param> <param-name>log4jconfiglocation</param-name> <param-value>/web-inf/log4j.properties</param-value> </context-param>
② 使用该监听器初始化 log4j 日志引擎
<listener> <listener-class> org.springframework.web.util.log4jconfiglistener </listener-class> </listener> introspector 缓存清除监听器,防止内存泄露 <listener> <listener-class> org.springframework.web.util.introspectorcleanuplistener </listener-class> </listener>
一些 web 应用服务器(如 tomcat)不会为不同的 web 应用使用独立的系统参数,也就是说,应用服务器上所有的 web 应用都共享同一个系统参数对象。这时,您必须通过 webapprootkey 上下文参数为不同 web 应用指定不同的属性名:如第一个 web 应用使用 webapp1.root 而第二个 web 应用使用 webapp2.root 等,这样才不会发生后者覆盖前者的问题。此外,webapprootlistener 和 log4jconfiglistener 都只能应用在 web 应用部署后 war 文件会解包的 web 应用服务器上。一些 web 应用服务器不会将 web 应用的 war 文件解包,整个 web 应用以一个 war 包的方式存在(如 weblogic),此时因为无法指定对应文件系统的 web 应用根目录,使用这两个监听器将会发生问题。
特殊字符转义
web 开发者最常面对需要转义的特殊字符类型:
* html 特殊字符;
* javascript 特殊字符;
html 特殊字符转义
* & :&
* " :"
* < :<
* > :>
javascript 特殊字符转义
* ' :/'
* " :/"
* / ://
* 走纸换页: /f
* 换行:/n
* 换栏符:/t
* 回车:/r
* 回退符:/b
工具类
javascriptutils.javascriptescape(string str);转换为javascript转义字符表示
htmlutils.htmlescape(string str);①转换为html转义字符表示
htmlutils.htmlescapedecimal(string str); ②转换为数据转义表示
htmlutils.htmlescapehex(string str); ③转换为十六进制数据转义表示
htmlutils.htmlunescape(string str);将经过转义内容还原
spring给我们提供了很多的工具类, 应该在我们的日常工作中很好的利用起来. 它可以大大的减轻我们的平时编写代码的长度. 因我们只想用spring的工具类,
而不想把一个大大的spring工程给引入进来. 下面是我从spring3.0.5里抽取出来的工具类.
在最后给出我提取出来的spring代码打成的jar包
spring的里的resouce的概念, 在我们处理io时很有用. 具体信息请参考spring手册
内置的resouce类型
urlresource
classpathresource
filesystemresource
servletcontextresource
inputstreamresource
bytearrayresource
encodedresource 也就是resource加上encoding, 可以认为是有编码的资源
vfsresource(在jboss里经常用到, 相应还有 工具类 vfsutils)
org.springframework.util.xml.resourceutils 用于处理表达资源字符串前缀描述资源的工具. 如: "classpath:".
有 geturl, getfile, isfileurl, isjarurl, extractjarfileurl
工具类
org.springframework.core.annotation.annotationutils 处理注解
org.springframework.core.io.support.pathmatchingresourcepatternresolver 用 于处理 ant 匹配风(com/*.jsp,com/**/*.jsp),找出所有的资源, 结合上面的resource的概念一起使用,对于遍历文件很有用. 具体请详细查看javadoc
org.springframework.core.io.support.propertiesloaderutils 加载properties资源工具类,和resource结合
org.springframework.core.bridgemethodresolver 桥接方法分析器. 关于桥接方法请参考:http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.12.4.5
org.springframework.core.generictyperesolver 范型分析器, 在用于对范型方法, 参数分析.
org.springframework.core.nestedexceptionutils
xml工具
org.springframework.util.xml.abstractstaxcontenthandler
org.springframework.util.xml.abstractstaxxmlreader
org.springframework.util.xml.abstractxmlreader
org.springframework.util.xml.abstractxmlstreamreader
org.springframework.util.xml.domutils
org.springframework.util.xml.simplenamespacecontext
org.springframework.util.xml.simplesaxerrorhandler
org.springframework.util.xml.simpletransformerrorlistener
org.springframework.util.xml.staxutils
org.springframework.util.xml.transformerutils
其它工具集
org.springframework.util.xml.antpathmatcherant风格的处理
org.springframework.util.xml.antpathstringmatcher
org.springframework.util.xml.assert断言,在我们的参数判断时应该经常用
org.springframework.util.xml.cachingmapdecorator
org.springframework.util.xml.classutils用于class的处理
org.springframework.util.xml.collectionutils用于处理集合的工具
org.springframework.util.xml.commonslogwriter
org.springframework.util.xml.compositeiterator
org.springframework.util.xml.concurrencythrottlesupport
org.springframework.util.xml.customizablethreadcreator
org.springframework.util.xml.defaultpropertiespersister
org.springframework.util.xml.digestutils摘要处理, 这里有用于md5处理信息的
org.springframework.util.xml.filecopyutils文件的拷贝处理, 结合resource的概念一起来处理, 真的是很方便
org.springframework.util.xml.filesystemutils
org.springframework.util.xml.linkedcaseinsensitivemap
key值不区分大小写的linkedmap
org.springframework.util.xml.linkedmultivaluemap一个key可以存放多个值的linkedmap
org.springframework.util.xml.log4jconfigurer一个log4j的启动加载指定配制文件的工具类
org.springframework.util.xml.numberutils处理数字的工具类, 有parsenumber 可以把字符串处理成我们指定的数字格式, 还支持format格式, convertnumbertotargetclass 可以实现number类型的转化.
org.springframework.util.xml.objectutils有很多处理null object的方法. 如nullsafehashcode, nullsafeequals, isarray, containselement, addobjecttoarray, 等有用的方法
org.springframework.util.xml.patternmatchutilsspring里用于处理简单的匹配. 如 spring's typical "xxx*", "*xxx" and "*xxx*" pattern styles
org.springframework.util.xml.propertyplaceholderhelper用于处理占位符的替换
org.springframework.util.xml.reflectionutils反映常用工具方法. 有 findfield, setfield, getfield, findmethod, invokemethod等有用的方法
org.springframework.util.xml.serializationutils用于java的序列化与反序列化. serialize与deserialize方法
org.springframework.util.xml.stopwatch一个很好的用于记录执行时间的工具类, 且可以用于任务分阶段的测试时间. 最后支持一个很好看的打印格式. 这个类应该经常用
org.springframework.util.xml.stringutils
org.springframework.util.xml.systempropertyutils
org.springframework.util.xml.typeutils用于类型相容的判断. isassignable
org.springframework.util.xml.weakreferencemonitor弱引用的监控
和web相关的工具
org.springframework.web.util.cookiegenerator
org.springframework.web.util.htmlcharacterentitydecoder
org.springframework.web.util.htmlcharacterentityreferences
org.springframework.web.util.htmlutils
org.springframework.web.util.httpurltemplate
这个类用于用字符串模板构建url, 它会自动处理url里的汉字及其它相关的编码. 在读取别人提供的url资源时, 应该经常用
string url = "http://localhost/myapp/{name}/{id}"
org.springframework.web.util.javascriptutils
org.springframework.web.util.log4jconfiglistener
用listener的方式来配制log4j在web环境下的初始化
org.springframework.web.util.uritemplate
org.springframework.web.util.uriutils处理uri里特殊字符的编码
org.springframework.web.util.webutils
org.springframework.web.util.
4.encodedresource(resource对象,"utf-8") 编码资源(特殊的);
5.webapplicationcontextutils
6.stringescapeutils 编码解码
总结
以上就是本文关于简单了解spring中常用工具类的全部内容,希望对大家有所帮助。感兴趣的朋友可以参阅:java语言lang包下常用的工具类介绍、浅谈springboot之于spring的优势、java之spring注解配置bean实例代码解析等,有什么问题可以随时留言,小编会及时回复大家的。
上一篇: php轻松实现文件上传功能
下一篇: YII框架中搜索分页jQuery写法详解