`
这些年
  • 浏览: 397842 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用spring的模板处理xml

 
阅读更多

Spring为FreeMarker提供了一个FreeMarkerConfigurer类,通过此类可方便地创建FreeMarker的基础环境,Spring提供FreeMarkerTemplateUtils工具类来完成解析模板的任务。

spring配置文件中bean的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"

	xsi:schemaLocation="http://www.springframework.org/schema/beans
	 http://www.springframework.org/schema/beans/spring-beans.xsd
	 http://www.springframework.org/schema/context
	 http://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config />
	<context:component-scan base-package="com.chinacache" />
	
	<bean id="fm" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
		<property name="templateLoaderPath" value="classpath:template"/>  //模板所有目录
		<property name="freemarkerSettings">
			<props>
				<prop key="template_update_delay">3600</prop>   //自动刷新
				<prop key="default_encoding">UTF-8</prop>
				<prop key="locale">zh_CN</prop>
				<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
			</props>
		</property>
	</bean>
</beans>

 maven包

 
	<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>3.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>3.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>3.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>3.2.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>3.2.0.RELEASE</version>
        </dependency>
        <dependency>
			<groupId>org.freemarker</groupId>
			<artifactId>freemarker</artifactId>
			<version>2.3.9</version>
		</dependency>
        <dependency>
        	<groupId>javax.servlet</groupId>
        	<artifactId>servlet-api</artifactId>
        	<version>2.3</version>
        </dependency>

 java

Map<Object, Object> map = new HashMap<Object, Object>();
		map.put("buTopchannels", channel);
		map.put("retract", retract);
		map.put("OperationTime", channel.get(0).getOperationTime());
		map.put("title", title);
		map.put("salesDirector", channel.get(0).getSalesDirector());

		freemarker.template.Template mailTemplate;
		String content = null;
		try {
			mailTemplate = fm.getConfiguration().getTemplate("channel_mail_su.ftl");
			content = FreeMarkerTemplateUtils.processTemplateIntoString(mailTemplate, map);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (TemplateException e) {
			e.printStackTrace();
		}

 ftl

<html>
<head>
<style type="text/css">
table {border:solid #add9c0; border-width:0px 1px 1px 0px;
}

td {border:solid #add9c0; border-width:0px 1px 1px 0px; padding:10px 0px;
}

</style>
</head>
<body>
Hi all:${retract}操作时间:${OperationTime}${retract} 公司转出/测试频道带宽总量大约为[${allBandwidth}],超过[${thresholdValue}]的占其中的[${allpercent}]${retract}[${bu}转出/测试频道带宽总量大约为[${buBandwidth}],超过[${thresholdValue}]的占其中的[${bupercent}]<br> ${retract}<font color='red'>第一负责人是:${DutyAdvocate}</font><br>${retract}<font color='red'>备份负责人是:${DutyBack}.</font><br>前[${buTopSize}]的分别是${retract}
<table >
<thead>
<tr>
<th>bu</th>
<th>频道</th>
<th>用户</th>
<th>${title}时间</th>
<th>峰值</th>
<th>流量</th>
<th>销售</th>
<th>客服</th>
<th>频道状态</th>
</tr>
</thead>
<tbody>
<#list buTopchannels as channel>
<tr>
<td>${channel.bu}</td>
<td>${channel.channelName}</td>
<td>${channel.customerName}</td>
<td>${channel.channelTransferTime}</td>
<td>${channel.maxBandwidthStr}</td>
<td>${channel.fluxStr}</td>
<td>${channel.salesDirector}</td>
<td>${channel.customerDirector}</td>
<td>${channel.state}</td>
</tr>
</#list>
</tbody>
</table>
<br><br><br><br><br>如有程序bug请与snp[高保宗]联系
</body>
</html>

 

转自其它博客的:

Spring为FreeMarker提供了一个FreeMarkerConfigurer类,通过此类可方便地创建FreeMarker的基础环境,Spring提供FreeMarkerTemplateUtils工具类来完成解析模板的任务。

 

下面以用户注册成功后发送的模板文件registerUser.ftl,将该文件放在src/mailTemplate下:

 

6.1 模板文件

Java代码 复制代码
  1. <html>   
  2.    <head>   
  3.       <meta http-equiv="content-type" content="text/html;charset=utf8">   
  4.    </head>   
  5.    <body>   
  6.        恭喜您成功注册!您的用户名为:<font color='red' size='30'>${username}</font>   
  7.    </body>   
  8. </html>  
Java代码  收藏代码
  1. <html>  
  2.    <head>  
  3.       <meta http-equiv="content-type" content="text/html;charset=utf8">  
  4.    </head>  
  5.    <body>  
  6.        恭喜您成功注册!您的用户名为:<font color='red' size='30'>${username}</font>  
  7.    </body>  
  8. </html>  

 上面的${username}标签代表一个可被替换的动态属性。FreeMarker模板的标签支持级联属性,如${user.Id}则表示user对象的Id属性。

 

 

6.2 使用FreeMarker模板技术构造邮件内容

 

Java代码  收藏代码
  1. package com.bb.spring.email;  
  2. import org.springframework.ui.freemarker.*;  
  3. import org.springframework.web.servlet.view.freemarker.*;  
  4. import freemarker.template.*;  
  5. import ......  
  6. public class TemplateEmailService {  
  7.     private JavaMailSender sender;  
  8.     private FreeMarkerConfigurer freeMarkerConfigurer=null;//FreeMarker的技术类  
  9.       
  10.     public void setFreeMarkerConfigurer(FreeMarkerConfigurer freeMarkerConfigurer) {  
  11.         this.freeMarkerConfigurer = freeMarkerConfigurer;  
  12.     }  
  13.       
  14.     public void setSender(JavaMailSender sender) {  
  15.         this.sender = sender;  
  16.     }  
  17.   
  18.     //通过模板构造邮件内容,参数username将替换模板文件中的${username}标签。  
  19.     private String getMailText(String username){  
  20.         String htmlText="";  
  21.         try {  
  22.             //通过指定模板名获取FreeMarker模板实例  
  23.             Template tpl=freeMarkerConfigurer.getConfiguration().getTemplate("registerUser.ftl");  
  24.             //FreeMarker通过Map传递动态数据  
  25.             Map map=new HashMap();  
  26.             map.put("username",username); //注意动态数据的key和模板标签中指定的属性相匹配  
  27.             //解析模板并替换动态数据,最终username将替换模板文件中的${username}标签。  
  28.             htmlText=FreeMarkerTemplateUtils.processTemplateIntoString(tpl,map);  
  29.         } catch (Exception e) {  
  30.             // TODO Auto-generated catch block  
  31.             e.printStackTrace();  
  32.         }  
  33.         return htmlText;  
  34.     }  
  35.       
  36.     //发送模板邮件  
  37.     public void sendTemplateMail(String username) throws MessagingException{  
  38.         MimeMessage msg=sender.createMimeMessage();  
  39.         MimeMessageHelper helper=new MimeMessageHelper(msg,false,"utf8");//由于是html邮件,不是mulitpart类型  
  40.         helper.setFrom("dongsanbo@sina.com");  
  41.         helper.setTo("dongsanbo@sina.com");  
  42.         helper.setSubject("注册成功-模板邮件");  
  43.         String htmlText=getMailText(username);//使用模板生成html邮件内容  
  44.         helper.setText(htmlText, true);  
  45.           
  46.         sender.send(msg);  
  47.         System.out.println("成功发送模板邮件");  
  48.     }  
  49.     public static void main(String[] args) throws MessagingException {  
  50.         // TODO Auto-generated method stub  
  51.         ApplicationContext ctx = new FileSystemXmlApplicationContext(     
  52.         "src/applicationContext.xml");   
  53.         TemplateEmailService ms=(TemplateEmailService) ctx.getBean("templateEmail");  
  54.           
  55.         //发送模板邮件  
  56.         ms.sendTemplateMail("yefriend");  
  57.     }//end method  
  58. }  

 

6.3 applicationContext.xml配置文件  

 
Java代码  收藏代码
  1. <bean id="freeMarker" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  
  2.   <property name="templateLoaderPath" value="classpath:mailTemplate"/><!--指定模板文件目录-->   
  3.   <property name="freemarkerSettings"><!-- 设置FreeMarker环境属性-->   
  4.       <props>  
  5.           <prop key="template_update_delay">1800</prop><!--刷新模板的周期,单位为秒-->   
  6.           <prop key="default_encoding">UTF-8</prop><!--模板的编码格式 -->  
  7.           <prop key="locale">zh_CN</prop><!-- 本地化设置-->  
  8.       </props>  
  9.   </property>  
  10. </bean>  
  11. <bean id="templateEmail" class="com.bb.spring.email.TemplateEmailService">  
  12.     <property name="sender" ref="mailsender"></property>  
  13.     <property name="freeMarkerConfigurer" ref="freeMarker"></property>  
  14. </bean>   

 

 

    在配置文件中已设置好模板目录,所以可在类中直接用模板文件名来定位模板文件。模板文件用UTF-8编码格式,避免中文乱码。通过设置template_update_delay属性,可让FreeMarker定期刷新模板,从而使应用程序在不重启下更新模板。

 

 

 至此,可以运行TemplateEmailService类发送邮件,实验表明"yefriend"将替换${username}。

 

 

下面是自己的扩展:

 

实际项目中我们想要动态的指定数据源和模版,就需要如下构造获取方法:

Java代码  收藏代码
  1. public String getMailHtml(Map map, String templateName) {  
  2.         String htmlText = null;  
  3.         try {  
  4.             Template tpl = freeMarkerConfigurer.getConfiguration().getTemplate(templateName);  
  5.             htmlText = FreeMarkerTemplateUtils.processTemplateIntoString(tpl, map);  
  6.         } catch (IOException e) {  
  7.             e.printStackTrace();  
  8.         } catch (TemplateException e) {  
  9.             e.printStackTrace();  
  10.         }  
  11.         return htmlText;  
  12.     }  

 这样就可以如下获取数据:

Java代码  收藏代码
  1. Map<String,Object> map = amendEmailUtils.initAmendPendingEmailMap(hotelbookheader...);  
  2.         String html = mailSender.getMailHtml(map, "amendmentPending.ftl");  

 

如果发件人固定,我们还可以让TemplateEmailService 继承org.springframework.mail.SimpleMailMessage这个类,以使用其中的From或to属性

我的类:

 
Java代码  收藏代码
  1. public class SimpleMailSender extends SimpleMailMessage {  
  2.    
  3.     private JavaMailSender sender;  
  4.     private MimeMessageHelper messageHellper;  
  5.     private FreeMarkerConfigurer freeMarkerConfigurer;   

 使用:

Java代码  收藏代码
  1. //类属性  
  2. public SimpleMailSender mailSender;  
  3.   
  4. //方法中  
  5. Map<String,Object> map = amendEmailUtils.initAmendPendingEmailMap(hotelbookheader...);  
  6.         String html = mailSender.getMailHtml(map, "amendmentPending.ftl");        
  7.                   
  8.           
  9.         MimeMessage mimeMessage = mailSender.GetSender().createMimeMessage();  
  10.         MimeMessageHelper messageHellper = new MimeMessageHelper(mimeMessage, true"utf-8");  
  11.         messageHellper.setSubject(amendSubjectToUser);  
  12.   
  13.         messageHellper.setFrom(mailSender.getFrom());  
  14. //如果不继承,自定义类SimpleMailSender中就无from、to方法,就不可从配置文件中获取  

 

xml配置:

 
Java代码  收藏代码
  1. <bean id="mailSender"  
  2.         class="com.techson.himsnanhwa.admin.mail.SimpleMailSender">  
  3.         <property name="javaMailSender"><ref bean="sender"/></property>  
  4.         <property name="freeMarkerConfigurer" ref="freeMarker"></property>    
  5.         <property name="from">  
  6.             <value>wy@techson.com.hk</value>  
  7.         </property>  
  8.         <property name="to">  
  9.             <value>ming@techson.com.hk</value>  
  10.         </property>  
  11.     </bean>  
  12.   
  13. <!--配置邮件模板-->       
  14.     <bean id="freeMarker" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">        
  15.       <property name="templateLoaderPath" value="/mailTemplete"/>          
  16.       <property name="freemarkerSettings">                                
  17.           <props>        
  18.               <prop key="template_update_delay">15</prop>                
  19.               <prop key="default_encoding">UTF-8</prop>               
  20.               <prop key="locale">zh_CN</prop>                          
  21.           </props>        
  22.       </property>        
  23.     </bean>  
  24.   
  25. <bean id="sender"  
  26.         class="org.springframework.mail.javamail.JavaMailSenderImpl">  
  27.         <property name="host">  
  28.             <value>192.168.108.6</value>  
  29.         </property>  
  30.         <property name="javaMailProperties">  
  31.             <props>  
  32.                 <prop key="mail.smtp.auth">true</prop>  
  33.                 <prop key="mail.smtp.timeout">25000</prop>  
  34.             </props>  
  35.         </property>  
  36.         <property name="username">  
  37.             <value>wy</value>  
  38.         </property>  
  39.         <property name="password">  
  40.             <value>wy</value>  
  41.         </property>  
  42.     </bean>  

 。。。

 

 

发送带附件的邮件:

Java代码  收藏代码
  1. MimeMessage message = mailSender.GetSender().createMimeMessage();  
  2.     MimeMessageHelper messageHellper = new MimeMessageHelper(message, true"utf-8");  
  3.     messageHellper.setSubject(subject);  
  4.     messageHellper.setFrom(formMap.get("couemail") + "");  
  5.     messageHellper.setFrom(sender);  
  6.           
  7.     Multipart mp = new MimeMultipart();    
  8.     MimeBodyPart mbp = new MimeBodyPart();     
  9.     File file = new File("E:\\hotel_" + filename + ".xls");  
  10.     FileDataSource fds=new FileDataSource(file);   
  11.         mbp.setDataHandler(new DataHandler(fds));    
  12.         mbp.setFileName(fds.getName());   
  13.         mp.addBodyPart(mbp);    
  14.           
  15.         message.setContent(mp);  
  16.         message.saveChanges();  

 发送成功后可使用

 
Java代码  收藏代码
  1. fds.getFile().delete();  

 删除文件!

 

 

或:

Java代码  收藏代码
  1. String path = ServletActionContext.getServletContext().getRealPath("/download/");  
  2. String destinct = path + "/" + fileName + ".zip";  
  3.   
  4. Resource file = new ServletContextResource(ServletActionContext.getServletContext(),destinct);  
  5. helper.addAttachment("hotel_nh_"+countryCode + ".zip", file.getFile());  
  6.   
  7. 或:  
  8.  message.addAttachment("myDocument.pdf"new ClassPathResource("doc/myDocument.pdf"));  

 。。。

分享到:
评论

相关推荐

    Spring核心配置文件xml模板完整

    Spring核心配置文件xml模板,完整的命名空间和模式文档URI引用对。

    Spring.xml模版

    Spring.xml模版

    spring配置文件:整理总结Spring中XML配

    本文将详细介绍关于Spring XML配置文件的12个最佳实践,这些实践不仅有助于提高配置文件的可读性和可维护性,还能帮助开发者更好地理解和使用Spring框架。 #### 最佳实践 1. **避免使用自动绑定(Autowiring)** ...

    spring+mybatis模板

    Spring 和 MyBatis 是两种非常流行的 Java 开发框架,它们在企业级应用中广泛使用。Spring 是一个全面的后端开发框架,提供了依赖注入、面向切面编程、事务管理等功能,而 MyBatis 是一个轻量级的持久层框架,专注于...

    maven模板javaspring

    Maven 可以与 Spring 框架的模板引擎配合使用,如 Thymeleaf 或 FreeMarker,这些模板引擎允许将业务逻辑与视图层分离,提高代码可读性和可维护性。在 Maven 中配置这些模板引擎的插件,可以实现自动化编译和部署...

    Spring MVC / Spring Boot中使用Thymeleaf模板引擎

    在Java Web开发中,Spring MVC和Spring Boot框架是广泛使用的工具,它们提供了高效且灵活的构建Web应用的方式。Thymeleaf则是一个流行的服务器端模板引擎,它允许开发者使用HTML来编写视图,并在服务器端解析这些...

    activemq5.5.1 Spring模板

    《ActiveMQ 5.5.1与Spring模板的深度整合》 在当今的企业级应用开发中,消息中间件起着至关重要的作用,它能够有效地解耦应用程序,提高系统的可扩展性和可靠性。Apache ActiveMQ作为开源社区中最受欢迎的消息...

    spring 定时器 注解+xml 方式模板

    Spring Schedule模块提供了强大的定时任务支持,既可以通过注解的方式,也可以通过XML配置来实现。本文将深入探讨如何使用`@Scheduled`注解和XML配置来创建和管理定时任务。 首先,我们要引入Spring Schedule的依赖...

    spring4-mvc-gradle-xml-hello-world, Gradle + spring 4 MVC Hello World 示例( XML ).zip

    spring4-mvc-gradle-xml-hello-world, Gradle + spring 4 MVC Hello World 示例( XML ) Gradle --spring-4 MVC Hello Worldspring 4 MVC + JSP视图+ XML配置模板,使用Gradle构建工具。使用的###1. 技术Gradle 2.0...

    springjdbc.zip_SpringJDBC_spring jdbc_spring 增删改查_springjdbc xml

    5. **事务管理**:Spring提供了声明式事务管理,可以在XML配置中定义`PlatformTransactionManager`,如`DataSourceTransactionManager`,并使用`@Transactional`注解在方法级别声明事务边界。 6. **增删改查操作**...

    java注釋xml模板

    Java注释和XML模板在软件开发中扮演着重要的角色,特别是在大型项目中,它们有助于提高代码的可读性、可维护性和团队间的协作效率。Java注释提供了对代码功能、用途和逻辑的清晰解释,而XML模板则常用于配置、数据...

    Bo-Blog spring模板

    8. **部署与运行**:Bo-Blog spring模板需要在支持Java的Web服务器上运行,如Tomcat或Jetty,开发者可能需要了解如何配置服务器以部署和运行此应用。 通过整合Spring框架,Bo-Blog spring模板不仅提供了更高效的...

    springsimple_jdbc spring使用模板

    通过运行这个测试,你可以实际体验到Spring模板和连接池带来的便利性和性能提升。 总结起来,"springsimple_jdbc"的主题涵盖了Spring框架下JDBC操作的简化和性能优化,主要体现在Spring的模板机制和数据库连接池的...

    基于Java的SpringCloud项目模板

    8. **HystrixCommand**:使用Hystrix实现的断路器,用于服务降级和熔断处理。 9. **ConfigServer**:配置中心模块,可能使用Git或Vault存储配置信息。 10. **SpringCloudBus**:用于广播配置更新和其他事件的总线...

    spring+Mybatis模板

    Spring 和 MyBatis 是两个非常流行的 Java 开发框架,它们在企业级应用开发中被广泛使用。Spring 提供了一个全面的编程和配置模型,而 MyBatis 是一个优秀的持久层框架,专注于数据库操作。现在我们将深入探讨这两个...

    Spring 配置文件XML头部文件模板实例详解

    以上就是关于Spring配置文件XML头部文件模板的实例详解,包括了普通配置文件模板和添加注解后的格式模板。希望这些内容能帮助到需要使用Spring配置的开发者,让他们更加熟悉如何利用配置文件来管理和优化Spring应用...

    spring-mvc.xml

    spring-mvc.xml

    spring boot 模板

    在Spring Boot项目中使用Thymeleaf,首先需要在`pom.xml`或`build.gradle`中添加Thymeleaf的依赖。接着,需要配置Thymeleaf的相关设置,例如模板文件的路径。然后,可以在控制器方法中返回一个模型AndView对象,其中...

    spring模板方法.zip

    标题中的"spring模板方法.zip"表明这是一个关于Spring框架的压缩包,特别提到了Spring Boot项目。模板方法设计模式是面向对象设计模式的一种,它在Spring框架中被广泛应用于简化代码和实现可扩展性。在Spring Boot中...

    spring+hibernate+struts整合开发模板

    这个"spring+hibernate+struts整合开发模板"是一个完整的开发框架,可以帮助开发者快速搭建基于SSH的项目结构,提高开发效率,并且包含了验证框架的实现。 **Spring框架**:Spring是一个开源的Java平台,核心功能是...

Global site tag (gtag.js) - Google Analytics