2013-07-05 67 views
2

我是servlets和Velocity模板的新手,我试图将我的.vm模板链接到.css文件。 .vm文件和css文件位于Tomcat的ROOT目录中。文件本身显示正常,但CSS不起作用。从Velocity模板链接到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> 

我需要相对的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的请求应构成一个路径?

回答

2

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

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

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

解决方案可能是将您的/ servlet映射更改为/ home,然后使用welcome-file映射来引用该映射。