2

私のサーブレットクラスでは、クラスに次の注釈を付けています。

@WebServlet("/OnlinePostListener/testFromAnnotation")
public class OnlinePostListener extends HttpServlet {
   ...
}

私のweb.xmlには次のものが含まれています。

<servlet>
    <description>
    </description>
    <display-name>OnlinePostListener</display-name>
    <servlet-name>OnlinePostListener</servlet-name>
    <servlet-class>com.me.forwardingProxy.OnlinePostListener</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>OnlinePostListener</servlet-name>
    <url-pattern>/testFromWebXML</url-pattern>
</servlet-mapping>

私のサーブレットは、URLにアクセスしたときにのみ応答します。

http://localhost:8080/forwardingProxy/OnlinePostListener/testFromAnnotation

だがしかし:

http://localhost:8080/forwardingProxy/OnlinePostListener/testFromWebXML

@WebServletのアノテーションとサーブレットマッピングの違いは何ですか?このURLパターンでサーブレットマッピングが機能しないのはなぜですか?

4

2 に答える 2

5

後者の場合、サーブレットをフェッチするために間違ったURLを使用しているためです。

正しいURLを使用してください:

http://localhost:8080/forwardingProxy/testFromWebXML

エラー:後で追加の/OnlinePostListenerを使用しました。

"/OnlinePostListener/testFromAnnotation"したがって、最初のケースでは、指定されたサーブレットのマップされたURLは、この文字列をURLの追加として使用http://localhost:8080/forwardingProxyしましたが、後者の場合、サーブレットを/testFromWebXML(AND NOT /OnlinePostListener/testFromWebXML)にマップしました。

ただし、URLhttp://localhost:8080/forwardingProxy/OnlinePostListener/testFromWebXMLを使用してweb.xmlを悪用することを主張する場合は、次の変更を行う必要があります。

<servlet-mapping>
    <servlet-name>OnlinePostListener</servlet-name>
    <url-pattern>/OnlinePostListener/testFromWebXML</url-pattern>
</servlet-mapping>
于 2014-11-05T12:35:56.183 に答える
4

サーブレット仕様では、アノテーションで定義されたマッピングに追加するのではなく、web.xmlで定義されたマッピングをオーバーライドする必要があるためです。これがないと、アノテーションで定義されたマッピングを無効にする方法がないためです。

于 2012-07-12T18:38:45.980 に答える