Struts2+Spring2.5.6+Hibernate3+Freemarker整合(二)



Struts2+Spring2.5.6+Hibernate3+Freemarker整合(二)继上一篇文章继续接下来的配置,上次已经将spring与hibernate的整合做了一个简单的配置,现在开始融入struts2,struts2采用零配置,所以必须得首先配置struts2.xml。

Java代码  收藏代码
  1. <?xml version=”1.0″ encoding=”UTF-8″ ?>
  2. <!DOCTYPE struts PUBLIC ”-//Apache Software Foundation//DTD Struts Configuration 2.1//EN” ”http://struts.apache.org/dtds/struts-2.1.dtd”>
  3. <struts>
  4.     <!– 国际化编码 –>
  5.     <constant name=”struts.i18n.encoding” value=”UTF-8″ />
  6.     <!– 定位视图资源的根路径。默认值为/WEB-INF/content –>
  7.     <constant value=”/WEB-INF/templates” name=”struts.convention.result.path” />
  8.     <!– 指定convention扫描以xxx结尾的包 –>
  9.     <constant value=”action” name=”struts.convention.package.locators” />
  10.     <!– 是否将Action类转换成小写 –>
  11.     <constant value=”false” name=”struts.convention.package.lowercase” />
  12.     <!– 是否将actionName分割,去掉action部分,以大写字母作为分割 –>
  13.     <constant value=”" name=”struts.convention.action.name.separator” />
  14.     <!– 设置默认的父包 –>
  15.     <constant value=”MAIN” name=”struts.convention.default.parent.package” />
  16.     <package name=”MAIN” extends=”struts-default” namespace=”/”>
  17.     </package>
  18. </struts>

struts.xml的一些零配置变量已经注册好,既然使用的spring,那当然得让spring来帮我们管理action咯,不然就失去s2sh整合的意义咯。下面我们来看看如何让struts2融入到这个框架中,首先得在lib包中加上struts2-convention-plugin-2.2.1.jar与struts2-spring-plugin-2.1.8.1.jar两个包,分别是零配置与spring插件。接下来配置web.xml

Java代码  收藏代码
  1. <?xml version=”1.0″ encoding=”UTF-8″?>
  2. <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
  3.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd”>
  4.     <listener>
  5.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  6.     </listener>
  7.     <context-param>
  8.         <param-name>contextConfigLocation</param-name>
  9.         <param-value>classpath*:applicationContext*.xml</param-value>
  10.     </context-param>
  11.     <filter>
  12.         <filter-name>struts2</filter-name>
  13.         <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  14.     </filter>
  15.     <filter-mapping>
  16.         <filter-name>struts2</filter-name>
  17.         <url-pattern>/*</url-pattern>
  18.     </filter-mapping>
  19. </web-app>

配置文件已经写好了,下面来写一个Action类

Java代码  收藏代码
  1. /**
  2.  *
  3.  */
  4. package com.action;
  5. import java.util.List;
  6. import javax.annotation.Resource;
  7. import org.apache.log4j.Logger;
  8. import org.apache.struts2.convention.annotation.Action;
  9. import org.apache.struts2.convention.annotation.ParentPackage;
  10. import org.apache.struts2.convention.annotation.Result;
  11. import org.apache.struts2.convention.annotation.Results;
  12. import org.springframework.context.annotation.Scope;
  13. import org.springframework.stereotype.Component;
  14. import com.opensymphony.xwork2.ActionSupport;
  15. import com.service.HibernateTemplateService;
  16. /**
  17.  *
  18.  * @author 张廷 2011-3-19下午07:36:40
  19.  *
  20.  */
  21. @ParentPackage(“MAIN”)
  22. @Action(“RegistAction”)
  23. @Results( { @Result(name = ”list”, location = ”list.ftl”, type = ”freemarker”) })
  24. @Component(“RegistAction”)
  25. @Scope(“prototype”)
  26. public class RegistAction extends ActionSupport {
  27.     private static final long serialVersionUID = 773060530483225473L;
  28.     @Resource(name = ”hibernateTemplateServiceImpl”)
  29.     private HibernateTemplateService hibernateTemplateService;
  30.     private Student student;
  31.     private Logger logger = Logger.getLogger(this.getClass());
  32.     private List<Student> stuList;
  33.     @SuppressWarnings(“unchecked”)
  34.     public String findStu() {
  35.         stuList = hibernateTemplateService.findAllStu(“from Student”);
  36.         return ”list”;
  37.     }
  38.     public List<Student> getStuList() {
  39.         return stuList;
  40.     }
  41.     public void setStuList(List<Student> stuList) {
  42.         this.stuList = stuList;
  43.     }
  44.     public HibernateTemplateService getHibernateTemplateService() {
  45.         return hibernateTemplateService;
  46.     }
  47.     public void setHibernateTemplateService(HibernateTemplateService hibernateTemplateService) {
  48.         this.hibernateTemplateService = hibernateTemplateService;
  49.     }
  50. }

一个简单Action类已经写好了,在这说明一下其中的注释,@ParentPackage是指明继承于哪个包,@Action注册一个action组件,在注册action中的name一定要和@Component的组件名相同,不然Spring是找不到相应的action与之对应的。因为struts2本身就支持freemarker,而且freemarker是struts2的依赖包,固然struts2支持freemarker的返回类型,所以在Result中我们将返回的类型设置为freemarker,视图则指定为相应的ftl文件。万事具备,只欠freemarker模板了,下面来看看如何写一个freemarker。在WEB-INF下创建一个templates文件夹,在该文件夹目录下创建list.ftl文件。

Java代码  收藏代码
  1. <!DOCTYPE html PUBLIC ”-//W3C//DTD XHTML 1.0 Transitional//EN” ”http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
  2. <html xmlns=”http://www.w3.org/1999/xhtml”>
  3. <head>
  4. <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
  5. <title>list display</title>
  6. </head>
  7.     <body>
  8.     <#–当前时间:${date}–>
  9.         <table border=1>
  10.             <tr>
  11.                 <th>学号</th>
  12.                 <th>姓名</th>
  13.                 <th>年龄</th>
  14.                 <th>生日</th>
  15.                 <th>性别</th>
  16.             </tr>
  17.             <#list stuList as stu>
  18.             <tr>
  19.                 <td>${stu.stuNumber}</td>
  20.                 <td>${stu.stuName}</td>
  21.                 <td>${stu.age}</td>
  22.                 <td>${stu.birth}</td>
  23.                 <td>${stu.sex.sexName}</td>
  24.             </tr>
  25.             </#list>
  26.         </table>
  27.      </body>
  28. </html>

这只是一个简单的freemarker模版,这不做深入讲解。当然还要配置相应的freemarker.properties文件,不然出现乱码哦。
freemarker.properties

Java代码  收藏代码
  1. template_update_delay=1
  2. datetime_format=yyyy-MM-dd HH:mm:ss
  3. date_format=yyyy-MM-dd
  4. time_format=HH:mm:ss
  5. number_format=0.######;
  6. boolean_format=true,false
  7. whitespace_stripping=true
  8. locale=zh_CN
  9. default_encoding=UTF-8
  10. url_escaping_charset=UTF-8
  11. classic_compatible=true

一切都已就绪,访问一下试试看吧,输入http://localhost:8080/S2SH_FreeMarker/RegistAction!findStu,看一下结果吧。

结果是已经成功了,s2sh+freemarker的整合就已经完成了。

http://z276356445t.iteye.com/blog/977695