mvn-jetty-pluginによるServlet Webアプリケーション

MavenによるWeb Applicationの作成

上記のarchetypeを選択することでWebアプリケーションに必要なフォルダ類を一括して作成することが可能です.なお,src以下についてはjavaのパッケージが容易されていないため,src/main/javaを作製します.

なお,この時に作成したJavaファイルがIntelijにおいてJavaファイルとして認識されない場合は,フォルダの設定を以下でSource Directoryに変更する必要があります

pluginにjetty,dependencyにjavaxを追加します.作成場所はplugins,dependencies内です.それぞれ正しく移動させてください.

        <plugin>
          <groupId>org.mortbay.jetty</groupId>
          <artifactId>maven-jetty-plugin</artifactId>
          <version>6.1.10</version>
          <configuration>
            <scanIntervalSeconds>10</scanIntervalSeconds>
            <connectors>
              <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                <port>8080</port>
                <maxIdleTime>60000</maxIdleTime>
              </connector>
            </connectors>
          </configuration>
        </plugin>

     <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
             <version>3.1.0</version>
         </dependency>

mvn installを実行した後に,mvn jetty:runを実行します.これでlocalhost:8080/にアクセスするとHello Worldを表示されます.今後新しいファイルを追加するたびにinstallを実行し直します.

注意事項

mvn jetty:runにおいてはjavax.servlet.annotation.WebServletを認識してくれません.
そのため,以下のようなServletファイルを作製してもそれだけではアクセスできません.

package chapter3;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;import java.util.Date;@WebServlet(urlPatterns={"/hello"})public class Hello extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        PrintWriter writer = resp.getWriter();        writer.println("hello");        writer.println(new Date());    }}

上記では/{contextpath}/helloでアクセスしても404 Not Foundが返答されると思います.jetty:runでは,web.xmlを正しく設定してやる必要があります.Hello.javaがsrc/main/java/Hello.javaに位置している場合で表記します.

<web-app>  <display-name>Archetype Created Web Application</display-name>  <servlet>    <servlet-name>Hello</servlet-name>    <servlet-class>Hello</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>Hello</servlet-name>    <url-pattern>/hello/*</url-pattern>  </servlet-mapping></web-app>

この後に再度jetty:runを実行すれば,localhost:8080/helloでアクセスすることが可能です.自分はここに中々気づけず時間を浪費してしまったので,誰かの助けになれば幸いです.

公式ドキュメントは以下に用意されています.ご覧ください.

https://docs.huihoo.com/jetty/the-definitive-reference/jetty-maven-helloworld.html