使用JSP/JSTL生成动态css/javascript文件是否可行?

4

如果需要这样做,你该怎么做?

(jboss/tomcat嵌入式/jdk 1.5)

不是嵌入的js/css文件,而是实际的文件...


但我希望它能像普通的JavaScript或CSS文件一样运作(例如,发送头信息等)。 - qodeninja
请回答这个问题。类似这样的东西。 [http://stackoverflow.com/questions/14243065/jsp-function-tag-to-replace/14245423#comment19786651_14245423] - Sudhakar Krishnan
4个回答

11

当然可以。你需要做的是设置正确的内容类型。

<%@page contentType="text/javascript" %>
或者
<%@page contentType="text/css" %>

注意,一些网络浏览器可能会对实际请求URL中使用的文件扩展名挑剔。我从未尝试过这种方法,因为我通常会使用Servlet来处理这些内容,但是如果特别是MSIE无法处理,我也不会感到惊讶。


5
你需要做的是将*.css servlet映射分配给JSPServlet。
在大多数容器中,你会看到像这样的映射(这是来自Glassfish的default-web.xml):
  <servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
      <param-name>xpoweredBy</param-name>
      <param-value>true</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jsp</url-pattern>
  </servlet-mapping>

在这里,它声明了JSP servlet,并将“*.jsp”映射到它。因此,在这种情况下,JSP servlet引用名称是简单的“jsp”。
所以你需要添加:
<servlet-mapping>
  <servlet-name>jsp</servlet-name>
  <url-pattern>*.css</url-pattern>
</servlet-mapping>

当你这样做时,“突然”你所有的CSS文件对于实际上都是JSP,所以你可以随意使用它们。
问题在于我不知道“jsp”是否对所有容器都相同,因此您的web.xml可能不可移植。
但这就是你想做的要点。如果您不想让所有CSS都成为JSP,您可以将文件放在它们自己的目录中,并将其映射到JSP servlet。然后您放置在那里的任何东西都会成为JSP(css、js等)。

第二次看,这就是我要找的。 - qodeninja

2
当然,JSP可以输出任何你需要的文本,无论是(X)HTML、CSS还是JavaScript代码。我经常为ERP定制输出,将一个javascript脚本注入到每个页面的末尾,并通过它加载的上下文来操作必要的数据字段,而不用触及底层应用程序。

1
在Glassfish 3.1上,您可能需要添加以下内容:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
  <param-name>xpoweredBy</param-name>
  <param-value>true</param-value>
</init-param>
<load-on-startup>3</load-on-startup>

然后

  <servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.myext</url-pattern>
    <url-pattern>*.jsp</url-pattern>
</servlet-mapping>

在您的web.xml中添加以下内容,否则您可能会遇到“java.lang.RuntimeException: There is no web component by the name of default here.”错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接