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でアクセスすることが可能です.自分はここに中々気づけず時間を浪費してしまったので,誰かの助けになれば幸いです.
公式ドキュメントは以下に用意されています.ご覧ください.