另外需要commons-collections-3.2.1.jar,commons-lang-2.4.jar,oro-2.0.8.jar
2.在web.xml中配置strus的核心Actionservlet:
<!-- 配置Struts1的配置 -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<!-- 配置struts配置文件的路径 -->
<param-name>config</param-name>
<param-value>/WEB-INF/classes/struts-config.xml</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
3.在web.xml中配置Velocity的配置:
<!-- 配置Velocity的配置 -->
<servlet>
<servlet-name>Velocity</servlet-name>
<servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServl et</servlet-class>
<init-param>
<!-- 这个是定义Velocity工具箱的文件 -->
<param-name>org.apache.velocity.toolbox</param-name>
<param-value>/WEB-INF/classes/toolbox.xml</param-value>
</init-param>
<!--
-->
<init-param>
<!-- 这个是Velocity的配置文件,比如配置输出输入字符集等等 -->
<param-name>org.apache.velocity.properties</param-name>
<param-value>/WEB-INF/classes/velocity.properties</param-value>
</init-param>
<load-on-startup>10</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Velocity</servlet-name>
<url-pattern>*.vm</url-pattern>
</servlet-mapping>
4.配置toolbox.xml文件:这个文件的作用
1.定义工具
2.声明模板变量,这里声明的变量作用域是全局变量
1.定义工具
<tool>
<key>person</key>
<class>person.Person</class>
<scope>request</scope>
<parameter name="name" value="ad" />
</tool>
*key: 指定在模板中使用此工具时的直接参考变量
*class: 工具的实现类
*scope: 工具存在范围有效值request、session、application.三种范围
从名字上可以很容易理解它的意思工具会在不同的范围内实现数据共享
*parameter向工具传递参数
这个是自定义的工具,也可以使用Velocity自带的工具。2.声明变量,可以声明具有不同数据类型的模板常量以后可以在模板中通
过表达式直接引用在toolbox.xml中声明的是全局常量。
<data type="number">
<key>app_version</key>
<value>0.9</value>
</data>
<data type="string">
<key>app_name</key>
<value>Jon's Tool Shop</value>
</data>
<data type="boolean">
<key>debug</key>
<value>true</value>
</data>
5.配置Velocity.properties文件(在web.xml中可以设置没有这个参数,则不用配置,但这个是Velocity的配置文件,最好自己配下,在本地jar包中具有。)
6.配置struts-config.xml文件,将原来action根据标记返回的页面指定.vm文件。
首先浏览器向服务器发送*.do请求,服务器的struts的核心控制ActionServlet将请求拦截,进行判断,(中间环节就省略不写了)如果有处理的action则将请求交给这个action,action返回标识后如果对应的资源是.vm文件,VelocityViewServlet又会对其进行拦截,因为中间使用的是转发技术,所以他们其实是共享一个request,response的,VelocityViewServlet对访问请求进行处理后(解析),将.vm资源文件返回给浏览器。
可以将数据保存到request,session,application这三个域中,在.vm文件中都可以通过${}取出域中的值,另外我在写Action过程中发现,通过request.getServletContext()获取的application会报错(仅仅处理到这一行会报错),但如果用session.getServletContext()就可以使用。。以上就是struts1+velocity整合。
7. 附上struts-config.xml文件部分信息:
<action path="/getVelocity"
parameter="mehtod"
type="cn.go.velocityAction.VelocityStrutsAction" >
<forward name="get" path="/vm/getVelocity.vm" ></forward>
</action>