碧の開発日記 for はてな

「青の開発日記」(FC2)のはてな版です。記載する記事は異なります。こちらは技術・実験要素強めにする予定です。

web.xmlへのServlet登録について

こんばんは。EOAです。
今日は掲題の件についての備忘録。ちょっとだけ。

復習がてら、Servletをweb.xmlに登録する流れを書いていたんだけど、ふと気になった。

「これって、同じservlet-name要素に対して、複数のServlet登録しておいて、あるurl-pattern要素で呼び出した時に、複数登録しておいたServletが、web.xmlの記載順に実行されるなんてことが起こったりするのだろうか???」


というわけで、書いてみた。

・web.xml

<web-app>
    <servlet>
        <servlet-name>TestServlet</servlet-name>
        <servlet-class>TestServlet01</servlet-class>
        <servlet-class>TestServlet02</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>TestServlet</servlet-name>
        <url-pattern>/TestServlet</url-pattern>
    </servlet-mapping>
</web-app>

・TestServlet01.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class TestServlet01 extends HttpServlet {
    // over ride method
    public void doGet(    HttpServletRequest request,
                        HttpServletResponse response)
        throws IOException, ServletException {
        
        PrintWriter out = response.getWriter();
        out.println("This is test01");
    }
}

・TestServlet02.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class TestServlet02 extends HttpServlet {
    // over ride method
    public void doGet(    HttpServletRequest request,
                        HttpServletResponse response)
        throws IOException, ServletException {
        
        PrintWriter out = response.getWriter();
        out.println("This is test02");
    }
}


要はこれで、「コンテキストパス/TestServlet」のリクエストに対して、

This is test01
This is test02

って出るの?ということを見るのが今回の目的。


動かしてみた。その結果、

おおっ!!(興奮)
f:id:fukamiAO:20171022023844p:plain


当初の予想

まぁ、恐らく一つのリクエストに対して、doGetが2回走るなんてことはないから、何かしらのエラー出るっしょ。

という予想を大きく裏切られる結果にΣ(゚ロ゚;)ガーン


実際の結果

・エラーにはなんない!
servlet-classで設定したServletクラスは後勝ちする!


いやぁ、実際にコード書いて実験してみるもんですね。
勉強になった。

また、以下の点でも収穫がありました。
・ブログの記述に「はてな記法」を取り入れてみた。
・「はてな記法」におけるソースコードの挿入方法を試してみた。
 (以下の記事を参考にさせていただきました。ありがとうございました。
  →記事中へのソースコードの埋め込み - 駆け出しプログラマの備忘録


収穫の多い一日でござった。。。
それでは、またお会いしましょう(・ω・)ノシ