如何实现Velocity 与Struts2框架相互集成的应用
suiw9 2024-11-13 14:44 31 浏览 0 评论
软件项目实训及课程设计指导——如何在Web应用系统中实现Velocity 与Struts2框架相互集成的应用实例
1、Struts 2应用框架提供对 Velocity 和 FreeMarker 模板引擎的支持
在Struts 2应用框架中不仅继续保留有对Velocity模板引擎的支持,而且也提供对 另一个广泛应用的FreeMarker 模板引擎的支持。
在Struts 2应用框架中集成Velocity模板引擎的实现过程比在Struts应用框架中集成Velocity模板引擎要简单的多,因为Struts 2应用框架系统内带有对Velocity模板引擎的技术支持。
2、集成Struts 2应用框架和Velocity模板引擎时所需要的系统配置
(1)添加有关的系统JAR包文件
实现Struts 2应用框架集成Velocity模板引擎时所需要的系统JAR包,除了Struts2应用框架本身所需要的系统包文件以外,还需要与Velocity模板引擎有关的系统包文件——主要为velocity-1.6.1-dep.jar、velocity-tools-1.4.jar和velocity-tools-view-1.4.jar,请参考如下示图所示。
(2)在web.xml部署描述文件中配置定义VelocityViewServlet组件
在Web项目的部署描述符web.xml部署描述文件中除了要配置定义出Struts 2应用框架本身的org.apache.struts2.dispatcher.FilterDispatcher组件类外,也还需要配置定义出org.apache.velocity.tools.view.servlet.VelocityViewServlet组件类,请参考如下代码示例中对VelocityViewServlet类的配置示例。
<servlet>
<servlet-name>velocity</servlet-name>
<servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class>
<init-param>
<param-name>org.apache.velocity.properties</param-name>
<param-value>/WEB-INF/velocity.properties</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>velocity</servlet-name>
<url-pattern>*.vm</url-pattern>
</servlet-mapping>
3、在Web项目中添加/WEB-INF/velocity.properties文件
(1)在Web项目的WEB-INF目录中新建一个文件名称为velocity.properties的文件,参看如下示图所示
(2)velocity.properties文件中的内容如下
file.resource.loader.path = /
runtime.log = /velocity.log
default.contentType=text/html
input.encoding=GBK
output.encoding=GBK
4、在Web项目中添加一个请求页面velocityUserLogin.jsp
(1)在MyEclipse开发工具中新增加一个velocityUserLogin.jsp页面文件,参看如下示图所示
(2)velocityUserLogin.jsp页面文件中的代码示例如下
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>My JSP 'fmtUserLogin.jsp' starting page</title>
</head><body>
<form action="/Struts2Web/velocityUserInfoAction.action" method="post" >
您的名称:<input type="text" name="userName" /> <br />
您的密码:<input type="password" name="userPassWord" /> <br />
<input type="submit" value="提交" name="submitButton" onclick="this.value='正在提交请求,请稍候'"/>
<input type="reset" value="取消" />
</form>
</body></html>
(3)velocityUserLogin.jsp页面静态预览效果参看如下示例图所示
5、在Web项目中再设计一个处理的Action类VelocityUserInfoAction
(1)VelocityUserInfoAction所在的程序包名称为com.px1987.struts2.action,并继承于com.opensymphony.xwork2.ActionSupport的基类,参看如下示例图所示的创建过程。
(2)VelocityUserInfoAction程序类的代码示例如下
package com.px1987.struts2.action;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.px1987.struts2.actionform.UserInfoActionForm;
public class VelocityUserInfoAction extends ActionSupport {
private String userName=null;
private String userPassWord=null;
private UserInfoActionForm oneUserInfo=null;
public VelocityUserInfoAction() {
}
/** 在该方法中进行用户登陆的功能实现 */
public String execute(){
String resultMessage=null;
boolean returnResult=
getUserName().equals("yang") &&getUserPassWord().equals("1234");
if(returnResult){
resultMessage =getUserName()+"您登录成功!";
}
else{
resultMessage =getUserName()+"您的身份信息无效!";
}
HttpServletRequest request=ServletActionContext.getRequest();
request.setAttribute("showResultInfo", resultMessage);
return this.SUCCESS;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassWord() {
return userPassWord;
}
public void setUserPassWord(String userPassWord) {
this.userPassWord = userPassWord;
}
}
6、在Web项目中的系统配置文件struts.xml文件中配置出该Action类
(1)最终配置的代码示例
<action name ="velocityUserInfoAction"
class ="com.px1987.struts2.action.VelocityUserInfoAction">
<result name="success" type="velocity">/userManage/showInfoTemplate.vm</result>
<result name="input">/userManage/velocityUserLogin.jsp</result>
</action>
由于Struts2应用框架使用Velocity作为其默认的模板技术,因此Struts2应用框架对Velocity模板技术的支持是非常良好的。为了在Struts2应用框架中使用Velocity模板技术,只需要在struts.xml文件中进行简单配置。
(2)将Action类的配置定义中的<result>标签内的type属性设置为velovity
由于在Struts 2 应用框架中是把各种类型的结果视图——如 JSP、Velocity、FreeMarker 等都封装成 ResultType 的子类。也就是说对于每一种类型的视图,在J2EE Struts 2应用框架中都有与之对应的 ResultType 的实现类,而本示例中的Velocity 视图对应的类是 org.apache.struts2.dispatcher.VelocityResult。
Struts 2 应用框架中的Action类的配置定义中的<result>标签内的type属性默认值是"dispatcher"(也就是对请求的转发Forward方式)。开发人员可以根据自己的应用需要指定不同的类型,如redirect、stream等。
上面的代码示例中的配置代码示例是将<result>标签内的type属性设置为velocity,也就是将<result>标签内的type属性设置为velocity的Action类的定义示例,注意其中黑体标识的语句。
7、在Web项目中设计Velocity的模板页面showInfoTemplate.vm
(1)在Web项目中新增加模板页面showInfoTemplate.vm文件,创建过程参看如下示例图所示
(2)模板页面showInfoTemplate.vm文件的代码示例如下,注意其中黑体标识的语句
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> <head> <title>用户登录成功信息显示页面</title>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
</head><body>
<h2>采用标准的方式获得参数值: $showResultInfo</h2 > <br>
</body></html>
由于Velocity模板引擎系统采用简单而强大的模板语言VTL实现对Web页面的渲染,因此能保证在Dreamwaver之类的Web页面可视化编辑器中都能够正常显示(参看如下示例图所示)。
另外,模板文件可以是任意的文件扩展名,采用*.vm、*.html或者*.xml都是可以的(本示例采用*.vm文件扩展名),这样就能直接在Web浏览器中看到Web页面的预览的效果。
8、部署并测试本示例Web项目
(1)部署本示例的Web项目相关程序到Web服务器中,部署后的结果参看如下示例图所示
(2)在Web浏览器中启动待测试的Web页面
在Web浏览器的URL地址栏中输入如下的URL地址信息http://127.0.0.1:8080/Struts2Web/userManage/velocityUserLogin.jsp,然后启动待测试的Web页面,参看如下示图所示。
如何实现Velocity模板引擎与Struts 框架相互集成
如何在Web应用系统表示层开发中应用Velocity模板技术
相关推荐
- 5款Syslog集中系统日志常用工具对比推荐
-
一、为何要集中管理Syslog?Syslog由Linux/Unix系统及其他网络设备生成,广泛分布于整个网络。因其包含关键信息,可用于识别网络中的恶意活动,所以必须对其进行持续监控。将Sys...
- 跨平台、多数据库支持的开源数据库管理工具——DBeaver
-
简介今天给大家推荐一个开源的数据库管理工具——DBeaver。它支持多种数据库系统,包括Mysql、Oracle、PostgreSQL、SLQLite、SQLServer等。DBeaver的界面友好...
- 强烈推荐!数据库管理工具:Navicat Premium 16.3.2 (64位)
-
NavicatPremium,一款集数据迁移、数据库管理、SQL/查询编辑、智能设计、高效协作于一体的全能数据库开发工具。无论你是MySQL、MariaDB、MongoDB、SQLServer、O...
- 3 年 Java 程序员还玩不转 MongoDB,网友:失望
-
一、什么场景使用MongoDB?...
- 拯救MongoDB管理员的GUI工具大赏:从菜鸟到极客的生存指南
-
作为一名在NoSQL丛林中披荆斩棘的数据猎人,没有比GUI工具更称手的瑞士军刀了。本文将带你围观五款主流MongoDB管理神器的特性与暗坑,附赠精准到扎心的吐槽指南一、MongoDBCompass:...
- mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?
-
前言最近在做neo4j相关的同步处理,因为产线的可视化工具短暂不可用,发现写起来各种脚本非常麻烦。...
- solidworks使用心得,纯干货!建议大家收藏
-
SolidWorks常见问题...
- 统一规约-关乎数字化的真正实现(规范统一性)
-
尽管数字化转型的浪潮如此深入人心,但是,对于OPCUA和TSN的了解却又甚少,这难免让人质疑其可实现性,因为,如果缺乏统一的语义互操作规范,以及更为具有广泛适用的网络与通信,则数字化实际上几乎难以具...
- Elasticsearch节点角色配置详解(Node)
-
本篇文章将介绍如下内容:节点角色简介...
- 产前母婴用品分享 篇一:我的母婴购物清单及单品推荐
-
作者:DaisyH8746在张大妈上已经混迹很久了,有事没事看看“什么值得买”已渐渐成了一种生活习惯,然而却从来没有想过自己要写篇文章发布上来,直到由于我产前功课做得“太过认真”(认真到都有点过了,...
- 比任何人都光彩照人的假期!水润、紧致的肌肤护理程序
-
图片来源:谜尚愉快的假期临近了。身心振奋的休假季节。但是不能因为这种心情而失去珍贵的东西,那就是皮肤健康。炙热的阳光和强烈的紫外线是使我们皮肤老化的主犯。因此,如果怀着快乐的心情对皮肤置之不理,就会使...
- Arm发布Armv9边缘AI计算平台,支持运行超10亿参数端侧AI模型
-
中关村在线2月27日消息,Arm正式发布Armv9边缘人工智能(AI)计算平台。据悉,该平台以全新的ArmCortex-A320CPU和领先的边缘AI加速器ArmEthos-U85NPU为核心...
- 柔性——面向大规模定制生产的数字化实现的基本特征
-
大规模定制生产模式的核心是柔性,尤其是体现在其对定制的要求方面。既然是定制,并且是大规模的定制,对于制造系统的柔性以及借助于数字化手段实现的柔性,就提出了更高的要求。面向大规模定制生产的数字化业务管控...
- 创建PLC内部标准——企业前进的道路
-
作者:FrankBurger...
- 标准化编程之 ----------- 西门子LPMLV30测试总结
-
PackML乃是由OMAC开发且被ISA所采用的自动化标准TR88.00.02,能够更为便捷地传输与检索一致的机器数据。PackML的主要宗旨在于于整个工厂车间倡导通用的“外观和感觉”,...
你 发表评论:
欢迎- 一周热门
-
-
Linux:Ubuntu22.04上安装python3.11,简单易上手
-
宝马阿布达比分公司推出独特M4升级套件,整套升级约在20万
-
MATLAB中图片保存的五种方法(一)(matlab中保存图片命令)
-
别再傻傻搞不清楚Workstation Player和Workstation Pro的区别了
-
Linux上使用tinyproxy快速搭建HTTP/HTTPS代理器
-
如何提取、修改、强刷A卡bios a卡刷bios工具
-
Element Plus 的 Dialog 组件实现点击遮罩层不关闭对话框
-
日本组合“岚”将于2020年12月31日停止团体活动
-
SpringCloud OpenFeign 使用 okhttp 发送 HTTP 请求与 HTTP/2 探索
-
tinymce 号称富文本编辑器世界第一,大家同意么?
-
- 最近发表
-
- 5款Syslog集中系统日志常用工具对比推荐
- 跨平台、多数据库支持的开源数据库管理工具——DBeaver
- 强烈推荐!数据库管理工具:Navicat Premium 16.3.2 (64位)
- 3 年 Java 程序员还玩不转 MongoDB,网友:失望
- 拯救MongoDB管理员的GUI工具大赏:从菜鸟到极客的生存指南
- mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?
- solidworks使用心得,纯干货!建议大家收藏
- 统一规约-关乎数字化的真正实现(规范统一性)
- Elasticsearch节点角色配置详解(Node)
- 产前母婴用品分享 篇一:我的母婴购物清单及单品推荐
- 标签列表
-
- dialog.js (57)
- importnew (44)
- windows93网页版 (44)
- yii2框架的优缺点 (45)
- tinyeditor (45)
- qt5.5 (60)
- windowsserver2016镜像下载 (52)
- okhttputils (51)
- android-gif-drawable (53)
- 时间轴插件 (56)
- docker systemd (65)
- slider.js (47)
- android webview缓存 (46)
- pagination.js (59)
- loadjs (62)
- openssl1.0.2 (48)
- velocity模板引擎 (48)
- pcre library (47)
- zabbix微信报警脚本 (63)
- jnetpcap (49)
- pdfrenderer (43)
- fastutil (48)
- uinavigationcontroller (53)
- bitbucket.org (44)
- python websocket-client (47)