6

サーブレットと 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 ファイルが確実に存在するにもかかわらず、ブラウザーでその 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 ファイルを参照する必要がありますか?

それ以来、次のサーブレット マッピングの 1 つを調整しました。

<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パスを構成する必要がありますか?

4

1 に答える 1

2

あなたの問題は / へのサーブレットのマッピングだと思います

デフォルトでは、Tomcat は静的コンテンツを提供する DefaultServlet に / をマップします。/ をサーブレットにマップすると、DefaultServlet の動作全体がオーバーライドされるようです。/* マッピングとして機能しますが、/ のみを処理する必要があるように見えます

これがバグなのか機能なのかはわかりません。:)

解決策として、/ サーブレットのマッピングを /home に変更し、ウェルカム ファイルのマッピングを使用してそれを参照することが考えられます。

于 2013-07-05T01:44:52.320 に答える