Jettyのダウンロードと解凍
現在JettyはEclipse Foundationでホストされている。
http://www.mortbay.org/jetty/からリンクを辿り、Eclipseのサイトから以下をダウンロードして解凍。
jetty-distribution-7.0.0.RC1.zip
Eclipseでプロジェクト作成
Eclipseで、新規Javaプロジェクトを作成し、先ほど解凍したlibフォルダ内の以下のファイルをプロジェクトにコピーしてパスを通す。
- jetty-continuation-7.0.0.RC1.jar
- jetty-http-7.0.0.RC1.jar
- jetty-io-7.0.0.RC1.jar
- jetty-security-7.0.0.RC1.jar
- jetty-server-7.0.0.RC1.jar
- jetty-servlet-7.0.0.RC1.jar
- jetty-util-7.0.0.RC1.jar
- jetty-webapp-7.0.0.RC1.jar
- jetty-xml-7.0.0.RC1.jar
- servlet-api-2.5.jar
JSP等使う場合はこの他にもjarがいるが・
JavaからJettyを起動
package etc9; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; public class JettyLauncher { public static void main(String[] args) throws Exception { launchJetty(); } public static void launchJetty() throws Exception { Server server = new Server(8080); ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); server.setHandler(context); context.addServlet(new ServletHolder(new HelloServlet()), "/hello"); server.start(); server.join(); } public static class HelloServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setStatus(HttpServletResponse.SC_OK); response.getWriter().println("<h1>Hello SimpleServlet</h1>"); response.getWriter().println("session="+request.getSession(true).getId()); } } }
ブラウザから以下にアクセスしてページが表示できれば成功
http://localhost:8080/hello
web.xmlを使用する例
プロジェクト内に以下のフォルダを掘る
WebContent/WEB-INF/classes
プロジェクトの出力先フォルダを「WebContent/WEB-INF/classes」に設定
WebContent/WEB-INF/にweb.xmlを以下の設定で配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>hello</servlet-name> <servlet-class>etc9.HelloServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
package etc9; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.webapp.WebAppContext; public class JettyLauncher { private static final int PORT = 8080; private static final String WAR_PATH = "WebContent"; private static final String CONTEXT_PATH = "/web"; public static void launchJetty() throws Exception { Server server = new Server(PORT); ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); server.setHandler(context); WebAppContext web = new WebAppContext(WAR_PATH, CONTEXT_PATH); server.setHandler(web); server.start(); server.join(); } public static void main(String[] args) throws Exception { launchJetty(); } }
サーブレットは普通に
package etc9; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setStatus(HttpServletResponse.SC_OK); response.getWriter().println("<h1>Hello SimpleServlet</h1>"); response.getWriter().println("session="+request.getSession(true).getId()); } }
あれっ、コンテキストパスが効いていない・の?