我是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
的请求应构成路径?
答案 0 :(得分:2)
我相信你的问题是servlet映射到/
默认情况下,Tomcat将/映射到它的DefaultServlet,它提供静态内容。当您映射/到您的servlet时,它似乎覆盖整个DefaultServlet行为。它充当/ *映射,虽然它看起来应该只处理/
我不确定这是一个错误还是一个功能。 :)
解决方案可能是将/ servlet映射更改为/ home,然后使用欢迎文件映射来引用它。