`
huangjinjin520
  • 浏览: 71493 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Spring常用工具类

阅读更多
Spring 的优秀工具类盘点
( http://www.ibm.com/developerworks/cn/java/j-lo-spring-utils1/index.html )

文件资源操作

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 过滤器,它的主要功能是使每个请求过程绑定一个 Hibernate Session,即使最初的事务已经完成了,也可以在 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 特殊字符转义

* & :&amp; 
* " :" 
* < :< 
* > :>

JavaScript 特殊字符转义

* ' :/'
* " :/"
* / :// 
* 走纸换页: /f 
* 换行:/n 
* 换栏符:/t 
* 回车:/r 
* 回退符:/b

工具类

JavaScriptUtils.javaScriptEscape(String str);
HtmlUtils.htmlEscape(String str);①转换为HTML转义字符表示
HtmlUtils.htmlEscapeDecimal(String str); ②转换为数据转义表示
HtmlUtils.htmlEscapeHex(String str); ③转换为十六进制数据转义表示
HtmlUtils.htmlUnescape(String str);将经过转义内容还原

Spring框架下自带了丰富的工具类,在我们开发时可以简化很多工作:

1.Resource访问文件资源:

具体有:

ResourceUtils.getFile(url);
FileSystemResource(); ClassPathResource();
ServletContextResource(application,url);

2.文件操作 FileCopyUtils

具体有:

FileCopyUtils.copy(Resource.getFile,new File(Resource.getFile(),getParent()+'目标文件名'));

3.属性文件操作 PropertiesLoaderUtils

具体有:

PropertiesLoaderUtils.loadAllProperties("属性文件名");  --基于类路径

4.EncodedResource(Resource对象,”UTF-8″) 编码资源(特殊的);

5.WebApplicationContextUtils

6.StringEscapeutils 编码解码

关注公众号获取 dubbo视频  springcloud视频

https://pan.baidu.com/s/1IOx1Jg-scGT7Rpq-Inu89g








  • 大小: 39.9 KB
  • 大小: 82 KB
0
0
分享到:
评论

相关推荐

    Spring获取ApplicationContext对象工具类的实现方法

    本文将详细介绍Spring中获取ApplicationContext对象的工具类实现方法。 在Spring中,典型的获取ApplicationContext对象的方式是使用ApplicationContext接口的一个实现类,如ClassPathXmlApplicationContext。这是一...

    SpringBoot之自带工具类常用示例

    本篇将详细介绍Spring Boot中的一些常用工具类及其示例。 1. **`java.time` API** Spring Boot完全支持Java 8的日期时间API,如`LocalDateTime`, `LocalDate`, `LocalTime`等。这些类提供了丰富的功能,如日期时间...

    Spring Utils工具类常用方法实例

    Spring Utils工具类常用方法实例 Spring Utils工具类是Spring框架中提供的一组实用工具类,主要用于框架内部使用。这些工具类提供了一些简单的方法,并且提供了易于使用的方法在分割字符串、集合和数组等方面。下面...

    spring-redis工具类

    Spring整合Redis工具类,导入redis依赖,并使用工具类,不必使用RedisTemplate调用redis,并且采用java更常用的方式调用方法。

    java常用工具类整理

    1. org.springframework.util.StringUtils 工具类用于判断字符串非空,常用的方法有 isEmpty()、hasText() 等。 2. org.springframework.util.CollectionUtils 工具类用于判断 List 和 Map 集合的非空,常用的方法有...

    简单了解Spring中常用工具类

    Spring 中常用工具类详解 Spring 框架提供了许多有用的工具类,用于简化应用程序的开发和维护。在这篇文章中,我们将详细介绍 Spring 中常用工具类,包括资源操作、文件操作等。 资源操作 在 Spring 中,资源操作...

    mybatis 拦截器 + spring aop切面 + spring事务+ 反射工具类

    在IT行业中,MyBatis、Spring AOP、Spring事务管理和反射工具类是常见的技术栈,它们在构建高效、灵活的企业级应用中起着至关重要的作用。以下是对这些知识点的详细阐述: 1. MyBatis拦截器(MyBatis Interceptor)...

    在spring中获取代理对象代理的目标对象工具类

    这时,Spring提供了一个名为`AopTargetUtils`的工具类,专门用来处理这种需求。 `AopTargetUtils`是Spring AOP模块中的一个辅助类,它提供了若干静态方法来帮助开发者获取代理对象的真实目标对象。这个工具类主要...

    Spring文件资源操作和Web相关工具类盘点

    以下是一些常用的 Web 工具类: 1. **HttpEntity** 和 **ResponseEntity**: 这两个类用于构建和处理 HTTP 请求和响应。HttpEntity 用于封装请求体,而 ResponseEntity 用于封装响应,它们都包含了 HTTP 头部信息,...

    Spring+Hibernate工具类所有增删改查

    标题"Spring+Hibernate工具类所有增删改查"暗示了这是一个集合了Spring和Hibernate框架中用于基本数据库操作的工具类库。这些工具类通常包含了一系列静态方法,用于执行常见的数据库CRUD(创建、读取、更新、删除)...

    java分页工具类,以及基于Struts,Spring,mybatis,jsp中分页的调用及实现

    ### Java分页工具类及其在Struts、Spring、MyBatis和JSP中的应用 #### 一、Java分页概述 在开发Web应用程序时,为了提高用户体验并减轻服务器压力,通常会采用分页技术来展示大量的数据记录。本文将详细介绍一个...

    spring常用jar包

    在这个名为"spring常用jar包"的压缩包中,包含了一些Spring框架运行所必需的核心库。下面我们将逐一解析这些jar包的功能和重要性。 1. aspectjrt.jar:这是AspectJ运行时库,用于支持面向切面编程(AOP)。AOP是...

    Spring开发工具包

    Spring开发工具包是Java开发人员在构建基于Spring框架的应用程序时不可或缺的一部分。Spring是一个开源的Java平台,它为创建企业级应用提供了全面的框架支持,包括依赖注入、面向切面编程(AOP)、数据访问、Web开发...

    Java后端常用工具类

    在Java后端开发中,工具类的使用是提高效率的关键,尤其对于Spring框架的应用更是如此。本主题聚焦于"Java后端常用工具类",涵盖了多个方面,包括依赖管理、日志记录、数据库配置、文件操作以及Spring框架的配置。 ...

    java spring工具包

    Java Spring工具包是Java开发中的核心组件之一,它是一个开源框架,主要用于简化企业级应用的开发。Spring框架以其模块化、灵活的配置和强大的依赖注入特性而闻名,它提供了多种功能,包括但不限于:面向切面编程...

    Java常用工具类包包含各种常用开发工具

    "Java常用工具类包"是一个集合,它包含了多种针对不同场景的工具类,如文件操作、文本处理、对象转换等。下面将详细介绍这些工具类的主要功能及其应用场景。 1. **文件对比**: - Java中的`java.io.File`类可以...

    常用工具类及xml配置

    本文将详细探讨这两个主题,并基于提供的文件名"xml配置"和"常用工具类"展开讨论。 首先,让我们从"常用工具类"开始。在Java编程中,工具类通常是一些包含静态方法的类,这些方法执行特定的辅助任务,如字符串处理...

    [] - 2022-10-18 别再自己瞎写工具类了,Spring Boot 内置工具类应有尽有, 建议收藏!!.pdf

    本文将对Spring Boot中内置的常用工具类进行深入探讨,帮助开发者充分认识到其强大功能和应用价值。 首先,我们要了解断言工具类。在编程中,断言是一种强大的错误检测方式,它允许开发者在程序执行的某些关键点上...

    RSA工具类(常用)

    RSA工具类,囊括了 生成密钥对、私钥解密、公钥加密、私钥签名、公钥验证的方法,并且其中有例子,可直接运行。

Global site tag (gtag.js) - Google Analytics