Spring 集成Velocity,代替JSP输出自定义页面

 

Spring 集成Velocity,代替JSP输出自定义页面

 

摘要:介绍如何配置Springvelocity的集成,并有完整的例子,要求读者掌握springVelocity的一般用法,并了解java web应用的配置和规范。

 

Ø         为什么要代替JSP

 

JSP是 动态网页,它这web服务器中会编译生成html页面显示到终端用户的浏览器上,但是在很多情况下,我们并不需要html页面,我们的终端用户不支持html浏览,例如恒生电子的“投资赢家”,“泉友通”等客户端,它们显示的页面是HSML规范的页面,这种情况下,JSP是不可行的。

 

因此web服务端必须能够提供一种机制,既要像JSP那样动态的加载数据,又要输出我们自定义的页面格式(这里是HSML页面为例,我们公司自己定义的一种标识语言,类似于html,用了多年不肯放弃)。

 

动态生成需要一个模版生成器,广泛使用而且备受好评的是velocityfreemarker,并且都是开源,可以集成到商业产品中。利用spring集成Velocity的完美结合,可以完全代替JSP,实现自定义页面的输出。下面创建一个应用来实现。

 

Ø         Java web应用实现

1.         准备

 spring3.0.2

velocity1.5.0

velocity-tool-view1.4

关于springframworkjar包与其依赖请注意版本搭配(之前用过spring2.5.6搭配几个版本的ibatis都不能成功加载Dao),有些jar是可以兼容其它版本的,有些却不行,这里spring3.0.2只用velocity1.5.0velocity-tool-view1.4,其它版本未经过测试。

 

springframwork的各个jar之间的关系很微妙,有些jar未必用得到,这里将常用的包都加到classpath中了。把这些jar放在java web应用的WEB-INF/lib目录下。

 

 

2.         配置WEB-INF/web.xml添加spring-web支持:

<context-param>

         <param-name>contextConfigLocation</param-name>

         <param-value>/WEB-INF/applicationContext.xml</param-value>

</context-param>

<listener>

         <listener-class>

org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>

 

3.         WEB-INF/web.xml中配置hsml servlet

<servlet>

         <servlet-name>hsml</servlet-name>

<servlet-class>

org.springframework.web.servlet.DispatcherServlet

</servlet-class>

         <load-on-startup>2</load-on-startup>

</servlet>

<servlet-mapping>

                   <servlet-name>hsml</servlet-name>

                   <url-pattern>/hsml/*</url-pattern>

</servlet-mapping>

<welcome-file-list>

         <welcome-file>/hsml/init</welcome-file>

</welcome-file-list>

 

Spring会根据配置的servlet namehsml”来读取对应的“WEB-INF/hsml-servlet.xml”文件,在这个文件中配置VelocityViewResolver,即当spring收到/hsml/*的请求时,会调用这个viewResolver

 

<bean id="velocityConfigurer"

         class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">

         <property name="resourceLoaderPath" value="/WEB-INF/views/" />

</bean>

<bean id="viewResolver"

         class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">

         <property name="cache" value="true" />

         <property name="prefix" value="" />

         <property name="suffix" value=".hsml" />

</bean>

 

4.         编写页面

/WEB-INF/views/目录下新增一个init.hsml文件:

 

<hsml>

<body>

Hello World!

</body>

</hsml>

 

5.         编写Controller

新增一个类为com.hundsun.velocity.tools.view.InitController.java:

 

package com.hundsun.velocity.tools.view;

 

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

 

@Controller

public class InitController {

    @RequestMapping("/init")

    public String init(Model model) {

        return "init";

    }

}

 

并且将它注册到WEB-INF/hsml-servlet.xml文件中

<bean id="initController" class="com.hundsun.velocity.tools.view.InitController" />

 

完成后将其部署到tomcat上,用自定义浏览器打开连接,或者你可以用http抓包工具查看。

 

 

 

6.         加载javabean

后面将会示范如果利用spring的强大功能,管理javabean,把javabean的字段值显示出来。

新增一个类User

package com.hundsun.wap.data.output;

public class User {

    private String username;

    public String getUsername() {

        return username;

    }

    public void setUsername(String username) {

        this.username = username;

    }

}

 

注册到spring配置中WEB-INF/applicationContext.xml:

<bean id="user" class="com.hundsun.wap.data.output.User">

    <property name="username" ref="Hundsun"/>

</bean>

 

并对InitController修改:

@Controller

public class InitController {

    private final User user;

    @RequestMapping("/init")

    public String init(Model model) {

        model.addAttribute("user", this.user);

        return "init";

    }

    @Autowired

    public InitController(User user){

        this.user= user;

    }

}

 

修改页面init.hsml

<hsml>

<body>

Hello ${user.username}!

</body>

</hsml>

 

完成后将其重新部署到tomcat上,用自定义浏览器打开连接。

 

 

可以根据实际开发需要在Controller中添加Dao,即可实现数据库支持。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值