1
2
3
4
5
6
7
8
9
10 package ch.qos.logback.access.jetty;
11
12 import java.io.IOException;
13 import java.io.OutputStream;
14
15 import javax.servlet.ServletException;
16 import javax.servlet.http.HttpServletRequest;
17 import javax.servlet.http.HttpServletResponse;
18
19 import org.mortbay.jetty.Handler;
20 import org.mortbay.jetty.HttpConnection;
21 import org.mortbay.jetty.Request;
22 import org.mortbay.jetty.handler.AbstractHandler;
23 import org.mortbay.util.ByteArrayISO8859Writer;
24
25 import ch.qos.logback.access.PatternLayout;
26 import ch.qos.logback.access.spi.AccessEvent;
27 import ch.qos.logback.access.testUtil.NotifyingListAppender;
28 import ch.qos.logback.core.ConsoleAppender;
29
30 public class JettyFixture extends JettyFixtureBase {
31
32 Handler handler = new BasicHandler();
33
34 public JettyFixture(RequestLogImpl impl, int port) {
35 super(impl, port);
36 url = "http://localhost:" + port + "/";
37 }
38
39 public void start() throws Exception {
40 super.start();
41 Thread.yield();
42 }
43
44 public void stop() throws Exception {
45 super.stop();
46 Thread.sleep(500);
47 }
48
49 protected void buildContext() {
50 NotifyingListAppender appender = new NotifyingListAppender();
51 appender.setContext(requestLogImpl);
52 appender.setName("list");
53 appender.start();
54
55 ConsoleAppender<AccessEvent> console = new ConsoleAppender<AccessEvent>();
56 console.setContext(requestLogImpl);
57 console.setName("console");
58 PatternLayout layout = new PatternLayout();
59 layout.setContext(requestLogImpl);
60 layout.setPattern("%date %server %clientHost");
61 console.setLayout(layout);
62 layout.start();
63 console.start();
64
65 requestLogImpl.addAppender(appender);
66 requestLogImpl.addAppender(console);
67 }
68
69 @Override
70 protected Handler getHandler() {
71 return handler;
72 }
73
74 }
75
76 class BasicHandler extends AbstractHandler {
77 public void handle(String target, HttpServletRequest request,
78 HttpServletResponse response, int dispatch) throws IOException,
79 ServletException {
80
81
82
83
84 OutputStream out = response.getOutputStream();
85 ByteArrayISO8859Writer writer = new ByteArrayISO8859Writer();
86 writer.write("hello world");
87 writer.flush();
88 response.setContentLength(writer.size());
89 writer.writeTo(out);
90 out.flush();
91
92 Request base_request = (request instanceof Request) ? (Request) request
93 : HttpConnection.getCurrentConnection().getRequest();
94 base_request.setHandled(true);
95
96 }
97 }