以前使用jsp开发的时候,可以通过request很轻松的获取到根项目名,现在换到使用velocity渲染视图,因为已经不依赖servlet,request等一些类的环境,而Web项目的根项目名又不是写死的,需要动态获取,这时候该怎么办呢,试了网上说了很多种方式,总结一下心得.

第一种:(失败)

  在toolbox.xml里配置以下信息:

    <toolbox scope="request">  
          <tool key="link" class="org.apache.velocity.tools.view.LinkTool"/>
    </toolbox>

  然后在.vm里直接引用$link.contextPath

  我依照这种方式配置完成,启动浏览器打开项目的时候,页面什么都刷不出来,按道理说如果它读不到LinkTool的话,也应该在页面中直接输出$link.contextPath的呀,然后我在vm中去掉$link.contextPath,重新部署就可以刷出来页面,我猜测可能是在读toolbox.xml类的时候出了问题,然后在toolbox.xml中加入了一个自己写的工具类测试:

   <tool><key>MyUtil</key><class>com.ximalaya.shop.api.util.MyUtil</class><scope>application</scope></tool>

MyUtil类中有一个最简单的静态方法getMessage(),返回"test",然后我在vm中使用$MyUtil.message,测试.浏览器页面成功返回test...看来不是读取toolbox.xml的问题,debug了一下的确能进到LinkTool方法里,但是值总是为空,鼓捣了半天没有解决,第一种方法,失败!

第二种:(成功)

  在spring配置文件的配viewResolver的地方添加一个参数:

 <!--配置试图解析器--><bean id="viewResolver"class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"><property name="cache" value="false"/><property name="prefix" value=""/><property name="suffix" value=".vm"/><property name="requestContextAttribute" value="rc"/><property name="contentType" value="text/html;charset=utf-8"/><property name="toolboxConfigLocation" value="/WEB-INF/toolbox.xml"/><property name="exposeSpringMacroHelpers" value="true"/><property name="exposeRequestAttributes" value="true"/><property name="exposeSessionAttributes" value="true"/><property name="allowSessionOverride" value="true"/><property name="allowRequestOverride" value="true"/></bean>

在vm文件中,直接使用$rc.contextPath可获得项目名.

  "requestContextAttribute" 把Spring的RequestContext对象暴露为变量rc。利用$rc.contextPath来获取应用程序的contextPath(也 就是/MyUsers);利用${rc.getMessage("user.name")}读取/WEB- INF/classes/messages.properties本地化信息。此对象对于那些不访问serlvet请求的View技术(也就是 Velocity和FreeMarker模板)来说是必不可少的。

Velocity笔记--使用Velocity获取动态Web项目名的问题相关推荐

  1. eclipse tomcat新建一个_Javaweb07-Eclipse自动创建动态web项目

    学习笔记是参考的how2j 使用Eclipse创建Dynamic Web Project 前面的web项目都是通过手动创建的,现在使用eclipse EE自动创建动态web项目,熟悉一下创建流程,仍旧 ...

  2. eclipse中动态web项目快捷方式设置

    需求 在eclipse中发布一个动态web项目,为了快捷创建一些包.类等,需要先设置一下快捷方式. 步骤 1.点击"Window"->"Perspective&qu ...

  3. java 创建web项目_java – Eclipse:以编程方式创建动态Web项目

    我尝试通过首先通过IProject创建 java项目然后使用IFacetedProject将其转换为动态Web项目来创建动态Web项目,但是只创建了静态项目-这是我已经完成的代码-请帮助我这--谢谢. ...

  4. 用eclipse创建动态web项目手动生成web.xml方法

    转载自   用eclipse创建动态web项目手动生成web.xml方法 今天在学习JSP时先创建了一个web项目,后来在用到web.xml文件时,才发现项目创建时更本就没有自动创建web.xml文件 ...

  5. spring mvc学习(3):建立第一个动态web项目

    intellij idea创建第一个动态web项目 我以2018版的intellij idea为例 一.创建JavaWeb 1.第一步 点击左上角的File-->New-->Project ...

  6. Servlet 动态Web项目-eclipse中,添加新servlet选择Tomcat无法下一步、无法启动Tomcat

    现象 解决办法 定位到 E:\project\.metadata\.plugins\org.eclipse.core.runtime\.settings 删除: org.eclipse.wst.ser ...

  7. intellij idea 创建动态web项目

    intellij idea这个开发工具功能强大,但是大部分人都习惯eclipse 开发,所以对这个工具还不是太了解. 今天就给大家分享一下自己使用intellij idea创建一个动态web项目的经验 ...

  8. Eclipse中的静态和动态web项目

    在Eclipse中奖web项目分为了Dynamic Web Project和Static Web Project.那么这两种有什么区别呢?其实这里的Dynamic和Static是通过页面来区分的.创建 ...

  9. 在eclipse上使用Maven创建动态web项目

    在eclipse上使用Maven创建web工程和使用Maven创建普通Java工程一样,不过在Packaging一栏选择"war",这个过程具体就不多说了,详情见我上一篇文章. 我 ...

最新文章

  1. 一个锁等待现象的诊断案例
  2. jquery全选/取消全选(反选)/单选操作
  3. 全国计算机技术与软件专业技术资格(水平)考试【软件评测师】-考试内容总结(四)中间件基础知识...
  4. hydra图形化工具下载_Hydra for Mac 4.0.4 专业的摄影图像工具
  5. windows安装Python+tensorflow机器学习开发环境搭建
  6. 如何在WPF中调用Winform控件
  7. Session为null 问题
  8. dos命令操作mysql数据库的常用语句
  9. 过滤器 拦截器 区别
  10. php 中断输出,PHP捕捉异常中断的方法
  11. grafana的+按钮_基于 Prometheus、Grafana 的 EMQ X 物联网 MQTT 服务器可视化运维监控...
  12. __setattr__,__getattr__,__getattribute__
  13. 2021-2025年中国抽屉加热器行业市场供需与战略研究报告
  14. UltraISO 创建的虚拟光驱更改盘符
  15. 源码推荐:多图无缝滚动控件,多视图控制器间切换
  16. node卸载_08187.1.1如何卸载CDP
  17. python量化投资推荐书籍_有没有值得推荐的介绍有名的量化投资策略的书籍?
  18. 台式计算机M丅BF是什么,台式机主板的 BIOS ID 代码
  19. 为什么要做售后五星服务认证?
  20. 二叉树遍历的非递归实现

热门文章

  1. Android内存管理之道
  2. Xen 和 KVM 下如何关闭 virbr0
  3. SmartAuditor----IT访问审计解决方案
  4. 帧中继-实验(第三篇)
  5. 转、转、转——陀螺的梦话
  6. sqlite的速度_内存不够用还要速度快,终于找到可以基于 File 的 Cache 了
  7. html从入门到精通前锋,街篮新手攻略 从入门到精通的心得分享二
  8. 计算机基础知识_2020年河北省高职单招计算机基础知识和实践技能培训
  9. 没学数模电可以玩单片机吗
  10. 伺服驱动器生产文件_在速度控制和力矩控制方面伺服驱动器与变频器的较量