2011-03-07 80 views
4

我正在開發一個Web應用程序,以部署在最新的Glassfish服務器上。如何使用JSP生成非JSP擴展的內容頁面?

爲了使應用程序與不同的上下文根(如「/ apps/myapp /」)兼容,我需要動態生成其中的CSS文件。

問題是這些頁面不像JSP文件那樣對待,所以我不能使用<%= contextRoot %>。我知道我可以使用帶有Content-Type頭部的JSP文件來模仿CSS文件,但我更喜歡在它上面有一個CSS擴展。

是否有可能讓Glassfish將非JSP文件視爲JSP文件?

+0

可能 - 問題是,爲了什麼?在靜態文件上擴展文件的唯一目的是讓Web服務器在發送文件時知道在內容類型頭文件中放置什麼。如果你明確地設置內容類型,你爲什麼關心文件擴展名? – 2011-03-07 05:02:58

回答

6

這很簡單,我以前做過,效果很好。

只需將想要擴展的擴展名映射到JSP servlet即可。

JSP由servlet處理,就像其他任何東西一樣。他們沒有什麼特別的。

因此,對於Glassfish來說,這個servlet恰好被命名爲「jsp」。我不知道這是否是可移植的(即名稱),但它可能運行在Glassfish和Tomcat中,可能運行在使用Jasper JSP編譯器的任何地方。

在Glassfish中,它在$ glassfish_domain_dir/config/default-web.xml中定義。

因此,將它添加到你的web.xml

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
    <servlet-mapping> 
    <servlet-name>jsp</servlet-name> 
    <url-pattern>*.css</url-pattern> 
    </servlet-mapping> 
</web-app> 

您添加標記過的好處,這將對於直線上升CSS文件相當多的工作,如果沒有標記在其中,或自定義的。

+0

是否可以在WAR包中進行設置?我在NetBeans中唯一的文件是'sun-web.xml',並且無法在那裏添加這些文件。問題是,我將無法訪問我正在部署的計算機,因爲我只是將WAR文件傳遞給將部署它的人。 – 2011-03-07 23:45:09

+0

web.xml是WAR包的一部分(可以說它是使任意JAR文件成爲「WAR」的原因)。你的WAR有一個web.xml:/WEB-INF/web.xml。打開它並在那裏填充該servlet映射。應該工作桃子。 – 2011-03-08 00:04:53

+0

我已將WAR文件重命名爲.zip,但WEB-INF文件夾內部是「lib」(文件夾),「classes」(文件夾)和sun-web.xml。沒有web.xml,sun-web.xml似乎有不同的格式。 – 2011-03-08 00:28:34

0

如果您沒有太多的CSS文件需要處理,您可以爲每個CSS文件添加一個servlet映射,該映射將重定向到一個servlet並呈現該JSP。

0

你可以使用JSP include指令。

<%@ include file="something.css" %> 

<%@ include file="something.xyz" %>