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

qod*_*nja 4 javascript css java jsp

如果是这样,你怎么做?

(jboss/tomact embedded/jdk 1.5)

没有嵌入js/css但是实际文件...

Bal*_*usC 11

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

<%@page contentType="text/javascript" %>
Run Code Online (Sandbox Code Playgroud)

要么

<%@page contentType="text/css" %>
Run Code Online (Sandbox Code Playgroud)

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


Wil*_*ung 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>
Run Code Online (Sandbox Code Playgroud)

这里,它声明了JSP servlet,并将"*.jsp"映射到它.因此,在这种情况下,JSP servlet引用名称只是'jsp'.

所以你想要添加:

<servlet-mapping>
  <servlet-name>jsp</servlet-name>
  <url-pattern>*.css</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

当你这样做时,"突然"你的所有CSS文件实际上都是JSP,所以你可以随心所欲地使用它们.

细节是我不知道'jsp'对于所有容器是否相同,因此您的web.xml可能无法移植.

但这就是你想要做的事情的要点.如果您不希望所有CSS都是JSP,则可以将这些文件放在它们自己的目录中,并将其映射到JSP servlet.那么你输入的任何东西都会有一个JSP(css,js等)