2011-03-07 78 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" %>