如何使用JSP生成具有非JSP扩展的内容页面?

时间:2011-03-07 04:46:01

标签: java jsp glassfish

我正在开发一个部署在最新Glassfish服务器上的Web应用程序。

为了使应用程序与不同的上下文根兼容(例如“/ apps / myapp /”),我需要动态生成其中的CSS文件。

问题是这些页面不像JSP文件那样处理,所以我不能使用<%= contextRoot %>。我知道我可以使用带有Content-Type标头的JSP文件来模仿CSS文件,但我希望在其上有一个CSS扩展。

是否可以让Glassfish将非JSP文件视为JSP文件?

4 个答案:

答案 0 :(得分: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文件,这对于直接的CSS文件非常有用。

答案 1 :(得分:0)

如果你没有太多的CSS文件可以使用,你可以为每个CSS文件添加一个servlet映射,它将重定向到一个servlet并呈现JSP。

答案 2 :(得分:0)

我不知道你想要完成的事情是非常必要的。您可以使用scriptlets或jstl在链接到CSS,JS,图像等时动态附加上下文根。

你可以在这里看到关于它的讨论:

Any clever ways of handling the context in a web app?

答案 3 :(得分:0)

您可以使用jsp include指令。

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

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