`

用velocity代替jsp作为程序视图展示

阅读更多
http://llying.iteye.com/blog/419685
用veloctiy代替jsp作为程序视图展示
这里我们需要一个velocity的扩展工具包veloctiy-tools,我们可以在velocity的官方网站中得到。
在web.xml中配置相关的servlet
<?xml version="1.0" encoding="UTF-8"?>  
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
    <servlet>  
        <servlet-name>velocity</servlet-name>  
        <servlet-class>  
            org.apache.velocity.tools.view.servlet.VelocityViewServlet   
        </servlet-class>  
        <init-param>  
            <param-name>org.apache.velocity.toolbox</param-name>  
            <param-value>/WEB-INF/toolbox.xml</param-value>  
        </init-param>  
        <init-param>  
            <param-name>org.apache.velocity.properties</param-name>  
            <param-value>/WEB-INF/velocity.properties</param-value>  
        </init-param>  
    </servlet>  
  
    <servlet-mapping>  
        <servlet-name>velocity</servlet-name>  
        <url-pattern>*.vm</url-pattern>  
    </servlet-mapping>  
    <welcome-file-list>  
        <welcome-file>index.jsp</welcome-file>  
    </welcome-file-list>  
</web-app>  

toolbox.xml是实体映射文件后面会有说明
velocity.properties是配置文件
这里仅设置了字符编码
input.encoding=utf-8  
output.encoding=utf-8  
directive.foreach.counter.name = velocityCount
directive.foreach.counter.initial.value = 1
velocimacro.library = /WEB-INF/conf/vm/VM_global_library.vm,/WEB-INF/conf/vm/anyplaceMacro.vm
velocimacro.permissions.allow.inline = true
velocimacro.permissions.allow.inline.to.replace.global = false
velocimacro.permissions.allow.inline.local.scope = false
velocimacro.context.localscope = false

这里我们创建了一个默认的vm模板文件
VM_global_library.vm 放置在/WEB-INF/conf/vm/根目录下 放置一些全局的数据

接下来我们创建一个Person类
public class Person {   
    private String name;   
    private int id;   
    private int age;   
    public String getName() {   
        return name;   
    }   
    public void setName(String name) {   
        this.name = name;   
    }   
    public int getId() {   
        return id;   
    }   
    public void setId(int id) {   
        this.id = id;   
    }   
    public int getAge() {   
        return age;   
    }   
    public void setAge(int age) {   
        this.age = age;   
    }   
}  

PersonService实际处理的对象
import java.util.ArrayList;   
import java.util.List;   
  
  
public class PersonService {   
    static private List<Person> PERSONS = new ArrayList<Person>();   
    static{   
           
        for (int i = 0 ; i<10;i++){   
            Person p = new Person();   
            p.setId(i);   
            p.setAge(i+3);   
            p.setName("p_name "+i);   
            PERSONS.add(p);   
        }   
    }   
       
    public List<Person> getPersons(){   
        return PERSONS;   
    }   
    public Person getPerson(int id){   
        for(int i = 0 ; i<PERSONS.size() ; i++){   
            Person p = PERSONS.get(i);   
            if(id==p.getId()){   
                return p;   
            }   
        }   
        return null;   
    }   
    public int parseInt(String id){   
        return Integer.parseInt(id);   
    }    
}  

现在再看看我们的映射文件应该可以很明确了
<?xml version="1.0" encoding="UTF-8"?>  
<toolbox>  
  <data type="string">  
     <key>personList</key>  
     <value>用户列表</value>  
  </data>  
  
  <tool>  
     <key>personService</key>  
     <scope>request</scope>  
     <request-path>/person/*</request-path>  
     <class>PersonService</class>  
  </tool>  
</toolbox>  

下面看看我们的两个模板
一个是显示全部 一个是显示单个
persons
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">   
<HTML>   
 <HEAD>   
  <TITLE> $personList </TITLE>   
 </HEAD>   
 <BODY>   
  <table>   
    <tr>   
        <td>姓名</td>   
        <td>年龄</td>   
    </tr>   
    #foreach($person in ${personService.getPersons()})   
    <tr>   
        <td><a href="person.vm?id=${person.getId()}">${person.getName()}</a></td>   
        <td>${person.getAge()}</td>   
    <tr>   
    #end   
  </table>   
 </BODY>   
</HTML>  

person
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">   
<HTML>   
 <HEAD>   
  <TITLE> $personList </TITLE>   
 </HEAD>   
 <BODY>   
 #set ($paramName = $request.getParameter("id"))   
 $paramName   
  <table>   
    <tr>   
    <td>姓名</td>   
    <td>年龄</td>   
    </tr>   
    #set( $person = ${personService.getPerson($personService.parseInt($paramName))} )   
    <tr>   
        <td>${person.getName()}</td>   
        <td>${person.getAge()}</td>   
    <tr>   
  </table>   
     
 </BODY>   
</HTML>  

接下来大家可以看看效果 不过很简陋
有一点令我十分不爽 就是String --> int转换 我自己写得方法
如果有知道更好的希望赐教

分享到:
评论

相关推荐

    velocity jsp多视图解析器整合

    // 使用JSP页面 } } ``` **5. 文件结构** 在给定的压缩包文件中,我们看到有`index.jsp`,这通常是一个Web应用的首页,位于Web应用的根目录下。`META-INF`包含元数据,比如`MANIFEST.MF`文件,它定义了应用的配置...

    struts2+Velocity替换jsp项目源码

    通过这个"struts2+Velocity替换jsp项目源码",你可以学习到如何将一个传统的基于JSP的Web应用转换为使用Velocity作为视图层,从而提升项目的可维护性和性能。这是一个很好的实践案例,对于深入理解和掌握Struts2与...

    jsp、freemarker、velocity简介和对比

    ### jsp、freemarker、velocity简介和对比 在Java Web开发领域,模板引擎是连接后端业务逻辑与前端展示层的重要桥梁。本文将重点介绍三种常用的Java Web模板引擎:JSP(Java Server Pages)、Freemarker以及...

    Jsp结合Velocity实现依据Word模板文件生成对应数据文件

    **使用JSP和Velocity结合操作Word模板** 的过程通常包括以下步骤: 1. **创建Word模板**:首先,你需要创建一个包含静态文本和占位符的Word文档。占位符是特定格式的文本,例如 `${variable}`,它们将在运行时被...

    用WebWork、JSP、Velocity建立注册页面-JSP教程,JspServlet

    ### 使用JSP和Velocity构建视图 在构建注册页面时,可以使用JSP或Velocity模板引擎来创建动态的HTML页面。这里简要介绍这两种技术。 #### JSP (JavaServer Pages) JSP是一种用于创建动态Web页面的标准技术。它允许...

    Spring已集成jsp的环境下同时集成Velocity

    总的来说,Spring集成Velocity能为开发者提供更多的选择,既可以继续使用熟悉的JSP,也可以根据项目需求灵活地切换到Velocity模板。通过这种方式,可以充分利用Velocity的高效渲染和清晰的逻辑结构,提高项目的可...

    Java进阶教程Velocity快速掌握模板引擎视频

    本课程从velocity engine也就是velocity引擎开始, 先讲解velocity的基本使用以及基础语法 , 然后再讲解velocity 的进阶内容velocity Tools , 以及velocity作为web项目的视图改如何使用 , 每一部分都会有一个综合案例...

    velocity入门使用教程

    入门部分通过编写一个简单的“Hello, World”程序展示了Velocity的基本使用流程。首先,创建一个模板文件(.vm),在这个文件中使用VTL语法定义输出格式。然后,在Java代码中初始化Velocity引擎,并通过Velocity引擎...

    velocity demo

    在Struts2中,Velocity也可以作为视图模板语言,提供比JSP更清晰的结构和更好的代码组织。 3. **Hibernate**:这是一个流行的Java ORM(对象关系映射)框架,它允许开发者用面向对象的方式来操作数据库,减少了SQL...

    Velocity学习Web项目

    然后,使用Struts的`ActionForward`来指定Velocity模板作为视图。 例如,Action类中的execute方法可能如下所示: ```java public ActionForward execute(ActionMapping mapping, ActionForm form, ...

    学习拦截器和Velocity视图技术

    在本文中,我们将深入探讨两种关键技术:拦截器(Interceptors)和Velocity视图技术,这些都是在Struts 2框架中的核心组件。Struts 2是一个流行的Java Web开发框架,它提供了一种优雅的方式来组织和控制应用程序的...

    用velocity作为JSF的View

    用velocity作为JSF的View相关技术。 本文源自国外网站,花了点时间翻译过来的。 另外本人翻译水平有限,附有英文原文,各位看官自行取舍。

    三大框架整合 前端视图使用velocity渲染,数据访问层使用hibernate+mysql,

    在IT行业中,构建大型应用程序时,常常需要整合多种框架来实现高效、稳定且易于维护的系统。本项目涉及的关键技术包括Velocity、Spring和Hibernate,以及JPA(Java Persistence API),这些技术都是Java开发中的核心...

    velocity-1.5.jar,velocity-1.6.2-dep.jar,velocity-tools-1.3.jar

    Velocity可以作为视图层的模板引擎,使得开发者可以通过简单的模板语言来生成动态HTML,而无需深入理解复杂的JSP语法。同时,Velocity Tools的附加功能进一步增强了Velocity的实用性。 在实际使用中,开发者需要将...

    SpringMVC3+velocity最简单配置例子

    2. **视图(View)**: 负责呈现数据,SpringMVC支持多种视图技术,如JSP、FreeMarker或Velocity等。 3. **控制器(Controller)**: 处理HTTP请求,调用业务逻辑,并将结果转发到相应的视图。 **Velocity** ...

    使用了Struts结构和Velocity模板技术的BLOG

    3. **View**:视图负责展示数据,通常使用JSP或 Velocity模板来实现。Struts通过ActionForm对象将模型数据传递到视图。 **Velocity模板技术** Velocity是一个快速、轻量级的模板引擎,用于生成动态内容。与JSP相比...

    Velocity语法以及整合struts2总结

    【Velocity语法以及整合...总之,Velocity作为模板引擎,因其简洁、高效和易于整合的特点,成为Struts2等框架中替代JSP的热门选择。正确理解和掌握Velocity的语法和整合方法,能有效提升Web应用的开发效率和用户体验。

    jsp程序设计实用案例教程课件、代码

    7. **模板技术**:可能使用了Freemarker或Velocity等模板引擎,分离视图和逻辑。 **学习资源与价值** 本教程不仅提供了详细的课件,帮助学习者系统地学习JSP,而且提供了一个实际的网上书店项目源代码,使学习者有...

    velocity-1.7.jar

    2. **VelocityViewServlet**:一个Servlet,可以直接处理Velocity模板,作为Web应用的视图层。 3. **Resource Loader**:扩展了Velocity的资源加载机制,使其能够从多种来源(如文件系统、数据库等)加载模板。 4. *...

    velocity所需的jar包

    `eclipse相关插件`,虽然不是必需的jar包,但对于使用Eclipse作为IDE的开发者来说,可能需要安装Velocity支持的Eclipse插件,如Velocity视图插件,它能提供模板语法高亮和代码完成等功能,提高开发效率。 为了正确...

Global site tag (gtag.js) - Google Analytics