我正在开发一个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