`

jdk6的httpserver小试

阅读更多

网上一堆例子,个人做一个,有下载,可以用模板的小例子。(Groovy)

 

尤其是在团队做demo时候使用,实时更新最先代码。

 

代码如下:

 

import com.sun.net.httpserver.*
import org.apache.commons.io.IOUtils
import org.lilystudio.smarty4j.*

class TplHandler implements HttpHandler {
    def engine = new Engine()
    final String contextDir = "../"
    final String encoding = "GBK"
    
    public TplHandler(){
        engine.setTemplatePath(contextDir)
        engine.setEncoding(encoding)
		engine.setDebug(true)
    }

    def out(Map map, String tpl, Writer writer) {
        def template = engine.getTemplate(tpl)
        def ctx = new Context()
        ctx.putAll(map)
		template.merge(ctx, writer)
    }   


    void handle(HttpExchange he) {
		he.sendResponseHeaders(200, 0)

    //  def is = he.requestBody
    //  def reader = new BufferedReader(new InputStreamReader(is))
    //  List lines = reader.readLines() 

    //  String path = he.httpContext.path
        def uri = he.getRequestURI() 
        String tpl = uri.path

		// 如果是下载
		if(tpl.endsWith('download')){
			try {
				def ant = new AntBuilder()
				String zipFile = contextDir + '../demo.zip'
				ant.zip destfile : zipFile, basedir : contextDir

				he.responseHeaders.set("Content-Type", "application/zip")
				he.responseHeaders.set("Content-Disposition", "attachment;" + "filename=\"demo.zip\"")

				def os = he.responseBody
				def downFile = new File(zipFile)
				os.write(IOUtils.toByteArray(new FileInputStream(downFile)))
				os.flush()
				os.close()
				return
			} catch (ex) {
				println ex.message
			}
		}

        try {
			def os = he.responseBody
            if(tpl ==~ /.*\.(js|css)$/){
                def writer = new PrintWriter(new OutputStreamWriter(os, encoding))
                def file = new File(new File(contextDir), tpl)
                if(!file.exists()){
					he.responseHeaders.set("Content-Type", 'text/plain')
                    writer.println 'File not exists : ' + tpl
                }else {
					def mat = tpl =~ /.*\.(js|css)$/
					String mime = mat[0][1]
					he.responseHeaders.set("Content-Type", 
						'js' == mime ? 'application/x-javascript' : 'text/css')
                    writer.println file.text
				}

                writer.flush()
                writer.close()
            }else if(tpl ==~ /.*(?i)(\.gif|\.jpg|\.png)$/){
                def mat = tpl =~ /.*(?i)\.(gif|jpg|png)$/
                he.responseHeaders.set("Content-Type", "image/" + mat[0][1])

                def file = new File(new File(contextDir), tpl)
                def defaultFile = new File(new File(contextDir), 'images/calen_pic.gif')

                if(!file.exists())
                    os.write(IOUtils.toByteArray(new FileInputStream(defaultFile)))
                else
                    os.write(IOUtils.toByteArray(new FileInputStream(file)))

				os.flush()
				os.close()
            }else{
				he.responseHeaders.set("Content-Type", "text/html;charset=" + encoding)

                Map params = [:]
                def writer = new PrintWriter(new OutputStreamWriter(os, encoding))

				try {
					out(params, tpl, writer)
				} catch (ex) {
					writer.println ex.message
				} finally {
					writer.flush()
					writer.close()				    
				}
            }
        } catch (ex) {
			he.responseHeaders.set("Content-Type", "text/plain;charset=" + encoding)

            def writer = new PrintWriter(new OutputStreamWriter(os, encoding))
            writer.println ex.message
			writer.flush()
			writer.close()
        } 
    }
}


HttpServer hs = HttpServer.create(new InetSocketAddress(8888), 0)
hs.createContext("/", new TplHandler())
hs.start()
println(" ---Start--- ")
println(hs.getAddress().getHostName())
println(hs.getAddress().getPort())
println(hs.getAddress().getAddress())
分享到:
评论

相关推荐

    jdk6免安装下载 免费下载

    JDK6,也称为JDK 1.6,是Oracle公司发布的一个重要版本,它在2006年推出,提供了许多新特性并改进了旧的功能。在本文中,我们将深入探讨JDK6的主要特点和包含的文件内容。 首先,JDK6引入了许多关键的新特性,以...

    windows64位jdk6、jdk7、jdk8安装包

    在本主题中,我们重点关注的是Windows 64位系统下的JDK6、JDK7和JDK8的安装包。这三个版本的JDK在Java的发展历程中都占有重要的地位,它们为开发者提供了编写、编译、调试和运行Java应用程序所需的所有工具。 首先...

    苹果电脑安装jdk1.6 mac for jdk1.6 jdk6 安装版

    mac for jdk1.6 jdk6 安装版 里面有两个jdk1.6的安装包,都可以用 如果电脑上安装有1.7,1.8等高版本jdk就不要再下安装包了,安装包安装会报错 命令是这个:brew install java6或 brew install homebrew/cask-...

    jdk6,jdk7,jdk8,jdk9,jdk10 windox、linux版本 百度云

    官网 jdk6,jdk7,jdk8,jdk9,jdk10 windox 32位、64位、linux 32位、64位 百度云。

    jdk6-linux

    【标题】"jdk6-linux"指的是Java Development Kit (JDK) 的6版,专为Linux操作系统设计。在软件开发领域,JDK是用于编写、测试和运行Java应用程序的关键工具集。这个版本是针对Linux环境的,它包含了编译器、调试器...

    java jdk1.8 连接sqlserver数据库使用的扩展jar包-sqljdbc42

    Java JDK 1.8 连接SQL Server数据库时,需要用到特定的驱动程序,这个驱动程序通常以JAR包的形式提供。在本例中,我们关注的JAR包是`sqljdbc42.jar`,它是微软官方提供的SQL Server JDBC驱动的一个版本,特别针对JDK...

    linux版jdk6

    linux版jdk6linux版jdk6linux版jdk6linux版jdk6linux版jdk6linux版jdk6linux版jdk6

    JDK6 帮助文档 JDK6 帮助文档

    JDK6 帮助文档 JDK6 帮助文档JDK6 帮助文档 JDK6 帮助文档

    jdk6 源码 SRC

    jdk6 源码jdk6 源码jdk6 源码jdk6 源码jdk6 源码jdk6 源码

    jdk-6u21-windows-x64

    jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-...

    mac jdk6 java6支持最新macOs10.13.4版本及以下

    mac jdk6 java6支持最新macOs10.13.4版本及以下,亲测有效

    JDK6 帮助文档 JDK6 帮助文档2

    JDK6 帮助文档 JDK6 帮助文档JDK6 帮助文档 JDK6 帮助文档

    JDK6 API中文参考手册[沈东良制](最经典的JDK6API)

    最经典的中文JDK6 API,适用于JDK6、JDK7、JDK8,Java程序员开发必备参考文档

    JDK6 免安装版

    本压缩包提供的是JDK6的免安装版,这意味着用户无需经过传统的安装过程,只需解压缩并配置好环境变量,就可以在系统中使用JDK6。 首先,让我们了解一下JDK6中的主要特性: 1. **泛型增强**:JDK6对泛型的支持更加...

    jdk6 windox版、linux版 百度云

    jdk-6u10-windows-x64 jdk-6u25-windows-i586 jdk-6u45-linux-x64.bin 等等

    jdk 6u5 for windows

    **Java Development Kit (JDK) 6 Update 5 for Windows** Java Development Kit (JDK) 是Oracle公司提供的用于开发和运行Java应用程序的核心工具集。JDK 6 Update 5 版本是针对Windows操作系统的特定版本,它包含了...

    jdk-6u39-windows-i586

    jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows...

    JDK 6 中文帮助文档

    7. **JVM优化**:JDK 6的JVM(Java Virtual Machine)进行了多方面的优化,包括更快的启动速度、更好的垃圾回收策略以及更高效的编译器(如Client Compiler和Server Compiler),从而提高了整体性能。 8. **XML处理...

    Windows server 2019安装JDK.docx

    Windows Server 2019 安装 JDK 详细指南 Windows Server 2019 是一款功能强大且稳定的操作系统,对于企业级应用和开发环境非常友好。然而,在安装 JDK 时,可能会遇到进度条卡住的问题,无法继续安装。本文将详细...

Global site tag (gtag.js) - Google Analytics