Velocity与Struts集成

来源:互联网 发布:管理快递的软件 编辑:程序博客网 时间:2024/05/16 05:29

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姓名性别年龄住址200804140001shirdrnmale25ChangChun200804150001Poolinafemale24Changchun200804150002Selibymale25Changchun200804150006Koppafemale24Changchun200804150008Justinmale24New York200804150009Soloorfemale24London200804150015Sujnnmale22Shanghai200804160001SAgoop   200804160002SAgoop   200804160003SAgoop   200804160004SAgoop   200804160005SAgoop   200804160006SAgoop   200804160007SAgoop   200804160008SAgoop   200804160009SAgoop   200804160010SAgoop   200804160011SAgoop   200804160012SAgoop   200804160013SAgoop   200804160014SAgoop   200804160015SAgoop   200804160016SAgoop   200804160017SAgoop   200804160018SAgoop   200804160019异域王者男20Beijing200804160021异域王者男20Beijing200804160022风平浪静female22长春200804160023风平浪静female22长春200804160024异域王者男20Beijing200804170001异域王者female20Beijing200804170030飞鱼男20Beijing200804170032飞鱼男20Beijing200804170033飞鱼男20Beijing200804170035飞鱼男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模板)。