我正在開發一個Web應用程序,以部署在最新的Glassfish服務器上。如何使用JSP生成非JSP擴展的內容頁面?
爲了使應用程序與不同的上下文根(如「/ apps/myapp /」)兼容,我需要動態生成其中的CSS文件。
問題是這些頁面不像JSP文件那樣對待,所以我不能使用<%= contextRoot %>
。我知道我可以使用帶有Content-Type頭部的JSP文件來模仿CSS文件,但我更喜歡在它上面有一個CSS擴展。
是否有可能讓Glassfish將非JSP文件視爲JSP文件?
我正在開發一個Web應用程序,以部署在最新的Glassfish服務器上。如何使用JSP生成非JSP擴展的內容頁面?
爲了使應用程序與不同的上下文根(如「/ apps/myapp /」)兼容,我需要動態生成其中的CSS文件。
問題是這些頁面不像JSP文件那樣對待,所以我不能使用<%= contextRoot %>
。我知道我可以使用帶有Content-Type頭部的JSP文件來模仿CSS文件,但我更喜歡在它上面有一個CSS擴展。
是否有可能讓Glassfish將非JSP文件視爲JSP文件?
這很簡單,我以前做過,效果很好。
只需將想要擴展的擴展名映射到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文件相當多的工作,如果沒有標記在其中,或自定義的。
是否可以在WAR包中進行設置?我在NetBeans中唯一的文件是'sun-web.xml',並且無法在那裏添加這些文件。問題是,我將無法訪問我正在部署的計算機,因爲我只是將WAR文件傳遞給將部署它的人。 – 2011-03-07 23:45:09
web.xml是WAR包的一部分(可以說它是使任意JAR文件成爲「WAR」的原因)。你的WAR有一個web.xml:/WEB-INF/web.xml。打開它並在那裏填充該servlet映射。應該工作桃子。 – 2011-03-08 00:04:53
我已將WAR文件重命名爲.zip,但WEB-INF文件夾內部是「lib」(文件夾),「classes」(文件夾)和sun-web.xml。沒有web.xml,sun-web.xml似乎有不同的格式。 – 2011-03-08 00:28:34
如果您沒有太多的CSS文件需要處理,您可以爲每個CSS文件添加一個servlet映射,該映射將重定向到一個servlet並呈現該JSP。
我不知道你想要完成的事情是非常必要的。您可以使用scriptlets或jstl在鏈接到CSS,JS,圖像等時動態追加上下文根。
你可以看到一個討論有關在這裏:
你可以使用JSP include指令。
<%@ include file="something.css" %>
<%@ include file="something.xyz" %>
可能 - 問題是,爲了什麼?在靜態文件上擴展文件的唯一目的是讓Web服務器在發送文件時知道在內容類型頭文件中放置什麼。如果你明確地設置內容類型,你爲什麼關心文件擴展名? – 2011-03-07 05:02:58