Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 16

Jetty

 자바 기반의 웹어플리케이션 서버

 API

 HTTT 서버와 HTTP 클라이언트와 서블릿 컨테이너를


제공하는 오픈 소스 프로젝트

 유연함 , 확장성 , 작은 용량 , 빠른 속도 , 자바
어플리케이션에 임베딩 , 비동기 지원

 at mortbay(v1-v4), sourceforge(v5), codehaus(v6-)


and eclipse(v7-)
Architecture

View from 20,000 feet  Server 는 HTTP


Connection 을
받아들이는 Connector
와 request,response 를
처리하는 Handler 를
연결한다 .

 다양한 Connector 와
Handler 를 제공한다 .

 적절한 Conector 와
Handler 사용으로
오버헤드를 줄일 수 있다
.
Connector

 Connection 받기 , Request 파싱 , Response 생성

NIO 지원

non Bolcking
Handlers

 받은 Request 를 처리
Running Jetty

 start.jar
java -jar start.jar
java -Djetty.host=localhost -Djetty.port=8080 -jar
start.jar etc/jetty.xml

 jetty-runner.jar
java -jar jetty-runner.jar my.war
java -jar jetty-runner.jar --path /one my1.war
--path /two my2

 Maven Jetty Plugin


mvn jetty:run
mvn jetty:stop
Running Jetty

 embed jetty - my application


Server server = new Server(8080);
server.setHandler(handler);
server.start();

Server server = new Server(8080);


Context root = new Context(server,"/",Context.SESSIONS);
root.addServlet(new ServletHolder(new HelloServlet("Ciao")), "/*");
server.start();
Writing a Jetty Handler

 Handler API - org.mortbay.jetty.Handler 인터페이스


구현
public static class HelloHandler extends AbstractHandler {
public void handle(String target, HttpServletRequest request,
HttpServletResponse response, int dispatch)
throws IOException, ServletException
{
Request base_request = (request instanceof Request) ?
(Request)request:HttpConnection.getCurrentConnection().getReques
t();
base_request.setHandled(true);

String userid = request.getParameter("USERID");


response.setContentType("text/html");
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println("<h1>Hello OneHandler </h1>")
response.getWriter().println(userid);
}
}
Writing a Jetty Handler

http://localhost:8080/Hello?USERID=ywmin

target : URI 스트링 . /Hello


request, response : Wrapped Jetty Request, Response Object.
dispatch: REQUEST, FORWARD, INCLUDE, ERROR
Writing a Jetty Handler
 Handling Request
서블릿 Request API 를 모두 사용 할 수 있다
response.setContentType("text/html");
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println("<h1>Hello OneHandler</h1>");

Jetty Object 는 다른 핸들러로 보낼 수 없다 .


base_request.setHandled(true); // 핸들러 표시 ..

Filtering the Request and/or Response


try {
base_request.setSession(a_session);
next_handler.handle(target,request,response,dispatch);
} finally {
base_request.setSession(old_session);
}

 Passing the Request and Response to another handler


HandlerConatiner 를 구현한 HandlerCollection, HandlerList...
Embedding Jetty

 Handler
Handler handler=new AbstractHandler() {
public void handle(String target, HttpServletRequest request,
HttpServletResponse response, int dispatch)
throws IOException, ServletException
{
response.setContentType("text/html");
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println("<h1>Hello</h1>");
((Request)request).setHandled(true);
}
};
Server server = new Server(8080);
server.setHandler(handler);
server.start();
Embedding Jetty

 Servlet
Server server = new Server(8080);
Context root = new Context(server,"/",Context.SESSIONS);
root.addServlet(new ServletHolder(new HelloServlet("Ciao")), "/*");

ServletHandler handler=new ServletHandler();


server.setHandler(handler);
handler.addServletWithMapping("org.mortbay.jetty.example.MinimalServlets$H
elloServlet", "/hello");

server.start();

 jetty.xml
Server server = new Server();
XmlConfiguration configuration = new XmlConfiguration(new
File("myJetty.xml").toURL());
configuration.configure(server);
server.start();
Embedding Jetty

 Loading WAR
Server server = new Server();
Connector connector = new SelectChannelConnector();
connector.setPort(PORT);
connector.setHost("127.0.0.1");
server.addConnector(connector);

WebAppContext wac = new WebAppContext();


wac.setContextPath("/");
wac.setWar("./web");
// this is path to .war OR TO expanded, existing webapp;
//WILL FIND web.xml and parse it
server.setHandler(wac);
server.setStopAtShutdown(true);
server.start();
Configuration jetty.xml
<Configure class="org.mortbay.jetty.Server">

<Call name="addListener">
<Arg>
<New class="org.mortbay.http.SocketListener">

<Set name="Host">
<SystemProperty name="service.listen.host" default="localhost"/>
</Set>

<Set name="Port">
<SystemProperty name="service.listen.port" default="7501"/>
</Set>

</New>
</Arg>
</Call>

... 다음 ..
Configuration jetty.xml
... 이어서 ...

<Call name="getContext">

<Arg>/embed</Arg>

<!-- call methods on the return value of Server.getContext() -->

<Call name="addServlet">

<Arg>"Simple"</Arg> <!-- servlet name -->


<Arg>/TryThis/*</Arg><!-- URL pattern -->
<Arg>sample.SimpleServlet</Arg><!-- servlet class -->

</Call>

</Call>

</Configure>
Test with Jetty
public class OneHandlerTest {
private static Server server;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
server = new Server();
Connector connector=new SocketConnector();
connector.setPort(8080);
server.setConnectors(new Connector[]{connector});

Handler handler=new HelloHandler();


server.setHandler(handler);

server.start();
}

@Test
public void testGetContentOK( ) throws IOException {
...........
}

@AfterClass
public static void tearDownAfterClass( ) throws Exception {
server.stop();
}
}
Resources

 What Is Jetty - http://www.onjava.com

 http://jetty.mortbay.org/jetty/

You might also like