HTTP and Java

advertisement
HTTP and Java
Background
• TCP/IP
– Break message into packets
– Give each packet a number and total number of
packets in message
– Destination IP address and port numbers
– Source IP address and port
• IP Address (v4 and v6)
• Port Number (0 to 216-1)
– Well Know (0-1023)
– Registered (1024-49151)
– Dynamic, private, ephemeral (all the rest)
Sockets
• Internet Sockets
– Listener or Server Socket
– Client Sockets
– Two way connection provides two way
communication
• Operating specific means of
– Opening
– Closing
– Transmitting to and from a “socket”
• Often uses a protocol like TCP/IP
• In Java it is viewed as a stream
Hypertext Transfer Protocol
• Application level
– Provides communication between applications
• Usually a client and server (though it may be peer-to-peer)
– Underlying transport layer is TCP/IP
• Request-Response Protocol
• Used for sending and receiving various types of
information
– Used in web-applications especially in HTML-based
applications
High-level View
• An HTTP Session
– Client establishes a TCP connection to a particular
port (e.g. port 80)
– Server waits for message from Client
– Upon receipt the server sends back a
• Status (e.g. ok)
• Response
– Requested Information
– Error Message
– Or it could be empty
Message Types:
HTTP Request
• Request Line
– GET or POST with pathToResource
• Header Lines
– Header Name – Value Pairs
• Example Names: From:, User-Agent:
• Blank Line
• Optional Message Body
– Gets don’t have a Message Body
– For example: XML Encoded information in a POST
Message Types
HTTP Response
• Status Line
– For example:
• HTTP/1.0 200 OK
• HTTP/1.0 404 Not Found
• Header Lines
– Header Name – Value Pairs
– Example Names: Server:, Last-Modified:
• Blank Line
• Optional Message Body
– Examples
• HTML
• XML Encoded Information is a response expected
• Could be blank for a pure “POST”
Request Methods
• GET
– Should be used to retrieve information, not modify
information on the server
• Not enforced and some gets don’t conform to this
suggestion, can cause problems
– Encodes parameters in URL sent to server
• Appears in the request line (the first line)
• Server may have URL length limits (e.g. 2083 characters)
Request Methods
• POST
– Should be used to change information
– Information sent in message body
• Can be any format (including binary)
• We will use XML
• Is of arbitrary size
HTTP And Java
• Several “HTTP” servers written in Java
– Jetty
– Apache
– Oracle HTTPServer
• Built into Oracle’s Java 1.6 and 1.7
• Import com.sun.net.httpserver.*;
• We will use this one
HttpServer Code
• HttpServer server;
• HTTPServer.create(
new InetSocketAddress(portNumber),
maxNumberOfConnections);
• server.setExecutor(null);
– Default thread pool manager
• server.createContext(URLSuffix, handlerMethodObject)
– Handler for various suffixes in the URL
– Handler “method” is a Command object that extends HttpHandler
• HttpHandler has one method: void handle(HttpExchange exchange)
• Often the handler is declared as an instance of an anonymous inner type
that overrides the “void handle(HttpExchange exchange)” method
• server.start()
HttpExchange Code
•
•
An HttpExchange encapsulates an HTTP request received and a response to be generated in one
exchange.
exchange.sendResponseHeaders(int rCode, responseLength)
– rCode is often a constant found in HttpURLConnection
• Examples
– HttpURLConnection.HTTP_INTERNAL_ERROR
– HttpURLConnection.HTTP_OK,
– responseLength
• 0 means an arbitrary size
• -1 means no response body
•
exchange.getRequestBody();
–
–
•
Gets the body of the request as an input stream
Used as a parameter to xmlStream.fromXML(exchange.getRequestBody());
exchange.getResponseBody();
–
–
Gets the body of the request as an input stream
Used as a parameter to xmlStream.toXML(object, exchange.getResponseBody());
Download