////
import com.sun.net.httpserver.*

// Это - прообраз Jasper сервера
def server = HttpServer.create(new InetSocketAddress(8000),0)
server.with{
  createContext("/", new JasperServer())
  createContext("/kill", new Kill(server:server))
  setExecutor(null)
  start()
  println "\nServer startded"
}
//
class Kill implements HttpHandler {
  def server
  public void handle(HttpExchange exchange) throws IOException {
    exchange.responseHeaders['Content-Type'] = 'text/html; charset='+CharsetToolkit.defaultSystemCharset
    exchange.sendResponseHeaders(200, 0)
    def out = new PrintWriter(exchange.getResponseBody())
    out.print "

JasperServer убит насмерть !

" out.close() exchange.close() server.stop(3) //System.exit(0) } } // class JasperServer implements HttpHandler { public void handle(HttpExchange exchange) throws IOException { //здесь выбираются все параметры запроса def query = exchange.getRequestURI().getQuery() def url = new URL("http://localhost/?" + query) def map = url.query.split('&').inject([:]) { map, kv-> def (key, value) = kv.split('=').toList(); map[key] = value != null ? URLDecoder.decode(value) : null; map } try{ //Здесь формируется запрошенный документ (условно) def fname = "invalid.pdf" def file = new File ("r:/DROPBOX/edunet/workspace/jasperTest/$fname") //здесь сформированный документ отправляется клиенту по сети def h = exchange.getResponseHeaders() h.add("Content-Type", "application/pdf") h.add("Content-Disposition", "inline; filename=$fname") byte [] bytearray = new byte [(int)file.length()] def fis = new FileInputStream(file) def bis = new BufferedInputStream(fis) bis.read(bytearray, 0, bytearray.length) exchange.sendResponseHeaders(200, file.length()) def os = exchange.getResponseBody() os.write(bytearray,0,bytearray.length) println map } catch(Exception ex) { println "Ошиб=${ex.getMessage()}" ex.printStackTrace() } exchange.close() } } // Это - HTTP-клиент java.awt.Desktop.getDesktop().browse(new URI("http://localhost:8000/?pType=m&pServ=2&pLevel=h2&pStamp=201104061100")) java.awt.Desktop.getDesktop().browse(new URI("http://localhost:8000/kill")) ////