Velocity与Struts集成

public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {
   response.setContentType("text/html");
   response.setCharacterEncoding("UTF-8");    // 设置编码方式
   Person person = new Person();
   PersonService personDao = new PersonService();
   List personList = personDao.queryPersons(person);    // 查询
   HttpSession session = request.getSession();    
   session.setAttribute("personList", personList);    // 将查询结果列表放到当前的Session中
   return mapping.findForward("success");    //   跳转到success代表视图(.vm)
}
}

这时,在看一下如何在struts-config.xml中配置Action和目标视图,其实和普通的Struts配置是一样的,只是把以前使用的JSP作为视图,前部替换为Velocity视图,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
<data-sources />
<form-beans />
<global-exceptions />
<global-forwards />

<action-mappings >
    <action
      path="/searchPerson"
      scope="request"
      type="org.shirdrn.struts.action.SearchPersonAction">
      <forward name="success" path="/templates/show.vm"></forward>
    </action>
</action-mappings>

<message-resources parameter="org.shirdrn.struts.ApplicationResources" />
</struts-config>

这里,show.vm是Velocity模板,就是使用表格显示数据,内容如下所示:

<html>
<head>
   <title>Velocity与Servlet集成</title>
</head>
<body border="2" borderColor="#000000">
   <h1>Velocity与Servlet集成的例子</h1>
   <table bgcolor="#32CD32" align="center" width="60%" cellspacing="1" cellpadding="1">
    <tr>
     <td>ID</td>
     <td>姓名</td>
     <td>性别</td>
     <td>年龄</td>
     <td>住址</td>
    </tr>
    #foreach($person in $personList)
    <tr>
     <td>$!person.id</td>
     <td>$!person.name</td>
     <td>$!person.gender</td>
     <td>$!person.age</td>
     <td>$!person.addr</td>
    </tr>
    #end
   </table>
</body>
</html>

要使用Velocity的toolbox.xml中配置当前可用的工具集,其实toolbox.xml中指定的工具都可以在本应用中加载使用。

工具箱toolbox.xml中配置了Velocity与Struts集成可用的工具,具体内容如下所示:

<?xml version="1.0"?>
<toolbox>
<tool>
     <key>link</key>
     <scope>request</scope>
     <class>
       org.apache.velocity.tools.struts.StrutsLinkTool
     </class>
</tool>
<tool>
     <key>msg</key>
     <scope>request</scope>
     <class>
       org.apache.velocity.tools.struts.MessageTool
     </class>
</tool>
<tool>
     <key>errors</key>
     <scope>request</scope>
     <class>
       org.apache.velocity.tools.struts.ErrorsTool
     </class>
</tool>
<tool>
     <key>form</key>
     <scope>request</scope>
     <class>
       org.apache.velocity.tools.struts.FormTool
     </class>
</tool>
<tool>
     <key>tiles</key>
     <scope>request</scope>
     <class>
       org.apache.velocity.tools.struts.TilesTool
     </class>
</tool>
<tool>
     <key>validator</key>
     <scope>request</scope>
     <class>
       org.apache.velocity.tools.struts.ValidatorTool
     </class>
</tool>
</toolbox>

注意:在本文中并没有使用到toolbox.xml中指定的任何一个工具,将其去掉仍然能够测试运行。

最后,就是配置web.xml了,一定要映射请求*.vm视图时指定的org.apache.velocity.tools.view.servlet.VelocityViewServlet,这点很重要,否则无法派发视图。web.xml的配置如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>3</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>3</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
</servlet>

<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>                                                
   <load-on-startup>10</load-on-startup>
</servlet>


<servlet-mapping>
<servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>velocity</servlet-name>
<url-pattern>*.vm</url-pattern>     
</servlet-mapping>
</web-app>

现在,可以测试Velocity与Struts集成的结果了。

在浏览器地址栏中键入链接:

http://localhost:8080/VelocityStruts/searchPerson.do

可以看到视图显示的列表结果,如下所示:

Velocity与Struts集成的例子

ID姓名性别年龄住址
200804140001shirdrnmale25ChangChun
200804150001Poolinafemale24Changchun
200804150002Selibymale25Changchun
200804150006Koppafemale24Changchun
200804150008Justinmale24New York
200804150009Soloorfemale24London
200804150015Sujnnmale22Shanghai
200804160001SAgoop   
200804160002SAgoop   
200804160003SAgoop   
200804160004SAgoop   
200804160005SAgoop   
200804160006SAgoop   
200804160007SAgoop   
200804160008SAgoop   
200804160009SAgoop   
200804160010SAgoop   
200804160011SAgoop   
200804160012SAgoop   
200804160013SAgoop   
200804160014SAgoop   
200804160015SAgoop   
200804160016SAgoop   
200804160017SAgoop   
200804160018SAgoop   
200804160019异域王者20Beijing
200804160021异域王者20Beijing
200804160022风平浪静female22长春
200804160023风平浪静female22长春
200804160024异域王者20Beijing
200804170001异域王者female20Beijing
200804170030飞鱼20Beijing
200804170032飞鱼20Beijing
200804170033飞鱼20Beijing
200804170035飞鱼20Beijing

心得总结

Velocity与Struts集成,Velocity主要是根据toolbox.xml中指定的工具来替代Struts,比如替代Struts标签,因为Velocity模板非常简洁。

Velocity与Struts集成,对于Velocity的属性文件velocity.properties使用Velocity自带的,而无需我们自己去配置。如果单独配置Velocity的属性文件velocity.properties,对于中文需要在其中设置编码。而Velocity与Struts集成了,编码的设置可以放到Action中进行设置,或者使用Servlet为本应用统一设置一个单独的编码过滤器。

Velocity与Struts集成,不需要单独进行模板的获取(比如单独使用Velocity,像在文章 VelocityServlet的应用 中需要通过Velocity上下文显式获取Velocity模板)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值