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

时间:2009-11-12 23:11:06

标签: java javascript css jsp

如果是这样,你怎么做?

(jboss / tomcat embedded / jdk 1.5)

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

4 个答案:

答案 0 :(得分:11)

当然可以。您需要做的只是设置适当的内容类型。

<%@page contentType="text/javascript" %>

<%@page contentType="text/css" %>

注意某些 webbrowsers可能对实际请求URL中使用的文件扩展名很挑剔的事实。我从来没有尝试过,因为我通常会使用Servlet来达到这些目的,但如果特别是MSIE不会吃那个,我也不会感到惊讶。

答案 1 :(得分: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等)

答案 2 :(得分:2)

当然,JSP可以输出您需要的任何必要文本(X)HTML或CSS或JavaScript代码。我经常为ERP自定义做这件事,在每个页面的末尾注入一个javascript脚本,并通过上下文加载它可以在页面上操作必要的数据字段,而无需触及底层应用程序。

答案 3 :(得分: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:此处没有默认名称的Web组件。”错误