在Velocity模板中获取webapp的绝对上下文路径

时间:2011-05-17 18:43:56

标签: java applet velocity java-web-start

我有一个相当简单(我希望:P)的问题。

我知道在旧的Java servlet代码中,我可以得到进入Web服务器的请求的完整请求路径,如下所示:

String requestBaseUrl = 
    String.format("%s://%s:%s%s", request.getScheme(), request.getServerName(), 
            request.getServerPort(), request.getContextPath());

现在,在JSP中执行完全相同的操作非常简单。但是,我现在必须在Velocity 1.5模板中执行此操作。具体来说,我需要输出该信息作为我需要集成到我的Web应用程序中的webstart applet的“codebase”属性。

我尝试了这个,但applet拒绝启动,而是抛出FileNotFoundException:P

<script src="http://www.java.com/js/deployJava.js"></script>
<script>
    var attributes = { code:'org.groundhog.MyApplet', width:360, height:280} ;
    var parameters = {
        jnlp_href: './webstart/myapplet.jnlp', <------------------ this
        bgColor: '#4f616d', mayscript: true
    };
    deployJava.runApplet(attributes, parameters, '1.6');

所以我认为最可靠的方法是派生并坚持运行应用程序的绝对URL,并使用与我之前的Java代码片段相同的逻辑从那里引用applet的jnlp文件。

现在我正在翻阅Velocity的文档。但是,如果有人不得不处理类似的事情,我会感谢Velocity中的等价习惯。

感谢您的时间和帮助!

1 个答案:

答案 0 :(得分:1)

好吧,在经过短暂的思维清理之后,我开始意识到,Velocity本质上只是一个文本模板引擎,并且在其视图中应该没有做任何代码欺骗的事情。马特的评论刚刚证实了我的怀疑;)。谢谢!

最简单的方法是首先在我的控制器对象中派生代码库URL,然后将其放入模板的模型中(比如,一个名为“codeBaseUrl”的变量),然后让Velocity渲染它。简而言之,就是上述两种方法的结合。

我向我道歉,因为我再次意识到8小时的睡眠几乎可以解决任何问题。 :P

感谢您的时间。