在appfuse构建的项目中集成velocity的步骤和碰到的问题

SQL注入-靶场通关 Less 1-21 打开Burp工具--打开内嵌浏览器--进入靶场第六关--打开拦截--输入?id=1',如果是正确的,说明不存在注入点,如果错误,说明存在注入点,这里是错误的,需要加上注释--+,在回车看结果是正确的,说明找到了注入点。工具,打开内嵌浏览器,打开拦截,输入http://127.0.0.1/sqli-labs-master/Less-9,然后发送到。id=1'--+,后面都注释了,单引号不闭合,报错说明是数字型SQL注入。设置休眠时间为10s,如果执行SQL语句就会加载,说明正确,存在注入点。 阅读详情

使用Velocity无非也就是为了能够真正的实现mvc分层,使得各个团队成员(美工,程序员)可以各尽所长。

在appfuse构建的项目中集成velocity的步骤和碰到的问题 :

1:修改web.xml使得项目支持velocity

(1)定义名为velocity的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>
        
<init-param>
            
<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>

 

(2)定义对应velocity的servlet-mapping:

 

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

(3)将velocity纳入到编码过滤的filter(一般都已经定义经典SetCharacterEncoding):

    <filter-mapping>
        
<filter-name>SetCharacterEncoding</filter-name>
        
<url-pattern>*.vm</url-pattern>
    
</filter-mapping>

2:在项目的web/WEB-INF文件夹中创建并编辑文件toolbox.xml,通常的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<toolbox>
  
<tool>
     
<key>link</key>
     
<scope>request</scope>
     
<class>org.apache.velocity.tools.struts.StrutsLinkTool</class>
  
</tool>
  
<tool>
     
<key>text</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>

3:在项目的build/web/classes文件夹中创建并编辑文件velocity.properties,通常的内容:

input.encoding = UTF-8
#out.encoding 
= UTF-8
default.contentType
=text/html; charset=UTF-8

---以上三步其实就是普通java web项目集成velocity的必须要做的工作了。
---下面是使用appfuse中的appgen生成velocity代码的要做的工作,这里只做了从table出发的生成过程。

4:在项目中extras/appgen/src中创建模板,这里假设创建的两个文件是List_vm.xdt和Form_vm.xdt
模板的具体内容就要结合xdoclet,velocity和html来编写,不是一个简单的工作!

5:编辑extras/appgen下的build.xml文件,使得在使用ant install-detailed的时候能生成数据表对应的vm文件.

(1):在名为gen的target中添加template,原文件有以下的代码:

            <!-- Form JSP -->
            
<template templateFile="${template.dir}/Form_jsp.xdt"
                      acceptAbstractClasses
="false"
                      prefixWithPackageStructure
="false"
                      destinationFile
="${gen.dir}/web/pages/{0}FormTemp.jsp"/>
            
<!-- List JSP -->
            
<template templateFile="${template.dir}/List_jsp.xdt"
                      acceptAbstractClasses
="false"
                      prefixWithPackageStructure
="false"
                      destinationFile
="${gen.dir}/web/pages/{0}ListTemp.jsp"/>

我们要在这个后面添加以下代码(如果不使用jsp作为view层可以使用替换的方式把原文件的这部分内容处理掉):

            <!-- Form VM -->
            
<template templateFile="${template.dir}/Form_vm.xdt"
              acceptAbstractClasses
="false"
              prefixWithPackageStructure
="false"
              destinationFile
="${gen.dir}/web/vms/{0}FormTemp.vm"/>
            
<!-- List VM -->
               
<template templateFile="${template.dir}/List_VM.xdt"
              acceptAbstractClasses
="false"
              prefixWithPackageStructure
="false"
              destinationFile
="${gen.dir}/web/vms/{0}ListTemp.vm"/>

这里,templateFile里指定模板文件,destinationFile指定生成的临时文件。

(2):在名字同样为gen的target中添加move任务,原文件中有以下代码:

<!-- Make first character of JSP filenames lowercase -->
        
<move file="${build.dir}/${gen.dir}/web/pages/${model.name}ListTemp.jsp"
            tofile
="${build.dir}/${gen.dir}/web/pages/${app.module.slash.after}${model.name.lowercase}List.jsp"/>
        
<move file="${build.dir}/${gen.dir}/web/pages/${model.name}FormTemp.jsp"
            tofile
="${build.dir}/${gen.dir}/web/pages/${app.module.slash.after}${model.name.lowercase}Form.jsp"/>

我们要在这个后面添加以下代码(如果不使用jsp作为view层可以使用替换的方式把原文件的这部分内容处理掉):

<!-- Make first character of Velocity filenames lowercase -->
        
<move file="${build.dir}/${gen.dir}/web/vms/${model.name}ListTemp.vm"
            tofile
="${build.dir}/${gen.dir}/web/vms/${app.module.slash.after}${model.name.lowercase}List.vm"/>
        
<move file="${build.dir}/${gen.dir}/web/vms/${model.name}FormTemp.vm"
            tofile
="${build.dir}/${gen.dir}/web/vms/${app.module.slash.after}${model.name.lowercase}Form.vm"/>

这样生成的临时文件就会被重命名(有点怀疑这样做的必要性,暂且先这样做吧)。

(3):在名为merge-common的target中添加copy任务,原文件中有如下代码:

 

        <!-- copy jsp files -->
        
<echo>Copying all web files into main project, overwrite="${overwrite}"</echo>
        
<copy todir="../../web/pages">
            
<fileset dir="${generated.dir}/web/pages" includes="**/${model.name.lowercase}*.jsp"/>
        
</copy>
我们要在这个后面添加以下代码(如果不使用jsp作为view层可以使用替换的方式把原文件的这部分内容处理掉):
        <!-- copy velocity files -->
        
<echo>Copying all velocity files into main project, overwrite="${overwrite}"</echo>
        
<copy todir="../../web/vms">
            
<fileset dir="${generated.dir}/web/vms" includes="**/${model.name.lowercase}*.vm"/>
        
</copy>

这样在使用ant install-detailed命令时就会把生成的文件复制到项目的web/vms文件夹下了。

7:修改项目的根目录下的build.xml:

(1)修改名为copy-web-files的target,使得运行ant deploy时可以将vm文件复制到部署项目的WEB-INFO文件夹下(放在WEB-INF下是为了防止直接访问 )。
参考的源代码:

        <!-- Copy JSP Pages under WEB-INF/pages -->
        
<copy todir="${webapp.target}/WEB-INF">
            
<fileset dir="${basedir}/web">
                
<include name="pages/**/*.jsp"/>
            
</fileset>
            
<fileset dir="${struts.dir}" includes="*.xml"/>
            
<fileset dir="${basedir}/web/WEB-INF" includes="**/*-resources.xml"/>
            
<filterset refid="db.variables"/>
        
</copy>

可以在这个任务后面添加一个任务:

 

            <fileset dir="${basedir}/web">
                
<include name="vms/**/*.vm"/>
            
</fileset>

另外,如果不再使用jsp做为view层可以把匹配jsp的fileset节点去掉,这样就不会复制多余的文件到部署的项目中了。

(2)同名的target 中修改另外一个copy任务(顺数第二个),源代码:

 

        <copy todir="${webapp.target}" includeEmptyDirs="no">
            
<fileset dir="${basedir}/web">
                
<include name="**"/>
                
<exclude name="pages/**"/>
                
<exclude name="**/classes/**"/>
                
<exclude name="**/*-resources.xml"/>
            
</fileset>
        
</copy>

 

在fileset中添加一个节点:

 

<exclude name="vms/**"/>

这样就不会把vms文件夹下的文件当成是普通文件那样复制了

8:在struts-config.xml修改forwards,使得它们指向特定的vm。

ps:基本上就是这么多的步骤,遗漏的地方,欢迎补充!

MitoZ|动物线粒体基因组组装注释软件 一、MitoZ是什么 是基于python3开发的可以自动过滤双端测序的原始数据、mt基因组组装、mt基因组注释以及mt基因组可视化的工具。 官方的说明文档地址:https://gitee.com/CHANyp/MitoZ#citation 二、MitoZ的安装 git clone https://gitee.com/CHANyp/MitoZ.git cd MitoZ/version_2.4-alpha tar -jxvf release_MitoZ_v2.4-alpha.tar.bz2 三、运行Mito 阅读详情

相关推荐

gtsam 学习十(ISAM2 理论)

翻译自:iSAM2: Incremental Smoothing and Mapping Using the Bayes Tree 摘要 提出了一种新型的贝斯树处理稀疏矩阵,在转化为因子图,可以更好的求解平方根信息和映射问题。 文中提出了三个概念 使用概率密度项进行矩阵分解 介绍如何将矩阵分解转换为贝叶斯数和条件概率密度 基于贝叶斯树提供了一种新的系数非线性优化:ISAM2(进行重新排序和重新线性化,避免了批量更新) 问题描述 文章聚焦与如何用增量实时解决非线性问题, 利用增量即新的测量值实时更新估

weixin_37781153的博客 8409

appfuse mysql_Appfuse:起步

在众多开源的Java开源CMS中探索了很久,终于选定了appfuse,理由如下:1. 简洁:只搭建了框架,没有做多余的事2. 完成了基本的用户管理:用户、角色、权限的定义很清晰3. 符合预期的架构要求:SpringMVC + Hibernate + Velocity4. 基于Maven搭建更多appfuse的能力请参考博文初识appfuse准备开始!1. 基于Maven创建项目(基于Spring...

weixin_33158374的博客 326

NVMe-MI 协议解析:带外管理框架与实现原理

本文深入解析了NVMe-MI协议,这是一种用于NVMe固态硬盘的标准化带外管理接口。文章详细阐述了其独立于操作系统的管理框架,通过MCTP协议栈实现,支持SMBus/I2C、PCIe VDM和I3C等物理层,从而在系统故障时仍能可靠地进行健康监控、固件升级等关键运维操作,是现代数据中心存储管理的核心基础设施。

lll78的博客 961

使用AppFuse进行开发的总结

AppFuse是一个集成了当前最流行的Web应用框架的一个更高层次的Web开发框架,也可以说是一个Web开发基础平台,它与它所集成的各种框架相比,它提供了一部分所有Web系统开发过程中都需要开发的一些功能,如登陆、用户密码加密,用户管理、根据不同的用户可以展现不同的菜单,可以自动生成40%-60%左右的代码,自带了默认的一些在CSS中设定的样式,使用这些样式能很快的改变整个系统的外观,还有自动化测

738

路径搜索算法——RRT*算法

RRT算法是RRT算法的优化版本,通过引入路径优化机制实现渐进最优性。该算法在高维空间和复杂环境中表现优异,主要步骤包括随机采样、树扩展和邻近节点重新连接。相比RRT,RRT能够不断优化路径质量,但计算复杂度更高。Python实现展示了其核心逻辑:随机采样扩展树节点,检查碰撞,选择最优父节点,并通过重新连接优化路径。算法适用于机器人导航等场景,但需平衡计算效率与路径质量。

swaggytiger的博客 3062

【机器人学】常用的小车底盘运动学模型推导(附C++代码)

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对小车底盘运动学模型介绍做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容对于小车的分析,仅仅考虑XY轴的线速度和Z轴的角速度,不考虑和横滚和俯仰的速度,【防盗标记–盒子君hzj】也不考虑Z轴的高度变化【即:车底盘的运动可以用三个独立变量来描述:x轴平动、y轴平动、yaw轴转动】

qq_35635374的博客 1932

appfuse配置说明

appfuse安装完全按照官网即可。 http://appfuse.org/display/APF/AppFuse+QuickStart 关于appfuse安装完成后 1、先调用mvn appfuse:full-config,将项目从"embedded mode"修改为"full-source mode"。然后mvn jetty:run运行。如果运行不成功,一些常见问题的解决方案如下: ...

xin3336019的博客 296

2024年11月架构设计师案例分析真题回顾,附参考答案、解析及所涉知识点(二)

软考高级系统架构设计师考试包含三个科目:信息系统综合知识、案例分析和系统架构设计论文。考试形式为机考。本文主要回顾2024年下半年(2024-11-10)系统架构设计师考试上午第二科案例分析的题目,同时附带参考解答、解析和所涉知识点。

一几文的编程学习笔记。 1661

appfuse 部署到tomcat报错

appfuse3 部署到Eclipse中,使用jetty启动时,没有错误; 使用maven 打成war包部署到 tomcat 中就是报错 : jkd 1.7    + tomat 6  ;  错误1 : org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception par

LEE_ZCF 2537

30. 如何使用 SEGW 的 redefine 功能对 SAP 标准 OData 服务进行扩展

SAP 发布了很多标准的 Fiori 应用,可以通过笔者的文章里提到的进行浏览。比如 My Opportunities 就是 SAP CRM 领域的一个 Fiori 应用:下图是 Opportunity 明细页面的 Info 标签页:假设我们想在这些标准字段的末尾增添一个新字段 Created By,用来维护当前 Opportunity 的创建者。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1174

交货单冲销发货过账的正确姿势:用 VL09 与 ABAP 批量反冲 Goods Issue

摘要 本文详细解析了SAP系统中VL09事务码的技术实现与业务应用。VL09用于反冲发货的货物移动,通过标准冲销路径(移动类型602冲销601)确保单据链路一致、状态机正确回退和业务规则生效。文章对比了经典VL09与Fiori应用在不同SAP产品形态中的位置,并针对STO场景提供了ME23N验证方法。核心内容包括WS_REVERSE_GOODS_ISSUE函数模块的调用要点、必须COMMIT的原因(SAP LUW机制),以及处理Handling Unit等限制条件的注意事项。最后给出了将VL09工程化的项目

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 591

[Java] Appfuse 源代码分析

前面《Appfuse & tapestry 小记》中介绍了Appfuse的基本使用和一些小实例,感觉不过瘾~使用这个第一次让我感觉到“轻量”的J2EE框架,的确有一种爱不释手的感觉~所以就索性另写一篇《Appfuse 源代码分析》把这个“轻量级”的强大框架介绍给大家~少说废话,说来就来...

chenqunan3231的博客 152

2025年微信小程序获取手机号授权登录注册详细教程(含服务端)。不弹窗原因以及减少组件用量的方法

前端把获取到的code传给后端,后端获取access_token和前端传过来的code,请求服务器接口,即可获取到手机号。

coderYYY的博客 3万+

10月28日appfuse培训日记

今天是梁言兵老师讲解Appfuse这个整合了spring,hibernate,spring mvc,velocity,sitemesh,ajax多个框架的开源项目,梁言兵老师是学员们心中的偶像和大牛人,虽然以前有些地方听不懂,但大家对他崇拜极了,呵呵! 他首先讲解了上次没讲完的AjaxTable这个项目中的一些细节,然后就开始了Appfuse的讲解,梁老师主要是带着大家把Appfuse...

weixin_30508309的博客 7085

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

appfuse备注

第一部分 Appfuse基本信息 1、appfuse3.5搭建过程 (1)安装jdk,安装maven c:\workspace\appfuse\>mvn archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-spring-archetype -Da...

fanzhenzhen1的博客 196

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Appfuse 增量式开发步骤

前置条件:       假设用户已经按照《appfuse执行步骤》文档进行配置并操作,最后产生了一个叫uapp的web应用。如果用户需要新增加功能,只要按照下面的步骤去操作就可以轻松地完成任务。    开发步骤:1.         先在数据库里创建表。例如,student表。注意,表的名称的第二个字母最好不要大写。以免出现奇怪的问题(好像是hibernate的bug)。2.         把目...

javafenger 194

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

[Appfuse 源代码分析]

前面《Appfuse & tapestry 小记》中介绍了Appfuse的基本使用和一些小实例,感觉不过瘾~使用这个第一次让我感觉到“轻量”的J2EE框架,的确有一种爱不释手的感觉~所以就索性另写一篇《Appfuse 源代码分析》把这个“轻量级”的强大框架介绍给大家~少说废话,说来就来~ [Appfuse 源代码分析] 以下我们会以标准的ssh框架来说分析,因为这个骨架基本覆盖了...

zscomehuyue的专栏 283

appfuse构建项目的常见问题

 1. 如何在翻页的时候才读取下面的数据? 2. 怎样对使用同一个FormBean的多个Form进行客户端校验? 3. 怎样优化Hibernate的效率?《Hibernate In Action》中提供了多种策略,有些时候应该使用lazy,有些时候应该使用outer-join。 4. 在什么时机生成导出文件?目前我是在查询的Action中同时生成了导出文件,否则,到了下一页,我就不知道查询条件了,

Blog of Alex Wan 842

Appfuse:起步

在众多开源的Java开源CMS中探索了很久,终于选定了appfuse,理由如下: 1. 简洁:只搭建了框架,没有做多余的事 2. 完成了基本的用户管理:用户、角色、权限的定义很清晰 3. 符合预期的架构要求:SpringMVC + Hibernate + Velocity 4. 基于Maven搭建 更多appfuse的能力请参考博文初识appfuse 准备开始! 1. 基于Mave...

weixin_30449239的博客 142

appfuse学习笔记(六)邮件相关

Appfuse的登录页上有一个密码提醒功能,负责把用户注册时填写的密码提醒信息发送到用户注册时填写的邮箱里,默认这个功能是处于关闭状态的,要使用这个功能要首先进行以下设置 1. 修改邮件的资源文件 /myproject/src/main/resources/mail.properties #负责发送邮件的邮箱 #mail.default.from=AppFuse mail.defaul...

SavageGarden_Love的专栏 297

用了2周在改造ibati的jpetstore

添加了  velocity  和 spring.基本上是一个比较满意的框架了AppFuse也是不错的框架有时间再研究还有 JonAs 好东西太多 可惜没时间

java-coding 836
上一篇: 【收藏】Java开发者的十大戒律
下一篇: appfuse中生成以S结尾的数据表对应的代码出错的解决方案
洪泉
博客等级 码龄21年 99粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值