Search in sources :

Example 36 with ServletException

use of javax.servlet.ServletException in project jetty.project by eclipse.

the class HttpVersionCustomizerTest method testCustomizeHttpVersion.

@Test
public void testCustomizeHttpVersion() throws Exception {
    Server server = new Server();
    HttpConfiguration httpConfig = new HttpConfiguration();
    httpConfig.addCustomizer((connector, config, request) -> request.setHttpVersion(HttpVersion.HTTP_1_1));
    ServerConnector connector = new ServerConnector(server, new HttpConnectionFactory(httpConfig));
    server.addConnector(connector);
    server.setHandler(new AbstractHandler() {

        @Override
        public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
            baseRequest.setHandled(true);
            response.setStatus(500);
            Assert.assertEquals(HttpVersion.HTTP_1_1.asString(), request.getProtocol());
            response.setStatus(200);
            response.getWriter().println("OK");
        }
    });
    server.start();
    try {
        try (SocketChannel socket = SocketChannel.open(new InetSocketAddress("localhost", connector.getLocalPort()))) {
            HttpTester.Request request = HttpTester.newRequest();
            request.setVersion(HttpVersion.HTTP_1_0);
            socket.write(request.generate());
            HttpTester.Response response = HttpTester.parseResponse(HttpTester.from(socket));
            Assert.assertNotNull(response);
            Assert.assertThat(response.getStatus(), Matchers.equalTo(HttpStatus.OK_200));
        }
    } finally {
        server.stop();
    }
}
Also used : SocketChannel(java.nio.channels.SocketChannel) InetSocketAddress(java.net.InetSocketAddress) HttpServletRequest(javax.servlet.http.HttpServletRequest) HttpServletResponse(javax.servlet.http.HttpServletResponse) IOException(java.io.IOException) AbstractHandler(org.eclipse.jetty.server.handler.AbstractHandler) HttpTester(org.eclipse.jetty.http.HttpTester) HttpServletRequest(javax.servlet.http.HttpServletRequest) ServletException(javax.servlet.ServletException) Test(org.junit.Test)

Example 37 with ServletException

use of javax.servlet.ServletException in project jetty.project by eclipse.

the class NetworkTrafficListenerTest method testTrafficWithBigRequestContentOnPersistentConnection.

@Test
public void testTrafficWithBigRequestContentOnPersistentConnection() throws Exception {
    initConnector(new AbstractHandler() {

        @Override
        public void handle(String uri, Request request, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws IOException, ServletException {
            // Read and discard the request body to make the test more
            // reliable, otherwise there is a race between request body
            // upload and response download
            InputStream input = servletRequest.getInputStream();
            byte[] buffer = new byte[4096];
            while (true) {
                int read = input.read(buffer);
                if (read < 0)
                    break;
            }
            request.setHandled(true);
        }
    });
    final AtomicReference<String> incomingData = new AtomicReference<>("");
    final AtomicReference<String> outgoingData = new AtomicReference<>("");
    final CountDownLatch outgoingLatch = new CountDownLatch(1);
    connector.addNetworkTrafficListener(new NetworkTrafficListener.Adapter() {

        @Override
        public void incoming(Socket socket, ByteBuffer bytes) {
            incomingData.set(incomingData.get() + BufferUtil.toString(bytes, StandardCharsets.UTF_8));
        }

        @Override
        public void outgoing(Socket socket, ByteBuffer bytes) {
            outgoingData.set(outgoingData.get() + BufferUtil.toString(bytes, StandardCharsets.UTF_8));
            outgoingLatch.countDown();
        }
    });
    int port = connector.getLocalPort();
    // Generate 32 KiB of request content
    String requestContent = "0123456789ABCDEF";
    for (int i = 0; i < 11; ++i) requestContent += requestContent;
    String request = "" + "POST / HTTP/1.1\r\n" + "Host: localhost:" + port + "\r\n" + "Content-Type: text/plain\r\n" + "Content-Length: " + requestContent.length() + "\r\n" + "\r\n" + requestContent;
    String expectedResponse = "" + "HTTP/1.1 200 OK\r\n" + "Content-Length: 0\r\n" + "\r\n";
    Socket socket = new Socket("localhost", port);
    OutputStream output = socket.getOutputStream();
    output.write(request.getBytes(StandardCharsets.UTF_8));
    output.flush();
    assertTrue(outgoingLatch.await(1, TimeUnit.SECONDS));
    assertEquals(expectedResponse, outgoingData.get());
    byte[] responseBytes = readResponse(socket);
    String response = new String(responseBytes, StandardCharsets.UTF_8);
    assertEquals(expectedResponse, response);
    assertEquals(request, incomingData.get());
    socket.close();
}
Also used : InputStream(java.io.InputStream) OutputStream(java.io.OutputStream) ByteArrayOutputStream(java.io.ByteArrayOutputStream) ServletOutputStream(javax.servlet.ServletOutputStream) HttpServletRequest(javax.servlet.http.HttpServletRequest) HttpServletResponse(javax.servlet.http.HttpServletResponse) AtomicReference(java.util.concurrent.atomic.AtomicReference) IOException(java.io.IOException) CountDownLatch(java.util.concurrent.CountDownLatch) ByteBuffer(java.nio.ByteBuffer) AbstractHandler(org.eclipse.jetty.server.handler.AbstractHandler) HttpServletRequest(javax.servlet.http.HttpServletRequest) ServletException(javax.servlet.ServletException) NetworkTrafficListener(org.eclipse.jetty.io.NetworkTrafficListener) Socket(java.net.Socket) Test(org.junit.Test)

Example 38 with ServletException

use of javax.servlet.ServletException in project jetty.project by eclipse.

the class NetworkTrafficListenerTest method testTrafficWithRequestContentWithResponseRedirectOnPersistentConnection.

@Test
public void testTrafficWithRequestContentWithResponseRedirectOnPersistentConnection() throws Exception {
    final String location = "/redirect";
    initConnector(new AbstractHandler() {

        @Override
        public void handle(String uri, Request request, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws IOException, ServletException {
            request.setHandled(true);
            servletResponse.sendRedirect(location);
        }
    });
    final AtomicReference<String> incomingData = new AtomicReference<>();
    final CountDownLatch incomingLatch = new CountDownLatch(1);
    final AtomicReference<String> outgoingData = new AtomicReference<>("");
    final CountDownLatch outgoingLatch = new CountDownLatch(1);
    connector.addNetworkTrafficListener(new NetworkTrafficListener.Adapter() {

        @Override
        public void incoming(Socket socket, ByteBuffer bytes) {
            incomingData.set(BufferUtil.toString(bytes, StandardCharsets.UTF_8));
            incomingLatch.countDown();
        }

        @Override
        public void outgoing(Socket socket, ByteBuffer bytes) {
            outgoingData.set(outgoingData.get() + BufferUtil.toString(bytes, StandardCharsets.UTF_8));
            outgoingLatch.countDown();
        }
    });
    int port = connector.getLocalPort();
    String requestContent = "a=1&b=2";
    String request = "" + "POST / HTTP/1.1\r\n" + "Host: localhost:" + port + "\r\n" + "Content-Type: application/x-www-form-urlencoded\r\n" + "Content-Length: " + requestContent.length() + "\r\n" + "\r\n" + requestContent;
    String expectedResponse = "" + "HTTP/1.1 302 Found\r\n" + "Location: http://localhost:" + port + location + "\r\n" + "Content-Length: 0\r\n" + "\r\n";
    Socket socket = new Socket("localhost", port);
    OutputStream output = socket.getOutputStream();
    output.write(request.getBytes(StandardCharsets.UTF_8));
    output.flush();
    assertTrue(incomingLatch.await(1, TimeUnit.SECONDS));
    assertEquals(request, incomingData.get());
    assertTrue(outgoingLatch.await(1, TimeUnit.SECONDS));
    assertEquals(expectedResponse, outgoingData.get());
    byte[] responseBytes = readResponse(socket);
    String response = new String(responseBytes, StandardCharsets.UTF_8);
    assertEquals(expectedResponse, response);
    socket.close();
}
Also used : OutputStream(java.io.OutputStream) ByteArrayOutputStream(java.io.ByteArrayOutputStream) ServletOutputStream(javax.servlet.ServletOutputStream) HttpServletRequest(javax.servlet.http.HttpServletRequest) HttpServletResponse(javax.servlet.http.HttpServletResponse) AtomicReference(java.util.concurrent.atomic.AtomicReference) IOException(java.io.IOException) CountDownLatch(java.util.concurrent.CountDownLatch) ByteBuffer(java.nio.ByteBuffer) AbstractHandler(org.eclipse.jetty.server.handler.AbstractHandler) HttpServletRequest(javax.servlet.http.HttpServletRequest) ServletException(javax.servlet.ServletException) NetworkTrafficListener(org.eclipse.jetty.io.NetworkTrafficListener) Socket(java.net.Socket) Test(org.junit.Test)

Example 39 with ServletException

use of javax.servlet.ServletException in project jetty.project by eclipse.

the class NetworkTrafficListenerTest method testTrafficWithNoResponseContentOnNonPersistentConnection.

@Test
public void testTrafficWithNoResponseContentOnNonPersistentConnection() throws Exception {
    initConnector(new AbstractHandler() {

        @Override
        public void handle(String uri, Request request, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws IOException, ServletException {
            request.setHandled(true);
        }
    });
    final AtomicReference<String> incomingData = new AtomicReference<>();
    final CountDownLatch incomingLatch = new CountDownLatch(1);
    final AtomicReference<String> outgoingData = new AtomicReference<>("");
    final CountDownLatch outgoingLatch = new CountDownLatch(1);
    connector.addNetworkTrafficListener(new NetworkTrafficListener.Adapter() {

        @Override
        public void incoming(Socket socket, ByteBuffer bytes) {
            incomingData.set(BufferUtil.toString(bytes, StandardCharsets.UTF_8));
            incomingLatch.countDown();
        }

        @Override
        public void outgoing(Socket socket, ByteBuffer bytes) {
            outgoingData.set(outgoingData.get() + BufferUtil.toString(bytes, StandardCharsets.UTF_8));
            outgoingLatch.countDown();
        }
    });
    int port = connector.getLocalPort();
    String request = "" + "GET / HTTP/1.1\r\n" + "Host: localhost:" + port + "\r\n" + "Connection: close\r\n" + "\r\n";
    String expectedResponse = "" + "HTTP/1.1 200 OK\r\n" + "Connection: close\r\n" + "\r\n";
    Socket socket = new Socket("localhost", port);
    OutputStream output = socket.getOutputStream();
    output.write(request.getBytes(StandardCharsets.UTF_8));
    output.flush();
    assertTrue(incomingLatch.await(1, TimeUnit.SECONDS));
    assertEquals(request, incomingData.get());
    assertTrue(outgoingLatch.await(1, TimeUnit.SECONDS));
    assertEquals(expectedResponse, outgoingData.get());
    byte[] responseBytes = readResponse(socket);
    String response = new String(responseBytes, StandardCharsets.UTF_8);
    assertEquals(expectedResponse, response);
    socket.close();
}
Also used : OutputStream(java.io.OutputStream) ByteArrayOutputStream(java.io.ByteArrayOutputStream) ServletOutputStream(javax.servlet.ServletOutputStream) HttpServletRequest(javax.servlet.http.HttpServletRequest) HttpServletResponse(javax.servlet.http.HttpServletResponse) AtomicReference(java.util.concurrent.atomic.AtomicReference) IOException(java.io.IOException) CountDownLatch(java.util.concurrent.CountDownLatch) ByteBuffer(java.nio.ByteBuffer) AbstractHandler(org.eclipse.jetty.server.handler.AbstractHandler) HttpServletRequest(javax.servlet.http.HttpServletRequest) ServletException(javax.servlet.ServletException) NetworkTrafficListener(org.eclipse.jetty.io.NetworkTrafficListener) Socket(java.net.Socket) Test(org.junit.Test)

Example 40 with ServletException

use of javax.servlet.ServletException in project jetty.project by eclipse.

the class NetworkTrafficListenerTest method testTrafficWithResponseContentChunkedOnPersistentConnection.

@Test
public void testTrafficWithResponseContentChunkedOnPersistentConnection() throws Exception {
    final String responseContent = "response_content";
    final String responseChunk1 = "response_content".substring(0, responseContent.length() / 2);
    final String responseChunk2 = "response_content".substring(responseContent.length() / 2, responseContent.length());
    initConnector(new AbstractHandler() {

        @Override
        public void handle(String uri, Request request, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws IOException, ServletException {
            request.setHandled(true);
            ServletOutputStream output = servletResponse.getOutputStream();
            output.write(responseChunk1.getBytes(StandardCharsets.UTF_8));
            output.flush();
            output.write(responseChunk2.getBytes(StandardCharsets.UTF_8));
            output.flush();
        }
    });
    final AtomicReference<String> incomingData = new AtomicReference<>();
    final CountDownLatch incomingLatch = new CountDownLatch(1);
    final AtomicReference<String> outgoingData = new AtomicReference<>("");
    final CountDownLatch outgoingLatch = new CountDownLatch(1);
    connector.addNetworkTrafficListener(new NetworkTrafficListener.Adapter() {

        @Override
        public void incoming(Socket socket, ByteBuffer bytes) {
            incomingData.set(BufferUtil.toString(bytes, StandardCharsets.UTF_8));
            incomingLatch.countDown();
        }

        @Override
        public void outgoing(Socket socket, ByteBuffer bytes) {
            outgoingData.set(outgoingData.get() + BufferUtil.toString(bytes, StandardCharsets.UTF_8));
            if (outgoingData.get().endsWith("\r\n0\r\n\r\n"))
                outgoingLatch.countDown();
        }
    });
    int port = connector.getLocalPort();
    String request = "" + "GET / HTTP/1.1\r\n" + "Host: localhost:" + port + "\r\n" + "\r\n";
    String expectedResponse = "" + "HTTP/1.1 200 OK\r\n" + "Transfer-Encoding: chunked\r\n" + "\r\n" + responseChunk1.length() + "\r\n" + responseChunk1 + "\r\n" + responseChunk2.length() + "\r\n" + responseChunk2 + "\r\n" + "0\r\n" + "\r\n";
    Socket socket = new Socket("localhost", port);
    OutputStream output = socket.getOutputStream();
    output.write(request.getBytes(StandardCharsets.UTF_8));
    output.flush();
    assertTrue(incomingLatch.await(1, TimeUnit.SECONDS));
    assertEquals(request, incomingData.get());
    assertTrue(outgoingLatch.await(1, TimeUnit.SECONDS));
    assertEquals(expectedResponse, outgoingData.get());
    byte[] responseBytes = readResponse(socket);
    String response = new String(responseBytes, StandardCharsets.UTF_8);
    assertEquals(expectedResponse, response);
    socket.close();
}
Also used : ServletOutputStream(javax.servlet.ServletOutputStream) OutputStream(java.io.OutputStream) ByteArrayOutputStream(java.io.ByteArrayOutputStream) ServletOutputStream(javax.servlet.ServletOutputStream) HttpServletRequest(javax.servlet.http.HttpServletRequest) HttpServletResponse(javax.servlet.http.HttpServletResponse) AtomicReference(java.util.concurrent.atomic.AtomicReference) IOException(java.io.IOException) CountDownLatch(java.util.concurrent.CountDownLatch) ByteBuffer(java.nio.ByteBuffer) AbstractHandler(org.eclipse.jetty.server.handler.AbstractHandler) HttpServletRequest(javax.servlet.http.HttpServletRequest) ServletException(javax.servlet.ServletException) NetworkTrafficListener(org.eclipse.jetty.io.NetworkTrafficListener) Socket(java.net.Socket) Test(org.junit.Test)

Aggregations

ServletException (javax.servlet.ServletException)2496 IOException (java.io.IOException)1627 HttpServletRequest (javax.servlet.http.HttpServletRequest)701 HttpServletResponse (javax.servlet.http.HttpServletResponse)661 Test (org.junit.Test)444 PrintWriter (java.io.PrintWriter)239 AbstractHandler (org.eclipse.jetty.server.handler.AbstractHandler)228 ContentResponse (org.eclipse.jetty.client.api.ContentResponse)188 CountDownLatch (java.util.concurrent.CountDownLatch)169 HttpServlet (javax.servlet.http.HttpServlet)151 Request (org.eclipse.jetty.server.Request)150 InputStream (java.io.InputStream)147 HashMap (java.util.HashMap)147 ArrayList (java.util.ArrayList)133 HttpSession (javax.servlet.http.HttpSession)127 SQLException (java.sql.SQLException)124 OutputStream (java.io.OutputStream)115 ServletOutputStream (javax.servlet.ServletOutputStream)113 Properties (java.util.Properties)108 List (java.util.List)107