我是 servlet 和 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
的请求应该构成路径?
最佳答案
我相信你的问题是 servlet 映射到/
默认情况下,Tomcat 将/映射到提供静态内容的 DefaultServlet。当您将/映射到您的 servlet 时,它似乎会覆盖整个 DefaultServlet 行为。它充当/* 映射,尽管它看起来应该只处理/
我不确定这是错误还是功能。 :)
一个解决方案可能是将您的/servlet 映射更改为/home,然后使用欢迎文件映射来引用它。
关于java - 从 Velocity 模板链接到 css 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17479560/