spring mvc 集成velocity模板

CentOS 7/8 系统下,基于Docker Compose一键部署Dify AI应用平台 本文详细介绍了在CentOS 7/8系统下,使用Docker Compose一键部署Dify AI应用平台的完整流程。从系统环境准备、Docker引擎安装与加速配置,到获取Dify项目、关键环境变量设置,再到服务启动、状态监控及初始化访问,提供了手把手的部署指南和常见问题排查方法,帮助用户快速搭建稳定、可维护的AI应用开发环境。 阅读详情

spring mvc 集成velocity模板

 

  • spring mvc 

我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置。spring3 mvc可以认为已经100%零配置了(除了配置spring mvc-servlet.xml外)。

Spring MVC和Struts2的区别:
1. 机制:spring mvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。

2. 性能:spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3 mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。

3. 参数传递:struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。

4. 设计思想上:struts更加符合oop的编程思想, spring就比较谨慎,在servlet上扩展。

5. intercepter的实现机制:struts有以自己的interceptor机制,spring mvc用的是独立的AOP方式。这样导致struts的配置文件量还是比spring mvc大,虽然struts的配置能继承,所以我觉得论使用上来讲,spring mvc使用更加简洁,开发效率Spring MVC确实比struts2高。spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上spring3 mvc就容易实现restful url。struts2是类级别的拦截,一个类对应一个request上下文;实现restful url要费劲,因为struts2 action的一个方法可以对应一个url;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量,而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码,读程序时带来麻烦。

6. 另外,spring3 mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。

等等。。。。。。

原文找不到了 ,找到再链接过去,这不过不是介绍的重点。
  • velocity模板

对 Java 程序员来说,最优秀的模版引擎无外乎 Velocity 和 FreeMarker 了。但是对一个尚未接触过这两个项目的人来说,就不知道该选择哪个,哪个才是最适合自己的。下面的内容来自 FreeMarker 网站上一个比较中肯的比较,尽管更多的是倾向于 FreeMarker :
相比较 FreeMarker 而言,Velocity 更加简单、轻量级,但它的功能却没有 FreeMarker 那么强大。
对于大部分的应用来说,使用 FreeMarker 比 Velocity 更简单,因为 Velocity 还必须编写一些自定义的toolbox类以及一遍遍重复的编写一些比较通用的模版代码,因此也就丧失了刚开始开发时更多的宝贵时间。另外使用工具类和变通的方法在模版引擎中似乎不是一个非常有效的做法。同时,Velocity 的做法使得在Velocity的模版中大量的跟 Java 对象进行交互,这违反了简单的原则,尽管你也可以将代码转入控制器中实现。当然,如果你像使用 Velocity 一样来使用 FreeMarker ,那么 FreeMarker 也可以跟 Velocity 一样简单。

等等。。。。。。

详细请看 这个也不是介绍的重点。

所需要包文件

  1. spring mvc 只是用到mvc所以只需要那8个包;
  2. velocity 用到2个包。
  • web.xml
?
<servlet>
     <servlet-name>mvc3</servlet-name>
     <servlet- class >
         org.springframework.web.servlet.DispatcherServlet
     </servlet- class >
     <init-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>WEB-INF/main-servlet.xml</param-value>
     </init-param>
     <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
     <servlet-name>mvc3</servlet-name>
     <url-pattern>/</url-pattern>
</servlet-mapping>

  

  • main-servlet.xml
?
<!-- velocity模板配置 -->
     <bean id= "velocityConfig"  class = "org.springframework.web.servlet.view.velocity.VelocityConfigurer" >
         <property name= "resourceLoaderPath"  value= "WEB-INF/velocity/"  />
         <property name= "velocityProperties" >
             <props>
                 <prop key= "input.encoding" >UTF-8</prop><!-- 指定模板引擎进行模板处理的编码 -->
                 <prop key= "output.encoding" >UTF-8</prop><!-- 指定输出流的编码 -->
                 <prop key= "contentType" >text/html;charset=UTF-8</prop><!-- contentType -->
                 <prop key= "userdirective" >com.tonyplan.web.velocity.CacheDirective</prop> <!--自定义标签 -->
             </props>
         </property>
     </bean>
 
     <bean id= "viewResolver"  class = "org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver" >
         <property name= "cache"  value= "false" ></property><!--是否缓存模板-->
         <property name= "order"  value= "10"  />
         <property name= "suffix"  value= ".vm" />
         <property name= "prefix"  value= "/screen/"  />
         <property name= "layoutUrl"  value= "layout/default.vm"  />
         <property name= "exposeSpringMacroHelpers"  value= "true"  />
         <property name= "dateToolAttribute"  value= "dateTool" />
         <property name= "numberToolAttribute"  value= "numberTool" />
         <property name= "toolboxConfigLocation"  value= "WEB-INF/velocity-tools.xml"  />
         <property name= "contentType"  value= "text/html;charset=UTF-8" ></property>
     </bean>
  • 自定义标签 :com.tonyplan.web.velocity.CacheDirective
?
package com.tonyplan.web.velocity;
 
import java.io.IOException;
import java.io.Serializable;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Hashtable;
 
import org.apache.velocity.context.InternalContextAdapter;
import org.apache.velocity.exception.MethodInvocationException;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.runtime.directive.Directive;
import org.apache.velocity.runtime.parser.node.Node;
import org.apache.velocity.runtime.parser.node.SimpleNode;
import org.apache.velocity.util.StringUtils;
 
import com.tonyplan.cache.CacheManager;
 
public  class  CacheDirective extends Directive {
 
     final static  Hashtable<String,String> body_tpls = new  Hashtable<String, String>();
     
     @Override
     public  String getName() {
         return  "cache" ;
     }
 
     @Override
     public  int  getType() {
         return  BLOCK;
     }
 
     @Override
     public  boolean render(InternalContextAdapter context, Writer writer, Node node)
             throws IOException, ResourceNotFoundException, ParseErrorException,
             MethodInvocationException {
         //获得缓存信息               
         Node body = node.jjtGetChild(2);   
         StringWriter sw = new  StringWriter();         
         body.render(context, sw);       
         writer.write(sw.toString());
         return  true ;
         //获得缓存信息     
         /*SimpleNode sn_region = (SimpleNode) node.jjtGetChild(0);     
         String region = (String)sn_region.value(context);     
         SimpleNode sn_key = (SimpleNode) node.jjtGetChild(1);     
         Serializable key = (Serializable)sn_key.value(context);           
         Node body = node.jjtGetChild(2);*/ 
         //检查内容是否有变化    
         /*String tpl_key = key+"@"+region;     
         String body_tpl = body.literal();     
         String old_body_tpl = body_tpls.get(tpl_key);     
         String cache_html = null;//= CacheManager.get(String.class, region, key);     
         if(cache_html == null || !StringUtils.equals(body_tpl, old_body_tpl)){         
             StringWriter sw = new StringWriter();         
             body.render(context, sw);
             cache_html = sw.toString();         
             CacheHelper.set(region, key, cache_html);         
             body_tpls.put(tpl_key, body_tpl);     
         }     
         writer.write(cache_html);
         return true;*/     
 
     }
 
}
  • velocity-tools.xml
?
<?xml version= "1.0"  encoding= "UTF-8" ?>
<toolbox>
     <tool>
         <key>newstool</key>
         < class >com.tonyplan.web.velocity.NewsTool</ class >
     </tool>
</toolbox>
  • com.tonyplan.web.velocity.NewsTool
?
package com.tonyplan.web.velocity;
 
import java.util.List;
 
import com.tonyplan.beans.CourseBean;
import com.tonyplan.dao.CourseDao;
 
public  class  NewsTool {
     
     public  List<CourseBean> ListTopNews( int  top){
         return  CourseDao.getInstance().getList(1, top);
     }
     
     /** To test exception handling in templates. */
     public  boolean whine() {
         throw  new  IllegalArgumentException();
     }
} 
  • velocity 宏定义 macro
?
#macro (writeTable $productList)  
     #set ($rowCount = 1)              
     #foreach($product in $productList)            
     #if ($rowCount % 2 == 0)  
         #set ($bgcolor = "#FFFFFF")  
     #else  
         #set ($bgcolor = "#CCCCCC")           
     #end  
         <tr> 
             <td bgcolor= "$bgcolor" >$product</td>
             <td bgcolor= "$bgcolor" >$product</td>
         </tr>                         
         #set ($rowCount = $rowCount + 1)  
     #end  
#end  
  • layout.vm  
?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<html xmlns= "http://www.w3.org/1999/xhtml" >
      <HEAD>
       <TITLE>$!page_title 测试layout页面</TITLE>
       <meta http-equiv= "Content-Type"  content= "text/html; charset=UTF-8" />
       <meta http-equiv= "Content-Language"  content= "zh-CN" />
       <META NAME= "Generator"  CONTENT= "EditPlus" >
       <META NAME= "Author"  CONTENT= "" >
       <META NAME= "Keywords"  CONTENT= "" >
       <META NAME= "Description"  CONTENT= "" >
     $script
      </HEAD>
      <BODY>
         ------------------------------------
         <br>
         $screen_content
 
      </BODY>
</HTML>
  • pageFooter.vm
?
Copyright © 2012
  • pageFooter1.vm
?
#set ($innerVar = "This is an inner variable")
Copyright © $companyName 2012
  • index.vm
?
#set($layout="layout/layout.vm")
#set($page_title="测试首页")
#set($products = ["one", "two", "three"]) 
#set($companyName = "Tony Law")
#parse("macro/writeTable.vm")
#define($script)
## custom script here
<script src= "script/jquery.js"  type= "text/javascript" ></script> 
#end
     Here we use a custom tool: $toytool.message
     <div>
          <ul>  
             #foreach($CourseBean in $newstool.ListTopNews(10)) 
             <li>      
                 ${CourseBean.name}
             </li>  
             #end  
          </ul>
     </div>
     #set($region = "news")
     #set($key = "home")
     #cache("CACHE_$region",$key)
     #end
     <div>
     #cache("News","home")
     ## 读取数据库中最新新闻并显示
     <ul>  
         #foreach($CourseBean in $newstool.ListTopNews(10)) 
         <li>      
             ${CourseBean.name}
         </li>  
         #end  
     </ul>
     #end
     </div>
 
<table>
#writeTable($products) 
</table>
<br>
#parse("layout/pageFooter1.vm")
<br>
$innerVar
<br>
#include("layout/pageFooter.vm")

以上说明

  1. $layout 变量默认配置是<property name="layoutUrl" value="layout/default.vm" />;改变布局模板#set($layout="layout/layout.vm")
  2. #parse 加入动态vm
  3. #include 加入静态vm
  4. #cache自定义标签,配置<prop key="userdirective">com.tonyplan.web.velocity.CacheDirective</prop> <!--自定义标签 -->
  5. #set设置变量
  6. #define

等等。。。。。。

更多参考velocity 文档!

FT601Q芯片深度解析:从USB3.0引脚定义到FPGA FIFO协议实战选型 本文深入解析FT601Q芯片在USB3.0接口设计与FPGA协议栈开发中的应用,详细介绍了USB3.0引脚定义、FT601Q芯片架构、245同步FIFO模式及硬件设计要点,帮助工程师实现高速数据传输系统。 阅读详情

相关推荐

在 Zemax 非序列模式下建立干涉仪模型

Zemax 利用其相干检测功能,将到达探测器的射线的能量相干地组合起来,同时考虑每条检测到的射线的幅度和相位。从对这些干涉条纹的定量评估来看,光学干涉仪具有广泛的应用,包括在天文学中用于测量天体的大小,在计量学中用于精确测量距离,在显微镜中用于提高分辨率,以及在物理和工程的各个领域中用于检测条件的微小变化。在光学干涉仪中,使用的是光波。非相干和相干相加的总功率是守恒的,但相干光束的峰值辐照度应该是非相干光束总和的 2 倍,这是理所当然的。请注意,条纹的缺失是显而易见的,因为不再从相干的角度观察探测器。

jkh920184196的博客 2382

java学习笔记5 - Spring MVC 整合Velocity及用法说明

Velocity是一个基于java的模板引擎(template engine),它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 配置: 1.在pom.xml增加依赖的velocity包 velocity velocity 1.5 2.在servlet-context.xml中增加以下内容,如果有jsp的配置先注释掉

技术总结与分享 2万+

告别ArcGIS小红叉:从‘无法验证登录信息’到成功连接在线资源的完整排错记录

本文详细记录了从Windows便签的网络错误到ArcGIS连接问题的完整排错过程。通过分析代理服务器、DNS配置和系统网络设置,解决了ArcGIS无法验证登录信息的问题,提供了实用的网络优化方案和技术排错思路。

weixin_26800111的博客 390

别再让CLIP模型‘学新忘旧’了:手把手教你用KgCoOp解决灾难性遗忘问题

本文深入解析了CLIP模型在微调过程中面临的灾难性遗忘问题,并介绍了KgCoOp(Knowledge-guided Context Optimization)这一创新解决方案。通过知识引导的上下文优化技术,KgCoOp有效平衡了模型在新任务上的适应能力与原有通用知识的保留,显著提升了视觉语言模型的性能稳定性。文章包含详细的PyTorch实现代码和多项基准测试结果,为AI研究者提供了实用的技术指南。

weixin_30892763的博客 471

描述符链表(Descriptor Chain)是什么?

描述符链表是硬件加速数据传输的核心数据结构,通过链式描述符(包含地址、长度、控制标志等)实现DMA自动批量处理,显著降低CPU负载。其工作原理为:CPU初始化链表后,硬件按序处理每个描述符,完成自动跳转与中断通知。在网卡收包、NVMe存储等场景中应用广泛,优势包括批处理、低延迟和灵活调度。需注意内存对齐、缓存一致性等实现细节,优化手段包括预分配描述符池、环形缓冲区等。该技术是网络/存储领域提升吞吐量的关键方案。

guigenyi的专栏 777

NBU计算机大二下期末

计算机网络 任课老师:JG (放了一学期的他自己的视频和上了一学期网课没什么区别,甚至不如上网课。。。) 考试题型 填空题10*1 判断题10*1 选择题30*1 简答和计算题30(4题) 讨论题20 强烈建议不要再这门课上花太多时间复习,不然有复习了个寂寞的感觉。。。计网是一页开卷的,一页开卷纸不用写太多,第一他不会考太详细;第二反正最后都要被收走。 填空题、判断题基本看懂了英文就能做的差不多;选择题去网上找点英文题多刷一下问题不大;简答题把书上每章根据他上课的内容在开卷纸上抄下就好,今年是解释check

weixin_45816954的博客 710

Spring 3 MVC:使用Velocity模板引擎

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33804990的博客 196

华为ENSP虚拟网络与本地物理网卡高效桥接实战指南

本文提供了一份详细的华为ENSP虚拟网络与本地物理网卡桥接实战指南。通过清晰的四步操作,帮助用户打破虚拟实验环境的“孤岛”限制,实现ENSP设备与真实局域网及互联网的互通,从而进行更真实的协议测试、软件升级和混合网络环境搭建。

qsc90123456的博客 537

spring mvc 整合 velocity

步骤: 1、使用eclipse创建maven webapp 项目 2、引入依赖以及jetty插件

pan-zy的专栏 1124

Halcon实战:5分钟搞定线序颜色检测(附完整代码解析)

本文详细介绍了如何使用Halcon在5分钟内实现工业级线序颜色检测的高效方案。通过机器视觉技术,结合实战项目经验,提供完整的代码解析和优化技巧,帮助开发者快速构建鲁棒性强、准确率高的检测系统,适用于电子制造和汽车线束等行业。

weixin_29098367的博客 441

2025年12月11日 Coherent收发器下沉到数据中心:调研

技术可行性已基本具备。随着3nm DSP技术的成熟和Coherent-Lite等低功耗方案的推出,Coherent技术与IMDD的功耗差距在800G及以上速率节点快速缩小。特别是在1.6T及更高速率,两种技术的功耗开始趋于收敛。同时,通过系统级优化,如将DSP功能从可插拔模块转移到ASIC芯片,可实现30%以上的功耗降低。在成本方面,硅光技术的进步使得单通道硅光引擎BOM成本降至18美元,较2020年下降62%,逼近InP方案的经济临界点。光学系统机会丰富多样。

weixin_51184047的博客 1168

spring-velocity-jsp

1,使用annotation 声明控制器        2.velocity引擎 class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> /WEB-INF/vm/ UTF-8 UTF-8 3.velocity解析器(order越小,先匹配,如果找不

做有积累的事 859

基于应用谱减法进行语音去噪的算法

在上述代码中首先通过读取语音信号和噪声信号,将两个信号都转换为频域信号,然后计算出语音信号在各频率下的功率谱和噪声信号在各频率下的功率谱,并基于此计算信噪比,接着根据信噪比计算出阈值,并将低于阈值的能量对应的频段进行清零操作,最终实现去噪处理,最后将处理后的信号转换回时域信号。该算法采用谱减法进行降噪处理,能有效地去除语音信号中的噪声,但是在实际应用中,该方法也存在一些问题,如会对语音信号的高频部分产生影响,所以需要在应用过程中进行适当的调整。

weixin_50547796的博客 192

在高并发的场景下,你如何优化Velocity模板的渲染性能?你是否有过使用Velocity与其他技术(如Spring MVC、Thymeleaf等)集成的经验?请分享一下你的经验和感受。

总的来说,无论是Velocity还是Thymeleaf,它们都是优秀的模板引擎,与Spring MVC的集成都非常方便。在项目中,我使用Velocity来渲染HTML页面,通过Velocity的模板语法和表达式语言,我可以很方便地在模板中展示数据。考虑其他模板引擎:如果Velocity的性能无法满足需求,你可以考虑使用其他高性能的模板引擎,如Thymeleaf、FreeMarker等。同时,优化是一个持续的过程,需要不断地监控和分析系统的性能表现,并根据实际情况进行调整和优化。

Aaron的博客 852

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SpringMVC整合Velocity模版引擎

Velocity是一个基于java的模板引擎(template engine),它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 配置: 1.在pom.xml增加依赖的velocity包 [html] view plaincopyprint? dependency>       group

Java我人生的技术博客 3578

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

spring集成velocity

一、什么是Velocity     Velocity 是一个基于 Java 的模板引擎框架,提供的模板语言可以使用在 Java 中定义的对象和变量上。Velocity 是 Apache 基金会的项目,开发的目标是分离 MVC 模式中的持久化层和业务层。但是在实际应用过程中,Velocity 不仅仅被用在了 MVC 的架构中,还可以被用在以下一些场景中。   1. Web 应

jinshiyill的博客 398

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

springMvc集成Velocity

一、什么是VelocityVelocity 是一个基于 Java 的模板引擎框架,提供的模板语言可以使用在 Java 中定义的对象和变量上。Velocity 是 Apache 基金会的项目,开发的目标是分离 MVC 模式中的持久化层和业务层。但是在实际应用过程中,Velocity 不仅仅被用在了 MVC 的架构中,还可以被用在以下一些场景中。 1.Web 应用:开...

weixin_34308389的博客 213

spring mvc集成velocity使用

  目前流行的三大页面视图神器是:老牌大哥jsp、后起之秀freemarker和velocity。这里不详细比较这三者的优劣,总体来说,jsp是标配,但后面两个更严格的执行了视图与业务的分离,页面里是不允许出现java代码的。velocity是模板语言,更强调复用,性能也更好一些,velocity就是速度的意思。freemarker的集成看spring mvc集成freemarker使用。   ...

wuxun1997的专栏 173

Velocity简明教程

Velocity简明教程1.1什么是Velocity?Velocity在Apache官网地址:http://velocity.apache.org/Velocity是一个基于Java的模板引擎。它允许任何人使用简单而强大的模板语言来引用Java代码中定义的对象。当Velocity用于Web开发时,Web设计人员可以与Java程序员并行工作,来根据模型 - 视图 - 控制器(MVC)模型开发Web站点

qq_38974131的博客 855

Spring整合VM及VM常用语法

1.servlet-context.xml loopCounter 0 UTF-8 UTF-8 velocityCount 1 true

public 2690

Velocity是什么?

Velocity是一个基于Java的模版引擎。它允许web页面设计者引用Java代码中定义的方法。web设计者能够和Java程序员并行的工作来开发MVC模式的web站点,这意味着web页面设计者能够只关注创建设计良好的站点,而程序员能够只关注编写顶尖的代码。Velocity将Java代码从web页面中分离出来,使得web站点在长期的运行中具有更好的可维护性。         Velocity能够用

522

Spring MVC 整合Velocity

Velocity是一个基于java的模板引擎(template engine),它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 配置: 1.在pom.xml增加依赖的velocity包 [html]        velocity       velocity       1.5       2.在servlet-c

kucaozhuzhu的专栏 517

spring mvc集成freemarker使用

  freemarker作为视图技术出现的比velocity早,想当年struts风靡一时,freemarker作为视图层也风光了一把。但现在velocity作为后起之秀的轻量级模板引擎,更容易得到青睐。这里不讨论velocity,有兴趣的同学可以看下。freemarker虽然比velocity重,但它确实功能强大,比如日期、货币格式化提供了很多转换方法,还一个特色招牌菜就是宏指令,它可以像ja...

wuxun1997的专栏 138

Velocity在spring中的配置和使用初探

http://www.toutiao.com/i6353194583446258178/ 项目中使用velocity 1.添加velocity依赖的jar包,这里使用maven管理依赖,所以只需要在pom.xml中添加:   org.apache.velocity  velocity  1.7      org.apache.velocity  velocity

水木年华..的博客 1685

Velocity

暂

倾听内心的声音 467

spring mvc + velocity 搭建实例程序maven版本并且使用的是tomcat容器而不是jetty(step by step)...

笔者最近在学习spring mvc 查了很多资料,但用jsp的居多,但项目中需要用velocity,所以说就学习了一下,现将所查资料以及搭建过程陈述如下,供需要的人参考 1.楼主用的是eclipse+maven,如果需要安装请参照其他教程(网上能搜到很多,这里不多赘述) 2.创建maven工程: file--new--other--maven--maven project ...

weixin_30552811的博客 163
上一篇: sitemesh使用
下一篇: lucene入门
sust2012
博客等级 码龄15年 46粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值