CMS 静态化参考
JAVA静态化,如何生成html问题
http://hi.csdn.net/yuezu1026/
http://topic.csdn.net/u/20080829/14/7ee4965f-f0d3-4c84-a2fa-10d44b735d63.html
http://hi.csdn.net/yuezu1026/
中国灯饰商贸网
www.lighting86.com.cn
中山市旅游网
http://www.86760.com/
public class Test { //config.getDriverName(),config.getUrl(),config.getUserName(),config.getPassword()); public static void main(String[] args) { Config config = ConfigResolver.parseXML(null); String jspPage = config.getIndexFrom();//jsp文件地址 String htmlPage = config.getIndexTo();//html文件名 if(jspPage!=null && htmlPage!=null ){ createHtml(jspPage,htmlPage); //处理站点首页 } jspPage = config.getGroupZhengquanFrom();//jsp文件地址 htmlPage = config.getGroupZhengquanTo();//html文件名 if(jspPage!=null && htmlPage!=null ){ createHtml(jspPage,htmlPage); //处理证券圈子页面 } public static void createHtml(String jspPage,String htmlPage){ System.out.println(jspPage+"----------------start"); BufferedReader in = null; BufferedWriter out= null; try{ in = new BufferedReader(new InputStreamReader(new FileInputStream(htmlPage))); out = getOut(htmlPage+"_old", true); //备分原文件 copyFile(in,out); //备分原文件 }catch(Exception e){ e.printStackTrace(); } in = getIn(jspPage); out = getOut(htmlPage+"_back", true); generateHtml(in, out,jspPage);//生成静态页面 close(in, out); try{ in=new BufferedReader(new InputStreamReader(new FileInputStream(htmlPage+"_back"))); }catch(Exception e){ e.printStackTrace(); } out = getOut(htmlPage, true); copyFile(in,out); //文件拷贝 System.out.println(jspPage+"----------------end"); } public final static void generateHtml(BufferedReader in, BufferedWriter out,String jspPage) { boolean flag=true; if (out == null) return;//不生成静态页面 try { out.write(" <%@ page language=\"java\" %>\r\n"); out.write(" <%@ page contentType=\"text/html; charset=GBK\"%>\r\n"); String c; while ((c = in.readLine()) != null) { // if(c.trim().equals(" <!--portalheaderbegin-->")){ // flag=false; // } // if(c.trim().equals(" <!--portalheaderend-->")){ // if(jspPage.indexOf("channel.jsp")!=-1){ //如果是频道页面 // c=" <jsp:include page='/include/portalheader.jsp?channelId="+jspPage.split("type_id=")[1]+"' />\r\n"; // }else if(jspPage.indexOf("zhengquan_group_act.jsp")!=-1){ //证券圈 // c=" <jsp:include page='/include/portalheader.jsp?groupId=43' />\r\n"; // }else if(jspPage.indexOf("group_general.jsp")!=-1){ //其他圈子 // c=" <jsp:include page='/include/portalheader.jsp?groupId="+jspPage.split("type_id=")[1]+"' />\r\n"; // }else if(jspPage.indexOf("group_index")!=-1){ //圈子首页 // c=" <jsp:include page='/include/portalheader.jsp?groupId=group' />\r\n"; // }else if(jspPage.indexOf("community_index")!=-1){ //社区首页 // c=" <jsp:include page='/include/portalheader.jsp?shequId=abc123' />\r\n"; // }else{ // c=" <jsp:include page='/include/portalheader.jsp' />\r\n"; // } // flag=true; // } if(c.trim().equals(" <!--portalheaderbegin-->")){ flag=false; } if(c.trim().equals(" <!--portalheaderend-->")){ if(jspPage.indexOf("channel.jsp")!=-1){ //如果是频道页面 //c=" <jsp:include page='/include/portalheader.jsp?channelId="+jspPage.split("type_id=")[1]+"' />\r\n"; c=" <jsp:include page='/permissionFilter.jsp' />\r\n"; }else if(jspPage.indexOf("zhengquan_group_act.jsp")!=-1){ //证券圈 c=" <jsp:include page='/include/portalheader.jsp?groupId=43' />\r\n"; }else if(jspPage.indexOf("group_general.jsp")!=-1){ //其他圈子 //c=" <jsp:include page='/include/portalheader.jsp?groupId="+jspPage.split("type_id=")[1]+"' />\r\n"; c=" <jsp:include page='/permissionFilter.jsp' />\r\n"; }else if(jspPage.indexOf("group_index")!=-1){ //圈子首页 c=" <jsp:include page='/include/portalheader.jsp?groupId=group' />\r\n"; }else if(jspPage.indexOf("community_index")!=-1){ //社区首页 c=" <jsp:include page='/include/portalheader.jsp?shequId=abc123' />\r\n"; }else if(jspPage.indexOf("portal/index_act.jsp")!=-1){ //首页 //c=" <jsp:include page='/include/portalheader.jsp?index=yes' />\r\n"; c=" <jsp:include page='/permissionFilter.jsp' />\r\n"; }else if(jspPage.indexOf("portal/blogershare_act.jsp")!=-1){ //分享页 c=" <jsp:include page='/permissionFilter.jsp' />\r\n"; }else{ c=" <jsp:include page='/include/portalheader.jsp' />\r\n"; } flag=true; } if(flag&&c.length()>0){ out.write(c+"\r\n"); } } out.flush(); } catch (IOException e) { e.printStackTrace(); } } public final static void copyFile(BufferedReader from, BufferedWriter to) { if (to == null || from == null) return;//不生成静态页面 try { int c; while ((c = from.read()) != -1) { to.write((char)c); } to.flush(); close(from, to); } catch (IOException e) { e.printStackTrace(); } } public final static BufferedReader getIn(String jspPage) { BufferedReader in = null; URL url = null; URLConnection urlConn = null; try { url = new URL(jspPage); urlConn = url.openConnection();//建立http连接 in = new BufferedReader(new InputStreamReader(urlConn .getInputStream(), "GBK"));//设置Encoding,必须设置,否则显示中文会有问题 } catch (IOException e) { e.printStackTrace(); }finally{ urlConn=null; url=null; } return in; } public final static BufferedWriter getOut(String htmlPage, boolean flag) { BufferedWriter out = null; try { File htmlFile = new File(htmlPage); if (flag) { htmlFile.createNewFile(); } else {//如果flag为false则不覆盖文件 if (htmlFile.exists()) {//如果文件已经存在则返回null return null; } else {//建立新文件 htmlFile.createNewFile(); } } out = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(htmlFile), "GBK"));//设置Encoding } catch (IOException e) { e.printStackTrace(); } return out; }//flag为真则覆盖原文件 public final static void close(BufferedReader in, BufferedWriter out) { try { in.close(); if (out != null) out.close(); } catch (IOException e) { e.printStackTrace(); } } }
public class ConfigResolver { private static String xmlPath = "config/config.xml"; /** * 获取配置文件对象信息 * * @param fileName * @return * @throws Exception */ public static Config parseXML(String fileName) { if (null != fileName) { xmlPath = fileName; } Config configFile = new Config(); try { XMLConfiguration parser = new XMLConfiguration(); parser.setFile(new File(xmlPath)); parser.load(); //首页原 String indexFrom = (String) parser.getProperty("indexFrom"); configFile.setIndexFrom(indexFrom); //首页目标 String indexTo = (String) parser.getProperty("indexTo"); configFile.setIndexTo(indexTo); //圈子页原 String groupZhengquanFrom = (String) parser .getProperty("groupZhengquanFrom"); configFile.setGroupZhengquanFrom(groupZhengquanFrom); //圈子页目标 String groupZhengquanTo = (String) parser .getProperty("groupZhengquanTo"); configFile.setGroupZhengquanTo(groupZhengquanTo); //频道页原 String channelFrom = (String) parser.getProperty("channelFrom"); configFile.setChannelFrom(channelFrom); //频道页目标 String channelTo = (String) parser.getProperty("channelTo"); configFile.setChannelTo(channelTo); String channelIds = (String) parser.getProperty("channelIds"); configFile.setChannelIds(channelIds); //大杂烩原 String dazahuiFrom = (String) parser.getProperty("dazahuiFrom"); configFile.setDazahuiFrom(dazahuiFrom); //大杂烩目标 String dazahuiTo = (String) parser.getProperty("dazahuiTo"); configFile.setDazahuiTo(dazahuiTo); //别人的订阅,关注原 String anthorTakenFrom = (String) parser .getProperty("anthorTakenFrom"); configFile.setAnthorTakenFrom(anthorTakenFrom); //别人的订阅,关注目标 String anthorTakenTo = (String) parser.getProperty("anthorTakenTo"); configFile.setAnthorTakenTo(anthorTakenTo); //房产圈子页原 String fangChanFrom = (String) parser .getProperty("groupFangchanFrom"); configFile.setGroupFangchanFrom(fangChanFrom); //房产圈子页目标 String fangChanTo = (String) parser.getProperty("groupFangchanTo"); configFile.setGroupFangchanTo(fangChanTo); String groupIds = (String) parser.getProperty("groupIds"); configFile.setGroupIds(groupIds); //首页用圈子文章list原 String quanziArticleListFrom = (String) parser.getProperty("quanziArticleListFrom"); configFile.setQuanziArticleListFrom(quanziArticleListFrom); //首页用圈子文章list目标 String quanziArticleListTo = (String) parser.getProperty("quanziArticleListTo"); configFile.setQuanziArticleListTo(quanziArticleListTo); String quanziIds = (String) parser.getProperty("quanziIds"); configFile.setQuanziIds(quanziIds); //圈子首页原 String groupIndexFrom = (String) parser.getProperty("groupIndexFrom"); configFile.setGroupIndexFrom(groupIndexFrom); //圈子首页目标 String groupIndexTo = (String) parser.getProperty("groupIndexTo"); configFile.setGroupIndexTo(groupIndexTo); //社区首页原 String shequIndexFrom = (String) parser.getProperty("shequIndexFrom"); configFile.setShequIndexFrom(shequIndexFrom); //社区首页目标 String shequIndexTo = (String) parser.getProperty("shequIndexTo"); configFile.setShequIndexTo(shequIndexTo); //热点排名周源 String articleRankWeekFrom = (String) parser.getProperty("articleRankWeekFrom"); configFile.setArticleRankWeekFrom(articleRankWeekFrom); //热点排名周目标 String articleRankWeekTo = (String) parser.getProperty("articleRankWeekTo"); configFile.setArticleRankWeekTo(articleRankWeekTo); //热点排名月源 String articleRankMonthFrom = (String) parser.getProperty("articleRankMonthFrom"); configFile.setArticleRankMonthFrom(articleRankMonthFrom); //热点排名月目标 String articleRankMonthTo = (String) parser.getProperty("articleRankMonthTo"); configFile.setArticleRankMonthTo(articleRankMonthTo); //图片首页more源 String photoIndexMoreFrom = (String) parser.getProperty("photoIndexMoreFrom"); configFile.setPhotoIndexMoreFrom(photoIndexMoreFrom); //图片首页more目标 String photoIndexMoreTo = (String) parser.getProperty("photoIndexMoreTo"); configFile.setPhotoIndexMoreTo(photoIndexMoreTo); //博客分享源 String blogerShareFrom = (String) parser.getProperty("blogerShareFrom"); configFile.setBlogerShareFrom(blogerShareFrom); //博客分享目标 String blogerShareTo = (String) parser.getProperty("blogerShareTo"); configFile.setBlogerShareTo(blogerShareTo); } catch (Exception e) { e.printStackTrace(); } return configFile; } }
end
相关推荐
<property name="resourceLoaderPath" value="/WEB-INF/velocity/" /> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"> ...
4. **创建Velocity模板**: 在指定的资源路径(如`/WEB-INF/velocity/`)下创建`.vm`文件,如`example.vm`,并使用VTL语法引用模型中的数据。 5. **运行与测试**: 启动服务器,访问对应的URL,SpringMVC会调用...
对于初学者,可以从简单的模板如Freemarker或Velocity开始,随着经验的积累,可以尝试使用更强大的框架如Spring MVC或Play Framework来构建大型的Web应用。无论选择哪种模板,理解其基本原理和工作方式都是至关重要...
在模板引擎领域,Freemarker与JSP、Thymeleaf、Velocity等都是常见的选择。每种模板引擎有其特点和适用场景,例如JSP是直接在服务器端生成HTML,而Freemarker和Thymeleaf则更加注重分离视图和逻辑,提供更清晰的模板...
Freemarker与其他几种模板引擎技术进行了对比,包括JSP、Velocity和Thymeleaf: - **JSP**:专为Servlet设计,不能独立使用。 - **Velocity**:更新缓慢,自2010年发布2.0版本以来,7年内未有更新。Spring Boot官方...
- **Web MVC增强**:增加了对RESTful风格的支持,增强了模板引擎的集成,如FreeMarker、Velocity等。 - **WebSocket支持**:引入WebSocket API,为实时通信提供了新的解决方案。 - **性能优化**:在内存使用和...
同时,它增强了视图解析能力,支持多种视图技术,如JSP、FreeMarker和Velocity等。 对于Struts框架的集成,Spring提供了Struts Action与Spring Bean的无缝连接,允许开发者利用Spring的DI和AOP(面向切面编程)特性...
<property name="resourceLoaderPath" value="/WEB-INF/velocity/" /> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"> ...
在Java中,主要的模板引擎有JSP、Thymeleaf、FreeMarker、Velocity等。 二、Spring Boot集成FreeMarker 要集成FreeMarker,首先我们需要引入依赖,除了核心的web依赖外,只需引入FreeMarker的starter依赖。 ```...
此外,该版本还加强了模型视图处理,例如支持模板引擎的改进,如FreeMarker和Velocity,使视图渲染更为便捷。 在AOP(面向切面编程)模块中,Spring 3.2.8.RELEASE引入了更高效的切面实现,提高了代理性能,同时...
这篇博客将深入探讨如何在Spring中利用FreeMarker和Velocity来发送邮件。 首先,我们需要理解Spring的`JavaMailSender`接口,它是发送邮件的核心组件。通过实现这个接口,我们可以配置SMTP服务器的相关参数,如主机...
Spring Boot 不仅支持 Freemarker,还支持 Thymeleaf、Velocity 等多种模板引擎,同时也支持与 RabbitMQ、Redis 等中间件的集成。 **4.1 Thymeleaf 集成** 集成 Thymeleaf 的步骤与 Freemarker 类似,只需添加相应...
- **Velocity/Thymeleaf**: FreeMarker与类似的模板引擎相比,各有优劣,选择时需考虑项目需求和团队熟悉度。 以上是对FreeMarker的基本介绍,包括其核心概念、语法特性以及在Web应用中的使用。通过深入学习和实践...
Struts2整合了许多其他框架,如Freemarker和Velocity模板引擎,OGNL表达式语言,以及拦截器机制。 五、Java EE相关框架 除了上述独立的框架,Java EE(现在称为Jakarta EE)提供了一系列标准的服务器端框架,如JSF...
3. **MVC(Model-View-Controller)**:Spring MVC提供了全面的Web应用解决方案,3.0.6版本增强了对RESTful风格的支持,提升了异步处理能力,并引入了模板引擎支持,如FreeMarker和Velocity。 4. **数据访问/集成...
11. **Freemarker/Velocity**: `freemarker.jar`, `velocity.jar`是两种常用的模板引擎,可以动态生成HTML或其他文本格式的文件。 12. **SLF4J/Logback**: `slf4j-api.jar`, `logback-classic.jar`, `logback-core....
- **集成环境**:如Spring框架可以通过`org.springframework.ui.velocity.VelocityEngineFactoryBean`来集成Velocity。 #### 六、Velocity进阶技巧 1. **自定义宏**:创建可重用的模板片段。 2. **模板继承**:...
org.apache.velocity org.apache.xerces org.apache.xml org.apache.xmlbeans org.apache.xmlcommons org.apache.derby org.apache.poi org.apache.struts org.apache.taglibs 5号包: org.codehaus.castor org....
- 支持多种视图技术:如 JSP、FreeMarker、Velocity 等。 8. **学习资源**: - 博文链接:[https://ruoli.iteye.com/blog/2320390](https://ruoli.iteye.com/blog/2320390) - 官方文档:...
它允许开发者创建清晰、解耦的Web应用,支持视图技术如JSP、FreeMarker和Velocity,并引入了模型验证和数据绑定等新功能。 5. **Web服务支持**:Spring 2.0增加了对Web服务的全面支持,包括SOAP和RESTful风格的服务...