链接到Velocity模板的css文件

时间:2013-07-05 00:20:52

标签: java tomcat web-applications velocity

我是servlets和Velocity模板的新手,我正在尝试将.vm模板链接到.css文件。 .vm文件和css文件位于Tomcat的ROOT目录中。文件本身显示正常但css不起作用。

以下链接不起作用:

<link rel="stylesheet" type="text/css" href="style.css"/>

也不将文件名作为属性传递:

String stylesheet = "style.css";
req.setAttribute("stylesheet", stylesheet);

然后如此引用:

<link rel="stylesheet" type="text/css" href="$stylesheet"/>

另外,我无法在浏览器中显示css文件,即使它肯定存在。

web.xml包含以下内容:

<!-- register servlet -->
<servlet>
    <servlet-name>testvmservlet</servlet-name>
    <servlet-class>net.myapp.app.TestVMServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>testvmservlet</servlet-name>
    <url-pattern>/velocity.service</url-pattern>
</servlet-mapping>

<!-- mapping all .vm files to velocity servlets -->
<servlet>
    <servlet-name>velocity</servlet-name>
    <servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class>

</servlet>
<servlet-mapping>
    <servlet-name>velocity</servlet-name>
    <url-pattern>*.vm</url-pattern>
</servlet-mapping>

我是否需要引用相对于应用程序或相对于Velocity的css文件?

我已经调整了我的一个servlet映射:

<servlet-mapping>
    <servlet-name>startupservlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

为:

<servlet-mapping>
    <servlet-name>startupservlet</servlet-name>
    <url-pattern>/foo</url-pattern>
</servlet-mapping>

现在css工作正常。但我不确定为什么这种映射会产生影响。

据我了解<url-pattern>/</url-pattern>仅适用于未指定路径的情况,但style.css的请求应构成路径?

1 个答案:

答案 0 :(得分:2)

我相信你的问题是servlet映射到/

默认情况下,Tomcat将/映射到它的DefaultServlet,它提供静态内容。当您映射/到您的servlet时,它似乎覆盖整个DefaultServlet行为。它充当/ *映射,虽然它看起来应该只处理/

我不确定这是一个错误还是一个功能。 :)

解决方案可能是将/ servlet映射更改为/ home,然后使用欢迎文件映射来引用它。