`
shuai1234
  • 浏览: 978703 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

Velocity与Struts-- 静态页生成

    博客分类:
  • java
 
阅读更多

-
-
在Struts中有两种使用Velocity的方法,一种是利用Velocity的vm模板进行页面展示,一种则是利用Velocity来生成静态页面。以下介绍在Struts 1.*版本中使用Velocity模板生成静态页面的过程。

    思路是访问一个Action,在Action中进行静态页面的生成,最终该Action跳转到生成好的静态页面中。

步骤为:
1. 获取VelocityContext,该对象中包含了需要展示的数据
2. 获取指定路径下的vm模板内容
3. 根据Velocity模板,生成字符串
4. 根据指定路径及文件名创建文件
5. 将转换好的模板文件写入指定文件中

源码如下:
Velocity模板

<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 <title>StrutsSample_1</title>
</head>
<body>
 <h3>StrutsSample</h3>
 <table width="400" border="1">
  #foreach($name in $list)
      <tr> <td>$name</td> </tr>
  #end
 </table>
</body>
</html>

 

public class CreateHtmlPage extends DispatchAction {
 public ActionForward createStaticPage(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  ActionForward forward = new ActionForward();
  ActionMessages errors = new ActionMessages();
  String webServer_dir = "D:/Tomcat6/webapps/Mixele_Velocity";
  
  String filepath = webServer_dir + "/success.htm"; //需要生成的静态页
  String vmpath = webServer_dir + "/templates/namelist.vm"; //Velocity模板
  
  VelocityContext context = getContext();
  String templatebody = getTemplateBody(vmpath);
  String str = createHtmlStrByVelocity(context, templatebody);
  File htmlfile = createFile(filepath);
  writerTxtFile(htmlfile, str);
  
  if (!errors.isEmpty()) {
   saveErrors(request, errors);
   forward = new ActionForward(mapping.getInput());
  } else {
   forward = new ActionForward("/success.htm");
  }
  return forward;
 }
 
 /** 获取VelocityContext对象,并向其中注入模板需要展现的数据 */
 public VelocityContext getContext() {
  /* 这里需要注意,因为在web.xml中配置了VelocityViewServlet
   * 所以这里Velocity会在系统启动时初始化
   * 如果没有配置,需要先在这里进行Velocity的初始化工作 */
  VelocityContext context = new VelocityContext();
  List<String> list = new ArrayList<String>();
  String name = null;
  for(int i=0;i<20;i++){
   name = "Hoffman YoYo "+i+" Name";
   list.add(name);
  }
  context.put("list", list);
  return context;
 }
 
 /** 通过指定路径获取vm模板并提取模板内容 */
 public String getTemplateBody(String vmpath) {
  File file = new File(vmpath);
  BufferedReader reader = null;
  StringBuffer strbf = new StringBuffer("");
  try {
   reader = new BufferedReader(new FileReader(file));
   String tempString = null;
   int line = 1;
   while ((tempString = reader.readLine()) != null) {
    strbf.append(tempString);
    line++;
   }
   reader.close();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if (reader != null) {
    try {
     reader.close();
    } catch (IOException e1) {
     e1.printStackTrace();
    }
   }
  }
  return strbf.toString();
 }
 
 /** 根据Velocity模板,生成字符串 */
 public String createHtmlStrByVelocity(VelocityContext context, String vmbody) {
  StringWriter writer = new StringWriter();
  try {
   Velocity.evaluate(context, writer, "myString", vmbody);
  } catch (ParseErrorException e) {
   e.printStackTrace();
  } catch (MethodInvocationException e) {
   e.printStackTrace();
  } catch (ResourceNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  return writer.toString();
 }
 
 /** 在指定路径中创建由Velocity解析出的html文件
  * 当文件存在时,删除该文件,重新创建 */
 public File createFile(String filepath) {
        File file = new File(filepath);
        if(file.exists() && file.isFile()) {
         boolean delFileSuccess = file.delete(); //文件存在删除之
            if(!delFileSuccess) {
             System.out.println("删除文件" + filepath + "失败!");
            }
            try {
             boolean cresteFileSuccess = file.createNewFile();
                if (!cresteFileSuccess) {
                 System.out.println("创建文件" + filepath + "失败!");
                }
   } catch (IOException e) {
    e.printStackTrace();
   }
        }
  return file;
 }
 
 /** 写文本文件 */
 public void writerTxtFile(File filepath, String str) {
  PrintWriter out = null;
  try {
   out = new PrintWriter(new BufferedWriter(new FileWriter(filepath), 1024));
  } catch (IOException e) {
   e.printStackTrace();
  }
  out.println(str);
  out.flush();
  out.close();
 }
}

通过以上的代码,即可将赋予VelocityContext中的数据与VM模板组合,生成静态页面。
以上代码很多地方都是硬编码,其实在实际工程中,静态化的步骤不会发生太大变化,只是模板与生成页面的路径会有更复杂的获取过程。
文章出处:飞诺网(www.diybl.com):http://www.diybl.com/course/3_program/java/javajs/20100719/456479.html

分享到:
评论

相关推荐

    struts-2.3.24所有架包

    7. **模板技术支持**:Struts2可以与FreeMarker、JSP、Velocity等模板技术无缝结合,方便生成动态视图。 8. **国际化支持**:Struts2内置了对多语言环境的支持,可以轻松实现应用的国际化。 压缩包中的“struts-...

    Velocity+Struts生成html

    当模板与后端的数据源(如Java对象)结合时,Velocity会根据模板和数据生成最终的HTML页面,这样既保持了视图的简洁,又实现了动态内容的生成。 ### Struts 框架 Struts是基于Servlet和JSP的MVC框架,它提供了一种...

    velocity-1.7.jar

    **Velocity-1.7.jar** 是一个用于Java应用程序的模板引擎,它允许开发者将静态页面内容与动态数据相结合,生成HTML、XML或者其他格式的输出。Velocity由Apache软件基金会开发,是Apache Turbine项目的一部分,后来...

    velocity-1.6.4

    通过设置上下文中的变量,开发者可以将数据传递给模板,然后由Velocity引擎负责将这些数据与模板结合生成最终的输出。 Velocity的语法简洁且易于理解,主要由以下几类指令组成: 1. 变量引用($variable):用于在...

    velocity1.4.jar

    - **MVC 框架**: 与 Struts、Spring MVC 等框架配合,实现动态页面生成。 - **邮件模板**: 生成个性化邮件内容。 - **报告生成**: 生成 PDF、Excel 等格式的报告。 - **配置文件生成**: 根据模板生成配置文件。 ...

    Velocity语法以及整合struts2总结

    2. **缓存管理**:Velocity支持缓存机制,可以缓存生成的静态页面,减少重复计算和数据库查询。 **五、Velocity替换JSP** 1. **简化视图**:JSP中的Java代码可能导致模板混乱,而Velocity将业务逻辑与视图完全分离...

    Struts2 与 Velocity 实例

    在实际开发中,Struts2 通常与 Velocity 结合使用,Struts2 负责业务逻辑和请求处理,Velocity 负责生成动态内容。通过将 Velocity 模板嵌入到 Struts2 的结果中,可以构建出灵活且易于维护的Web应用。在提供的...

    struts+spring+velocity

    Velocity会解析模板并生成静态HTML,这提高了网页的加载速度,因为不需要在每个请求时重新计算模板。 在"struts+spring+velocity"的组合中,Struts 通常作为前端控制器,负责接收和路由HTTP请求。Spring 提供了业务...

    用velocity模版 实施 struts 的源代码

    Velocity模版语言(Velocity Template Language, VTL)是Apache Velocity引擎的一部分,用于生成动态内容,常用于Struts的视图层构建。在Struts框架中结合Velocity模版,可以更方便地处理页面展示,提高开发效率。 ...

    VELOCITY实例-餐饮新版V1.10.rar

    在实际项目中,开发者会结合后端服务(如Spring MVC或Struts)来提供数据,然后使用Velocity来生成动态视图。压缩包内的脚本参考可能是这些实际应用的简化版本,帮助学习者理解和掌握Velocity在处理餐饮业务流程中的...

    mongo集成spring struts2 json velocity

    开发者可以编写Velocity模板文件(.vm),其中包含动态内容和静态内容。在运行时,Velocity会将模板与数据模型结合,生成最终的HTML输出。这种方式有利于保持视图层的整洁,提高代码的可读性和可维护性。 总结来说...

    velocity demo

    在Java Web开发中,Velocity常与Struts1、Struts2、Hibernate和iBatis等框架结合使用,以实现更加灵活和高效的视图层渲染。 【描述】"struts1 struts2 hibernate ibats 模版" 提到了四个关键的技术组件: 1. **...

    《Velocity java开发指南》中文版

    在Web应用中,Velocity可以作为视图组件,与Struts等MVC框架集成,实现业务逻辑与表示层的分离。这使得Web设计师可以专注于模板的设计,而开发者则处理后台的逻辑,提高了开发效率和代码的可维护性。 Velocity的...

    Struts2属性文件详解

    该属性用于指定HTTP请求与指定Action之间的映射器,默认映射器为`org.apache.struts2.dispatcher.mapper.DefaultActionMapper`,它根据请求的前缀与Action的name属性完成映射。 #### struts.action.extension 此...

    学习拦截器和Velocity视图技术

    在Struts 2中,Velocity视图(.vm文件)用于渲染视图层,它将数据模型与HTML、CSS、JavaScript等静态内容结合在一起。例如,以下是一个简单的Velocity模板: ```vm #set($message = $action.getMessage()) ...

    velocity的简单demo

    # Velocity简介及简单示例 Velocity是Apache软件基金会下的一个开源项目,它是一个基于Java的模板引擎,主要用于生成...在实际项目中,Velocity可以与Spring、Struts等框架结合使用,实现更复杂的动态内容生成需求。

    velocity文档资源

    Velocity可以与Spring MVC、Struts等框架集成,用于生成动态视图。此外,它也可以作为生成配置文件、电子邮件正文、XML文档等静态内容的工具。 总的来说,Velocity作为一种强大的模板引擎,它简化了Web应用的开发,...

    velocity中文

    Velocity是由Apache软件基金会开发的一个开源项目,它最初设计用于生成静态网站内容,但后来被广泛应用于各种Java应用中,如电子邮件模板、报告生成、XML文档构建等。Velocity的核心理念是“分离展示层和逻辑层”,...

    struts2要用到的所有jar包全集

    9. **velocity-1.6.3.jar**:Velocity是另一个模板引擎,它的语法简洁,适用于生成静态内容或邮件模板。在某些情况下,开发者可能会选择Velocity作为替代FreeMarker来渲染视图。 这些jar包构成了一个完整的Struts2...

Global site tag (gtag.js) - Google Analytics