2011-05-17 159 views
0

我有一個相當簡單的(我希望:P)的問題。在Velocity模板中獲取webapp的絕對上下文路徑

我知道,好老的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'屬性。

我想這一點,但小程序拒絕開始,而不是拋出一個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'); 

所以我認爲最可靠的方法做,這是派生,並粘在絕對網址,其中應用程序正在運行,並使用與以前的Java代碼片段中相同的邏輯從那裏引用applet的jnlp文件。

現在我正在通過Velocity的文檔進行洗牌。但是,如果有人不得不處理類似的事情,我會很感激Velocity中的相應成語。

我感謝您的時間和幫助!

+1

什麼是加載速度,你使用某種類型的控制器?爲什麼不在控制器中構建完整路徑,將它作爲屬性添加到Velocity上下文中,然後引用該變量? – 2011-05-17 18:50:10

+0

你讀了我的思想的人,讀了我的心思嘿嘿。真正的問題是缺乏睡眠。乾杯! – 2011-05-18 15:01:46

回答

1

那麼,經過一段短暫的思想清除之後,我意識到,Velocity本質上只是一個文本模板引擎,在其視圖中應該沒有業務做代碼欺騙。馬特的評論剛剛證實了我的懷疑;)。謝謝!

要做的最簡單的事情是首先派生我的控制器對象中的代碼庫URL,然後將其放入模板的模型(比如稱爲「codeBaseUrl」的變量),然後讓Velocity渲染它。總之,上述兩種方法的組合。

我提供我的道歉,因爲我再次認識到,8小時的睡眠可以解決幾乎任何問題。 :P

謝謝你的時間。