<?xml version="1.0" encoding="utf-8" ?>
<opml version="1.0">
<head>
<title>${title}</title>
<dateCreated>${pubDate}</dateCreated>
<ownerName>${owner}</ownerName>
<ownerEmail>${email}</ownerEmail>
<description>${title}</description>
<createdBy>${builder}</createdBy>
<link>${link}</link>
</head>
<body>
<outline title="${title}" text="${title}" opml="" kind="nkPath">
<#list typeList as type>
<outline title="${type.title}" text="${type.title}" type="rss" xmlUrl="${buildPath}/news/rss/${type.typecode}.xml" interval="60" itemMax="400" htmlUrl="" description="${type.title}" kind="nkFeed" />
</#list>
</outline>
</body>
</opml>

完成所需要的模板文件后,就要对模板文件进行生成啦。我使用的技术是Struts2+Spring+Hibernate+Dwr实现的,生成文件的那点是使用Dwr去实现的。具体的生成代码如下:

public String opmlBuild(String typeCode, String fileName, String owner,
String email, String builder, String link, String buildPath,
HttpServletRequest request, HttpServletResponse response) {
String result = "";
try {
response.setContentType("text/opml");
response.setCharacterEncoding("utf-8");
String ftlPath = request.getSession().getServletContext()
.getRealPath("/")
+ "//WEB-INF//ftl//";
String path = request.getSession().getServletContext().getRealPath(
"/");
// String ftlPath = ftl + "//ftl//";
config.setDirectoryForTemplateLoading(new File(ftlPath));
// 得到模板文件
Template template = config.getTemplate("opml.ftl");
// 设置编码格式
template.setEncoding("utf-8");
YxNewsType type = typeNews.getTypeByTypeCode(typeCode);
List<YxNewsType> typeList = typeNews
.getAllChildTypeByTypeCode(typeCode);
if (typeList != null) {
Map root = new HashMap();
//设置发布的OPML的标题
root.put("title", type.getTitle());
//设置OPML的发布时间
root.put("pubDate", new Date().toString());
//设置OPML的所有者
root.put("owner", owner);
//设置OPML的发布者的EMail地址
root.put("email", email);
//设置OPML的创建人
root.put("builder", builder);
//设置OPML文件的连接地址,可以直接你网站的连接地址
root.put("link", link);
//设置自己的创建Rss的连接地址
root.put("buildPath", buildPath);
root.put("typeList", typeList);
// 设置到生成的文件名称
String file = "";
//判断当前操作系统,如果是Windows系统的做就是反斜杠,如果是Linux系统就使用正斜杠
Properties properties = System.getProperties();
Object object = properties.get("os.name");
// System.out.println("当前操作系统:" + String.valueOf(object));
if ("Windows".equals(String.valueOf(object))) {
file = path + "\\rss\\opml\\" + fileName + ".opml";
} else {
file = path + "//rss//opml//" + fileName + ".opml";
}
//设置要生成的文件
Writer out = new OutputStreamWriter(new FileOutputStream(file),
"utf-8");
template.process(root, out);
//清理写入流
out.flush();
// 关闭流文件
out.close();
result = "buildSuccess";
} else {
result = "noChild";
}
} catch (Exception e) {
result = "error";
e.printStackTrace();
}
return result;
}

上面方法中的参数是通过Dwr传递过来的,下面是页面JSP文件:

<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns=" http://www.w3.org/1999/xhtml">
 <head>
  <title>信源管理</title>
  <link rel="stylesheet"
   href="${pageContext.request.contextPath}/common/css/admin/style.css"
   type="text/css" />
  <script type="text/javascript"
   src="${pageContext.request.contextPath}/dwr/engine.js"></script>
  <script type="text/javascript"
   src="${pageContext.request.contextPath}/dwr/util.js"></script>
  <script type="text/javascript"
   src="${pageContext.request.contextPath}/dwr/interface/rssBuild.js"></script>
  <script type="text/javascript">
   var typeCode;
   function showBuild(title,code){
    //alert(title);
    typeCode = code;
    var doc = document.getElementById("buildOpml");
    document.getElementById("tableTitle").innerHTML=title;
    document.getElementById("opmlName").value = "";
    document.getElementById("nameMessage").innerHTML = "请以英文名称命名";
    document.getElementById("startBuild").value = "生成OPML";
    doc.style.display = "block";
   }
   function buildOpml(){
    owner = document.getElementById("opmlOwner").value;
    email = document.getElementById("opmlEmail").value;
    builder = document.getElementById("opmlBuilder").value;
    url = document.getElementById("opmlUrl").value;
    fileName = document.getElementById("opmlName").value;
    prefix = document.getElementById("opmlPrefix").value;
    msg = document.getElementById("nameMessage");
    btnBuild = document.getElementById("startBuild");
    if(""!=fileName){
     msg.innerHTML = "<font color='green'>文件生成中,请等待……</font>";
     btnBuild.disabled = true;
     btnBuild.value = "文件生成中";
     rssBuild.opmlBuild(typeCode,fileName,owner,email,builder,url,prefix,callBackResult);
    }else{
     msg.innerHTML = "<font color='red'>请填写你的OPML文件名称</font>";
    }
   }
   function callBackResult(result){
    msg = document.getElementById("nameMessage");
    btnBuild = document.getElementById("startBuild");
    if(result=="buildSuccess"){
     msg.innerHTML = "<font color='green'>文件已经成功生成</font>";
     btnBuild.disabled = false;
     btnBuild.value = "生成成功";
    }else if(result=="noChild"){
     msg.innerHTML = "<font color='red'>此类别没有子信息,无法生成</font>";
     btnBuild.disabled = false;
     btnBuild.value = "没有子类可供生成";
    }else{
     msg.innserHTML = "<font color='red'>生成出现错误,请联系管理员</font>";
     btnBuild.disabled = false;
     btnBuild.value = "生成失败";
    }
   }
   function showHideDIV(){
    var doc = document.getElementById("buildOpml");
    doc.style.display =(doc.style.display == "none"?"block":"none");
   }
  </script>
 </head>
 <body>
  <div id="container">
   <table class="tableBorder" align="center" border="0" cellpadding="2"
    cellspacing="1" style="width: 98%;">
    <tr>
     <th height="25" colspan="10">
      类别名称
     </th>
    </tr>
    <tr>
     <s:iterator value="listType">
      <td class="TableRow2">
       <a href="javascript:showBuild('${title }','${typecode }');"
        style="text-shadow: none;"> <s:property value="title" /> </a>
      </td>
     </s:iterator>
    </tr>
   </table>
   <div id="buildOpml" style="display:none;">
    <table class="tableBorder" align="center" border="0" cellpadding="2"
    cellspacing="1" style="width: 98%;">
     <tr>
      <th colspan="3">
       <div id="tableTitle"></div>
      </th>
     </tr>
     <tr>
      <td class="TableRow2">请输入OPML的所有者:</td>
      <td class="TableRow2">
       <input type="text" id="opmlOwner" value="中国分告传媒" disabled="disabled"/>
      </td>
      <td class="TableRow2">
       <div id="ownerMessage">请正确填写OPML的所有者</div>
      </td>
     </tr>
     <tr>
      <td class="TableRow2">请输入OPML所有者的联系邮箱:</td>
      <td class="TableRow2">
       <input type="text" id="opmlEmail" value=" >
      </td>
      <td class="TableRow2">
       <div id="emailMessage">请正确填写邮箱地址</div>
      </td>
     </tr>
     <tr>
      <td class="TableRow2">请输入OPML创建者的名字:</td>
      <td class="TableRow2">
       <input type="text" id="opmlBuilder" value="河南亿禧软件有限公司" disabled="disabled"/>
      </td>
      <td class="TableRow2">
       <div id="builderMessage">请正确填写创建者</div>
      </td>
     </tr>
     <tr>
      <td class="TableRow2">请输入网站的连接URL:</td>
      <td class="TableRow2">
       <input type="text" id="opmlUrl" value=" www.fansgoo.com" disabled="disabled"/>
      </td>
      <td class="TableRow2">
       <div id="urlMessage">请输入合法的网络地址</div>
      </td>
     </tr>
     <tr>
      <td class="TableRow2">请填写您生成文件前缀地址:</td>
      <td class="TableRow2">
       <input type="text" id="opmlPrefix" value=" http://www.fansgoo.com" disabled="disabled"/>
      </td>
      <td class="TableRow2">请填写您生成文件所在的位置</td>
     </tr>
     <tr>
      <td class="TableRow2">请输入您的生成的OPML名称:</td>
      <td class="TableRow2"><input type="text" id="opmlName" name="opmlName"/></td>
      <td class="TableRow2"><div id="nameMessage">请以英文名命名</div></td>
     </tr>
     <tr>
      <td class="TableRow2" colspan="3" align="center">
       <input type="button" id="startBuild" value="生成OPML" οnclick="buildOpml();"/>
      </td>
     </tr>
    </table>
   </div>
   <br />
   <jsp:include page="admin_bottom.jsp" />
  </div>
 </body>
</html>

java生成opml相关推荐

  1. java生成缩略图类源码

    把做工程过程比较好的一些内容备份一下,如下内容段是关于 java生成缩略图类的内容. package com.whatycms.common.util; import java.awt.image.B ...

  2. java 生成二维码 QRCode、zxing 两种方式

    版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢. https://blog.csdn.net/testcs_dn/article/details/ ...

  3. 超详细的java生成excel文件并下载

    在网上随手一搜,可以搜到很多java生成excel文件相关的博客,但每个都有不同,核心点说清楚了,但具体运用的时候,相信大家或多或少都没法一次直接运用,这样每次去找并且运用的时候很费时间,所以这也是我 ...

  4. java生成HMACSHA256的方法

    java生成HMACSHA256的方法 答: data要加密的数据,key密钥 public static String HMACSHA256(String data, String key) thr ...

  5. java生成验证码实例_Java生成验证码功能实例代码

    页面上输入验证码是比较常见的一个功能,实现起来也很简单.给大家写一个简单的生成验证码的示例程序,需要的朋友可以借鉴一下. 闲话少续,直接上代码.代码中的注释很详细. package com.SM_te ...

  6. Java生成CRC16数据校验码

    CRC即循环冗余校验码(Cyclic Redundancy Check[1]  ):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数 ...

  7. java代码上传到私服,java生成 java代码 上传maven私服

    功能:利用java 生成java类 ,并上传至maven私服 使用开源框架:https://github.com/square/javapoet JavaWriter分支 环境:jdk1.8 mave ...

  8. java生成验证码工具类_Java生成图形验证码工具类

    生成验证码效果 validatecode.java 验证码生成类 package cn.dsna.util.images; import java.awt.color; import java.awt ...

  9. java 其他文件转pdf_java 其他文件转成pdf java生成pdf

    java生成pdf需要用到的包pd4ml.jar 下载地址:http://download.csdn.net/detail/yanning1314/7124741 package com.cular. ...

  10. POI以SAX方式解析Excel2007大文件(包含空单元格的处理) Java生成CSV文件实例详解...

    http://blog.csdn.net/l081307114/article/details/46009015 http://www.cnblogs.com/dreammyle/p/5458280. ...

最新文章

  1. 多层感知机MLP、RBF网络、Hopfield网络、自组织映射神经网络、神经网络算法地图
  2. 【干货】分库分表最佳实践
  3. 如何使用HTML5嵌入视频
  4. java swing 图层_用Swing制作精美的图层叠加图
  5. 后台的Activity被系统回收怎么办?
  6. 音频知识之OGG格式分析
  7. php 高斯分布,多元高斯分布完全解析
  8. 复杂性思维中文第二版 十二、合作进化
  9. python制作字符画(非gif转字符图)
  10. 程序人生 - 鼠标手是什么?如何应对鼠标手!
  11. PowerPoint储存此文件时发生错误 出现错误的问题解决方法
  12. 古墓丽影10linux,《古墓丽影11:暗影》Linux平台与Windows平台流畅度对比
  13. 电子计算机设置时间,电脑设置年月日_电脑怎么设置年月日
  14. Linux刻录光盘win10认不到,Windows10系统读不取DVD光驱和刻录光盘
  15. Android 安装自身更新APK时,包解析错误或无法访问文件的可能原因
  16. 2022陕西清北录取人数排名,西工大附中遥遥领先,高新一中40人
  17. 这是新技术时代来临,却始终都无法打开局面的“紧箍咒”
  18. linux定时运行命令
  19. 大数据可视化陈为智慧树_智慧树知到_大数据可视化_答案章节单元测试答案
  20. 2190 悼念512汶川大地震遇难同胞——重建希望小学

热门文章

  1. ADNI数据_PET——官方预处理
  2. Spark实践的阶段性总结
  3. 浅谈Hibernate的flush机制
  4. 对抗攻击与防御 (2):对抗样本的反制策略
  5. Java项目《谷粒商城》高级篇 个人错误总结
  6. Unity-lambda表达式
  7. PROFINET通信技术总结
  8. 流量卡之家:物联网僵尸网络和DDoS攻击:构建网络风险防火墙
  9. 如何把桌面路径设置到D盘
  10. VC资源编辑器里对话框的大小和实际的像素尺寸显示问题